function imOut = medianFilter(imIn,windowWidth)
if mod(windowWidth, 2 ) == 0
disp('Window has even size');
return
end
imageSize = size(imIn);
imOut = imIn;
windowBreadth = (windowWidth - 1)/2;
for m=windowBreadth+1:imageSize(1) - windowBreadth
for n=windowBreadth+1:imageSize(2) - windowBreadth
t1 = imIn(m-windowBreadth:m+windowBreadth,n-windowBreadth:n+windowBreadth);
t2 = reshape(t1,windowWidth*windowWidth,1);
t3 = median(t2);
imOut(m,n) = t3;
end
end
我的解释:
函数medianFilter将图像(imIn)作为输入,以及中值滤波器窗口的宽度
然后我不确定为什么我们需要if语句
之后我们取输入图像的大小并将其保存在名为imageSize
的变量中然后我们将imIn的所有值复制到imOut
然后我全都失去了
什么是windowbreadth?而且宽度和宽度不一样吗?谢谢!
答案 0 :(得分:2)
if
条件检查窗口大小是奇数;如果它甚至没有“中心”像素。
windowbreadth
似乎是一个坏名字。但其含义应从下图中清楚:
|<--B-->|
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
| | | * | | |
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+
|<--------S-------->|
其中S
是窗口大小,B
是窗口 - “宽度”,*
表示“中心”像素。
所以t1
是当前窗口中的所有样本。 t2
是重新排列为一维向量而不是二维数组的样本。