实验报告
课程名:图像处理创新实验
内容:图像滤波基础2-滤波器创建与分析
学生姓名
专业班级
学 号
指导教师 常化文
实验日期 2022年 10月 25日
一、实验目的
通过简单实验完成对一个图像多种滤波操作,熟悉并了解图像处理中空域滤波的概念,通过实际操作掌握滤波器的生成和基本的滤波,以完成基本的图像处理目的。同时,了解几种常见滤波器的功能和作用。
二、实验内容
步骤1:用手机给自己拍一张美照(必须是本人照片);
步骤2:将你的照片放到计算机内;
步骤3:启动Matlab,并通过imread(),读取该照片,然后通过imshow()进行显示。如果图片过大,需要适当缩小(长和宽均在1000像素以内为佳),可以通过imresize(A,m)进行缩小,其中A为图像,m为尺寸变化系数,比如可设为0.2,尺寸为原来的五分之一,例如:im = imresize(im, 0.2);
步骤 4:利用rgb2gray()函数将图像转换为灰度图像;
步骤5:利用F = fspecial();生成多个常见滤波器,分别为:均值滤波器、高斯滤波器、拉普拉斯滤波器、LOG滤波器、sobel和prewitt滤波器;
步骤6:将这些滤波器通过new_im = filter2(F, im)函数对测试图像进行滤波操作,并观察不同滤波器的滤波结果(注意参数顺序不要写错);
步骤7:利用subplot()函数实现将多个滤波结果图像显示在同一个窗口中;
三、实验过程及结果
1. 在MATLAB中通过imread()读取该照片,然后通过imshow()进行显示。通过imresize(A,m)对图片进行适当缩小;
x = imread('jean.jpg'); % 读取图片
imshow(x); % 显示图片
smallx = imresize(x, 0.5); % 缩小图片
figure, imshow(smallx); % figure:生成新的图片窗口,不覆盖原窗口
2. 利用rgb2gray()函数将图像转换为灰度图像;
x = imread('jean.jpg'); % 读取图片
smallx = imresize(x, 0.5); % 缩小图片
imshow(smallx);
gx = rgb2gray(smallx); % 转换为灰度图像
f1 = fspecial('average', 5); % 生成均值滤波器
gx1 = filter2(f1, gx); % 二位数字滤波器
figure, imshow(uint8(gx1)); % 强制转换为uint8(0-255)
3. 利用fspecial()函数生成多个常见滤波器,分别为:均值滤波器、高斯滤波器、拉普拉斯滤波器、LOG滤波器、sobel和prewitt滤波器;并用subplot()函数实现将多个滤波结果图像显示在同一个窗口中;
x = imread('jean.jpg'); % 读取图片
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滤波器');
4. 将这些滤波器通过new_im = filter2(F, im)函数对测试图像进行滤波操作,并观察不同滤波器的滤波结果;并用subplot()函数实现将多个滤波结果图像显示在同一个窗口中;
x = imread('jean.jpg'); % 读取图片
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滤波器');
四、分析与思考
通过该实验我完成对一个图像多种滤波操作,熟悉并了解了图像处理中滤波器的生成和基本的滤波。
了解了matlab中的滤波函数,imfilter函数:对任意类型数组或多维图像进行滤波;filter2:相关滤波函数;conv2:卷积滤波函数。
同时,还了解了几种常见滤波器的功能和作用:
均值滤波器:可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能;
高斯滤波器:高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程;
拉普拉斯滤波器:它的应用可增强图像中灰度突变的区域,减弱灰度的缓慢变化区域;
LOG滤波器:为了防止拉普拉斯滤波器计算二次微分时使图像的噪声更加明显,所以先使用高斯滤波器使图像更加平滑,再使用拉普拉斯滤波器使图像的轮廓更加清晰;
sobel滤波器:sobel滤波器常用来提取灰度图像的水平边缘(水平特征)和竖直边缘(竖直特征);
prewitt滤波器:Prewitt是一种常用的检测图像边缘的滤波器,它分为横向和纵向算子,分别用于检测纵向和横向的边缘。
参考:
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算子,用于边缘提取,无参数
推荐阅读
发表评论