我需要帮助调试if语句下的中值函数。我收到输入错误。此外,如果有一种更简单的方法来编写中值函数,我们将非常感激。我正在编写此代码来清理项目的上述图像。谢谢。另外,我对MATLAB很新。
``清楚 CLC 格式紧凑
filenameIN = uigetfile('.bmp','Picture');
noisyRGBarray = imread(filenameIN);
%figure(1)
%imshow(noisyRGBarray)
y = noisyRGBarray;
[m,n]=size(y)
cleanRGBarray = y;
for i = 2:m-1
for j = 2:n-1
if y(i,j) == 0 | y(i,j) == 255 % clean add new
cleanRGBarray(i,j) = median( ( y ( (i-1),(j-1) ) ) , ( y ( (i-1),(j) ) ) , ( y ( (i-1),(j+1) ) ) ; ( y ( (i),(j-1) ) ), ( y ( (i),(j) ) ) ; ( y ( (i),(j+1) ) ) ; ( y ( (i+1),(j-1) ) ), ( y ( (i+1),(j) ) ), ( y ( (i+1),(j+1) ) ) ) ;
end
end
end
答案 0 :(得分:1)
matlab有一个内置的中位数过滤器medfilt2
你也可以试试ordfilt2
答案 1 :(得分:1)
你自己也很努力!重新制定最内层循环的最简单方法是
block = y((-1:1)+i, (-1:1)+j);
cleanRGBarray(i,j) = median(block(:));
有几点需要注意:
median
创建参数向量,但未用[]
block
变量最终为3x3)block(:)
的列向量9x1
输入median
- 如果您给它一个N维矩阵,它将仅在第一个非单一维度上运行(所以给出它是3x3并返回1x3中位数)blockproc
之类的内容 - 但您需要使用图像处理工具箱。我希望这有点帮助。