- Matlab图像处理创新实践-实验1【图像滤波基础(1)】
- Matlab图像处理创新实践-实验2【图像滤波基础(2)】
- Matlab图像处理创新实践-实验3【图像锐化】
- Matlab图像处理创新实践-实验4【大实验——GUI综合设计】
- Matlab实验4——GUI程序操作说明
目 录
一、实验目的
二、实验内容
三、实验过程及结果
步骤1、2
步骤3
步骤4
步骤5
步骤6、7
四、分析与思考
附录:代码汇总
参考:
fspecial函数用于创建预定义的滤波算子,其语法格式为:
h = fspecial(type)
h = fspecial(type,parameters,sigma)
参数type制定算子类型,parameters指定相应的参数,具体格式为:
type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。
type= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为 0.5。
type= 'laplacian',为拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为[0,1],默认值为0.2。
type= 'log',为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为[3,3],sigma为滤波器的标准差,单位为像素,默认值为0.5
type= 'prewitt',为prewitt算子,用于边缘增强,无参数。
type= 'sobel',为著名的sobel算子,用于边缘提取,无参数。
通过简单实验完成对一个图像多种滤波操作,熟悉并了解图像处理中空域滤波的概念,通过实际操作掌握滤波器的生成和基本的滤波,以完成基本的图像处理目的。同时,了解几种常见滤波器的功能和作用。
步骤1:用手机给自己拍一张美照(必须是本人照片);
步骤2:将你的照片放到计算机内;
步骤3:启动Matlab,并通过imread(); 读取该照片,然后通过imshow()进行显示。如果图片过大,可以通过imresize(A,m)进行缩小,其中A为图像,m为尺寸变化系数,比如可设为0.2,尺寸为原来的五分之一;
步骤 4:利用rgb2gray()函数将图像转换为灰度图像;
步骤5:利用F = fspecial();生成多个常见滤波器,分别为:①均值滤波器、②高斯滤波器、③拉普拉斯滤波器、④sobel和⑤prewitt滤波器;非必要参数均采用默认值。(详细内容参加后面的参考信息)
步骤6:将这些滤波器通过new_im = filter2(F, im)函数对测试图像进行滤波操作,并观察不同滤波器的滤波结果;filter2的输出结果的数据类型为double,需要进行类型转换才能够作为图像数据显示,可采用uint8()对其进行类型转换,例如:y = uint8(x)
步骤7:利用subplot()函数实现将多个滤波结果图像显示在同一个窗口中;
注意:所有的运行命令需全部形成脚本文件(.m后缀),文件名为姓名的汉语拼音,如zhangsan.m
【在这里描述下你的实验操作过程和相应代码,以及你得到的最终结果,需图文并茂】
步骤1:用手机给自己拍一张美照(必须是本人照片);
步骤2:将你的照片放到计算机内;
步骤3:启动Matlab,并通过imread(); 读取该照片,然后通过imshow()进行显示。如果图片过大,可以通过imresize(A,m)进行缩小,其中A为图像,m为尺寸变化系数,比如可设为0.2,尺寸为原来的五分之一;
步骤 4:利用rgb2gray()函数将图像转换为灰度图像;
步骤5:利用F = fspecial();生成多个常见滤波器,分别为:①均值滤波器、②高斯滤波器、③拉普拉斯滤波器、④sobel和⑤prewitt滤波器;非必要参数均采用默认值。(详细内容参加后面的参考信息)
步骤6:将这些滤波器通过new_im = filter2(F, im)函数对测试图像进行滤波操作,并观察不同滤波器的滤波结果;filter2的输出结果的数据类型为double,需要进行类型转换才能够作为图像数据显示,可采用uint8()对其进行类型转换,例如:y = uint8(x)
步骤7:利用subplot()函数实现将多个滤波结果图像显示在同一个窗口中。
【在此描述下你从该实验中得出的结论,并对实验结果进行分析,例如:filter2和imfilter区别,解释下各个滤波器的功能等等,可以查阅资料,该部分占最终成绩的50%】
图像增强是为了改善图像的视觉效果,突出图像中有用的部分(即感兴趣的部分)。图像去噪目的是将退化图像原有信息进行恢复,使之更贴近实际。
filter2和imfilter区别:imfilter 可进行多bai维图像(RGB等)进行空间滤波,且可选参数比较多;filter2 只能对二维图像(灰度图)进行空间滤波。两个函数结果类dao型不一样,只需要在I1=filter2(h,I)后面加上I1=uint8(I1)进行类型转换,结果就是一样的。
Matlab采用fspecial函数生成滤波模板,并用filter2函数指定模板对图像进行滤波。fspecial的常用语法格式为:h = fspecial(type)、h = fspecial(type, parameters)。其中,type用于指定滤波器类型;parameters则是与滤波器有关的具体函数。
图表 1 fspecial函数的滤波器模板定义
type
parameters
说明
average
hsize
矩形均值滤波器。hsize为两元素向量,用于指定矩形的大小。当为正方形区域时,hsize也可用标量表示。
disk
radius
生成半径为radius的圆形滤波器。
gaussian
hsize,sigma
标准偏差为sigma、大小为hsize的高斯低通滤波器。
laplacian
alpha
系数为alpha的二维拉普拉斯操作。
log
hsize,sigma
标准偏差为sigma、大小为hsize的高斯滤波旋转对称拉普拉斯算子。
motion
len,theta
按角度theta移动len个像素的运动滤波器。
prewitt
无
近似计算梯度算子。
sobel
无
考虑了像素点空间位置的近似计算梯度算子。
%--------步骤3--------
x = imread('peppers.png'); % 读取图片:将图像数据读取到Matlab环境中 peppers.png:Matlab内置图片
imshow(x); % 显示图片
% 警告: Image is too big to fit on screen; displaying at 8%
% > In imuitools\private\initSize at 71
% In imshow at 282
%--------步骤3--------
smallx = imresize(x, 0.5); % 缩小图片
figure, imshow(smallx); % figure:生成新的图片窗口,不覆盖原窗口
% --------步骤4--------
x = imread('peppers.png'); % 读取图片:将图像数据读取到Matlab环境中
smallx = imresize(x, 0.5);
imshow(smallx);
gx = rgb2gray(smallx);
f1 = fspecial('average', 5);
gx1 = filter2(f1, gx);
figure, imshow(uint8(gx1));
% --------步骤5--------
x = imread('peppers.png'); % 读取图片:将图像数据读取到Matlab环境中
smallx = imresize(x, 0.5);
imshow(smallx);
gx = rgb2gray(smallx);
f1 = fspecial('average', 5); % 1、均值滤波器
f2 = fspecial('gaussian'); % 2、高斯滤波器
f3 = fspecial('laplacian'); % 3、拉普拉斯滤波器
f4 = fspecial('sobel'); % 4、sobel滤波器
f5 = fspecial('prewitt'); % 5、prewitt滤波器
gx1 = filter2(f1, gx);
gx2 = filter2(f2, gx);
gx3 = filter2(f3, gx);
gx4 = filter2(f4, gx);
gx5 = filter2(f5, gx);
subplot(2, 3, 1);imshow(smallx);title('缩小至原来的0.5倍');
subplot(2, 3, 2);imshow(uint8(gx1));title('1、均值滤波器');
subplot(2, 3, 3);imshow(uint8(gx2));title('2、高斯滤波器');
subplot(2, 3, 4);imshow(uint8(gx3));title('3、拉普拉斯滤波器');
subplot(2, 3, 5);imshow(uint8(gx4));title('4、sobel滤波器');
subplot(2, 3, 6);imshow(uint8(gx5));title('5、prewitt滤波器');
%--------步骤6、7--------
x = imread('peppers.png'); % 读取图片:将图像数据读取到Matlab环境中
smallx = imresize(x, 0.05);
imshow(smallx);
gx = rgb2gray(smallx);
f1 = fspecial('average', 5); % 1、均值滤波器
gx1 = filter2(f1, gx);
gx1_1 = filter2(f1, gx1);
f2 = fspecial('gaussian'); % 2、高斯滤波器
gx2 = filter2(f2, gx);
gx2_1 = filter2(f2, gx2);
f3 = fspecial('laplacian'); % 3、拉普拉斯滤波器
gx3 = filter2(f3, gx);
gx3_1 = filter2(f3, gx3);
f4 = fspecial('sobel'); % 4、sobel滤波器
gx4 = filter2(f4, gx);
gx4_1 = filter2(f4, gx4);
f5 = fspecial('prewitt'); % 5、prewitt滤波器
gx5 = filter2(f5, gx);
gx5_1 = filter2(f5, gx5);
f6 = fspecial('disk'); % 6、disk滤波器
gx6 = filter2(f6, gx);
gx6_1 = filter2(f6, gx6);
f7 = fspecial('log'); % 7、log滤波器
gx7 = filter2(f7, gx);
gx7_1 = filter2(f7, gx7);
f8 = fspecial('motion'); % 8、motion滤波器
gx8 = filter2(f8, gx);
gx8_1 = filter2(f8, gx8);
subplot(3, 3, 1);imshow(smallx);title('缩小至原来的0.05倍');
subplot(3, 3, 2);imshow(uint8(gx1_1));title('1、均值滤波器');
subplot(3, 3, 3);imshow(uint8(gx2_1));title('2、高斯滤波器');
subplot(3, 3, 4);imshow(uint8(gx3_1));title('3、拉普拉斯滤波器');
subplot(3, 3, 5);imshow(uint8(gx4_1));title('4、sobel滤波器');
subplot(3, 3, 6);imshow(uint8(gx5_1));title('5、prewitt滤波器');
subplot(3, 3, 7);imshow(uint8(gx6_1));title('6、disk滤波器');
subplot(3, 3, 8);imshow(uint8(gx7_1));title('7、log滤波器');
subplot(3, 3, 9);imshow(uint8(gx8_1));title('8、motion滤波器');
多谢观看、