0

我正在研究一个过滤器,在该过滤器中,我使用基于噪声密度的自适应窗口大小,而不是使用固定大小的过滤窗口。例如,假设窗口大小为 3x3,它有 9 个像素。当所有这 9 个像素都被检测为损坏的像素时,继续下一步是没有用的,因为我需要窗口中的一些嘈杂的自由像素来处理下一步。在这种情况下,我将窗口大小更改为 5x5 并再次扫描。如果再次检测到所有像素(25 像素)已损坏,我会选择 7x7 窗口。为了实现,我编写了一个代码,但它太大了,因为我代表了每个窗口中的所有元素。我不确定是否要实施它,但我相信还有其他简单的方法可以做到这一点。

我为上述目的编写的代码是

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 

同样,我使用了高达 11x11 的窗口。我想轻松地表示 V 和 V1 向量,而不是编写这么多代码。

4

1 回答 1

1

可以从图像中读取以[p,q]大小为中心的任意窗口n

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),这样您就不会出现索引错误。

于 2012-12-15T14:51:25.483 回答