实验报告

课程名:图像处理创新实验

内容:图像滤波基础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算子,用于边缘提取,无参数

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: