如何改变一个3 * 3中值滤波5 x5 ?

59视图(30天)
马太福音工作者
马太福音工作者 2021年10月4日
评论道: 为副总经理 2023年4月27日在6:37
我的代码能够工作,但我不需要一个5 x5过滤器3 x3。我试图改变代码5 x5但越来越错误
% % 2。中值滤波器
%读取图像
sad1 = imread (“sadimg.bmp”);
图中,imshow (sad1)
标题(图像与噪声的);
%垫与零矩阵
median_filt = 0(大小(sad1) + 2);
re_sad1 = 0(大小(sad1));
%复制原始图像矩阵的矩阵
x = 1:尺寸(sad1, 1)
y = 1:尺寸(sad1, 2)
median_filt (x + 1, + 1) = sad1 (x, y);
结束
结束
%让窗口是一个数组
% 3 x3的邻居的值存储在数组中
%,找到中间的元素进行排序
i = 1:尺寸(median_filt, 1) 2
j = 1:尺寸(median_filt, 2) 2
窗口= 0 (9,1);
公司= 1;
x = 1:3
y = 1:3
窗口(公司)= median_filt (i + x - 1, j + y-1);
公司=公司+ 1;
结束
结束
地中海=排序(窗口);
%的地方元素中值输出矩阵
地中海re_sad1 (i, j) = (5);
结束
结束
%输出矩阵转换为0 - 255的范围内图像类型
re_sad1 = uint8 (re_sad1);
标题(中值滤波后图像的);
图中,imshow (re_sad1)
这是我尝试但我得到的错误:“ndex超过数组元素的数量(25)”。
% % 2。中值滤波器
%读取图像
sad1 = imread (“sadimg.bmp”);
%垫与零矩阵
median_filt = 0(大小(sad1) + 2);
re_sad1 = 0(大小(sad1));
%复制原始图像矩阵的矩阵
x = 1:尺寸(sad1, 1)
y = 1:尺寸(sad1, 2)
median_filt (x + 1, + 1) = sad1 (x, y);
结束
结束
%让窗口是一个数组
% 5-by-5邻居值存储在数组中
%,找到中间的元素进行排序
i = 1:尺寸(median_filt, 1) 3
j = 1:尺寸(median_filt, 2) 3
窗口= 0(25日1);
公司= 1;
x = 1:5
y = 1:5
窗口(公司)= median_filt (i + x - 1, j + y-1);
公司=公司+ 1;
结束
结束
地中海=排序(窗口);
%的地方元素中值输出矩阵
地中海re_sad1 (i, j) = (175);
结束
结束
%输出矩阵转换为0 - 255的范围内图像类型
re_sad1 = uint8 (re_sad1);
次要情节(2,1,1);
imshow (sad1)
标题(图像与噪声的);
次要情节(2,1,2);
imshow (re_sad1)
标题(中值滤波后图像的);
3评论
为副总经理
为副总经理 2023年4月27日在6:37
当地的中值滤波器,在3 x3工作窗口在一个二维数组。

登录置评。

答案(1)

为副总经理
为副总经理 2021年10月4日
编辑:为副总经理 2021年10月4日
开始通过简化:
% 2。中值滤波器
%读取图像
inpict = imread (“sadimg.bmp”);
% imshow (inpict)
%的标题(“图像与噪声”);
%让事情参数,而不是硬编码的一切
filtersize = 5 [5];%或无论大小
%垫与零矩阵
padsize =地板(filtersize / 2);
paddedimage = padarray (inpict padsize 0,“两个”);
s0 =大小(inpict);
outpict = 0 (s0、类(inpict));
操作系统= filtersize-1;
m = 1: s0 (1)
n = 1: s0 (2)
%的地方元素中值输出矩阵
示例= paddedimage (m: (m + os (1)), n: (n + os (2)));
outpict (m, n) =值(样本(:));%值()怎么了?
结束
结束
%测试对现有工具的输出
referenceimage = medfilt2 (inpict filtersize);
immse (outpict referenceimage)%显示这个过滤器的行为一样medfilt2 ()
标题(中值滤波后图像的);
imshow (outpict)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的