我正在研究一种过滤器,其中使用基于噪声密度的自适应窗口大小而不是使用固定大小的过滤窗口。例如,假设窗口大小为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矢量而不是编写这么多代码。
答案 0 :(得分: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>halfSize
和p<imageSize-halfSize+1
(q
相同),这样您就不会出现索引错误。