2012-12-15 13 views
0

我正在使用濾波器來代替使用固定大小的濾波窗口,我使用基於噪聲密度的自適應窗口大小。例如,假設窗口大小是3x3,它有9個像素。當所有這9個像素被檢測爲損壞的像素時,進入下一步是無用的,因爲我需要窗口中的一些噪聲自由像素來處理下一步。在這種情況下,我將窗口大小更改爲5x5並再次掃描。如果再次檢測到所有像素(25像素)已損壞,則我會進入7x7窗口。爲了實現,我編寫了一個代碼,但它太大了,因爲我代表了每個窗口中的所有元素。我不確定如何執行它,但我相信會有其他簡單的方法來實現它。在MATLAB中表示可變濾波器大小

的代碼,我的上述目的是寫入

if((S1==1) && (S2==1)) 

     5x5 window===> V=[L(p-2,q-2) L(p-2,q-1) L(p-2,q) L(p-2,q+1) L(p-2,q+2) L(p-1,q-2) L(p-1,q-1) L(p-1,q) L(p-1,q+1) L(p-1,q+2) L(p,q-2) L(p,q-1) L(p,q+1) L(p,q+2) L(p+1,q-2) L(p+1,q-1) L(p+1,q) L(p+1,q+1) L(p+1,q+2) L(p+2,q-2) L(p+2,q-1) L(p+2,q) L(p+2,q+1) L(p+2,q+2)]; % 5x5 window 

     for k=1:24 
      if((V(k) == 0) || (V(k) == 255)) 

      else 
       N(a)=V(k); 
       a=a+1; 
      end 
     end 

     if((a-1)>= 1) 
     Y(p,q)=round(Median(N(1:a-1))); 
     %disp(Y(p,q)); 
     a=1; 
     else 
     7x7 window===> V1=[L(p-3,q-3) L(p-3,q-2) L(p-3,q-1) L(p-3,q) L(p-3,q+1) L(p-3,q+2) L(p-3,q+3) L(p-2,q-3) L(p-2,q-2) L(p-2,q-1) L(p-2,q) L(p-2,q+1) L(p-2,q+2) L(p-2,q+3) L(p-1,q-3) L(p-1,q-2) L(p-1,q-1) L(p-1,q) L(p-1,q+1) L(p-1,q+2) L(p-1,q+3) L(p,q-3) L(p,q-2) L(p,q-1) L(p,q+1) L(p,q+2) L(p,q+3) L(p+1,q-3) L(p+1,q-2) L(p+1,q-1) L(p+1,q) L(p+1,q+1) L(p+1,q+2) L(p+1,q+3) L(p+2,q-3) L(p+2,q-2) L(p+2,q-1) L(p+2,q) L(p+2,q+1) L(p+2,q+2) L(p+2,q+3) L(p+3,q-3) L(p+3,q-2) L(p+3,q-1) L(p+3,q) L(p+3,q+1) L(p+3,q+2) L(p+3,q+3)]; % 7x7 window 

類似地,我使用的窗口高達11×11個。我想要很容易地表示V和V1矢量,而不是寫這麼多的代碼。

+0

@Barnabas Szabolcs請參閱此 – user101509

回答

1

在大小n[p,q]中心的任意窗口可從圖像作爲

halfSize = floor(n/2); %# n has to be odd 
window = image(p-halfSize:p+halfSize,q-halfSize:q+halfSize); 

注意要墊圖像與halfSize的最大值,或可替代地,測試被讀取的是例如p>halfSizep<imageSize-halfSize+1(與q相同),以便您不會收到索引錯誤。

+0

謝謝。我會檢查這一點...我不明白的替代解釋..我是非常新的matlab ..我無法理解 – user101509

+0

@ user101509的想法:我的意思是,你必須確保你的窗口是始終包含在圖像中。所以如果例如'(p,q)'是'(1,1)',那麼你的算法會有問題。 – Jonas