当前位置:文档之家› 数字图像处理_平均滤波与中值滤波(含MATLAB代码)

数字图像处理_平均滤波与中值滤波(含MATLAB代码)

数字图像处理实验二
15生医
一、实验内容
产生教材104页题图4.18(右图)所示的二值图像(白为1,黑为0),编程实现习题4.18所要求的处理(3x3的平均滤波和中值滤波)功能(图像四周边界不考虑,处理结果按四舍五入仍取0或1),显示处理前后的图像,比较其异同。

二、运行环境
MATLAB R2014a
三、运行结果及分析
1. 四种不同的窗的3x3平均滤波 ①在
MATLAB 图形窗界面进行放大可以看出四者之间的差别:
4领域与8邻域之间没有明显差别,但是加权与未加权之间的差别较为明显,体现在:
加权后每个矩形块的四个尖角部分都被保留了下来4邻域平均滤波后图
像8邻域平均滤波后图像
4邻域加权平均滤波后图像8邻域加权平均滤波后图像
(图像四周边界不考虑),而未加权的尖角处黑色变为白色。

②原因分析:
加权后尖角处原来白色的点(1)进行计算3/5=0.6四舍五入后值为1,保持白色,原来黑色的点(0)进行计算2/5=0.4四舍五入后值为0,保持黑色;而未加权尖角处无论原来是黑色还是白色,进行计算
2/4=0.5四舍五入后值为1,所以原先的黑色(0)也变成了白色(1)。

③下图为放大后的截图:
2.中值滤波与原图像的对比
①在
MATLAB图形窗界面进行放大后可观察出:
使用3x3
方形中值滤波模板的效果与4领域、8领域加权平均滤波的
效果相同,每个矩形块的四个尖角部分都被保留了下来(图像四周边界不考虑)。

②原因分析:
套用3x3方形中值滤波模板后,尖角处原来白色的点(1)在窗内1多于0,取中值后仍保持白色,原来黑色的点(0)在窗内0多于1,取中值后仍保持白色。

③下图为放大后的截图:
原图像中值滤波后图像
四、心得体会
通过MATLAB编程更加理解了课后题的计算结果,直观地看出了黑白像素点灰度值变化前后的取值异同。

同时,对MATLAB实现像素点灰度值的替换机理也有所掌握,比如后边附的程序中会提到的“%”标注的思考。

五、具体程序
% 生成黑白块图像
unit=zeros(64,64);
f=zeros(256,256);
for i=1:1:32
for j=1:1:32
unit(i,j)=1; % 1/4白块
end
end
for i=33:1:64
for j=33:1:64
unit(i,j)=1; % 1/4白块
end
end
for i=1:64:256
for j=1:64:256
f(i:i+63,j:j+63)=unit;
end
end
% 对原图像进行3x3平均滤波
for i=2:1:255
for j=2:1:255
fave4(i,j)=(f(i-1,j)+f(i+1,j)+f(i,j-1)+f(i,j+1))/4;
fave8(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j+1)+f(i+1,j-1)+f(i+1,j)+f(i+1,j+1))/8;
fave4_weighted(i,j)=(f(i-1,j)+f(i+1,j)+f(i,j-1)+f(i,j+1)+f(i,j))/5;
fave8_weighted(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j+1) +f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)+f(i,j))/9;
end
end
fave4=round(fave4); % 平均后灰度值有可能是小数,要取整
fave8=round(fave8);
fave4_weighted =round(fave4_weighted);
fave8_weighted =round(fave8_weighted);
subplot(2,2,1);
imshow(fave4);
title('4邻域平均滤波后图像');
subplot(2,2,2);
imshow(fave8);
title('8邻域平均滤波后图像')
subplot(2,2,3);
imshow(fave4_weighted);
title('4邻域加权平均滤波后图像')
subplot(2,2,4);
imshow(fave8_weighted);
title('8邻域加权平均滤波后图像')
% 对原图像进行3
x3方形中值滤波
for i=2:1:255
for j=2:1:255
a=[f(i-1,j-1),f(i-1,j),f(i-1,j+1),f(i,j-1),f(i,j),f(i,j+1),f(i+1,j-1),f(i+1,j),f(i+1,j+1)];
b=sort(a); % 排序函数
fmid(i,j)=b(5); % 9个数排序的中值
end
end
subplot(1,2,1);
imshow(f);
title('原
图像');
subplot(1,2,2);
imshow(fmid);
title('中值滤波后图像')
4邻域平均滤波后图像8邻域平均滤波后图像
4邻域加权平均滤波后图像8邻域加权平均滤波后图像
原图像中值滤波后图像。

相关主题