3.图像滤波处理。自选一张图片,完成以下图像处理:①给图像分别添加随机噪声和椒盐噪声;②采用不同的平滑滤波模板进行滤波对比(不同模板、不同尺寸);③采用中值滤波对图像进行滤波对比;④对添加随机噪声的多幅图片取平均。重点对比分析:不同空间域卷积器模板的滤波效果有何不同?空间域卷积器模板的大小的滤波效果有何影响?
图像平滑处理的基本方法:
图像在获取、传输过程中, 受干扰的影响, 会产生噪声. 噪声是一种错误的信号, 干扰正常信号, 造成图像毛糙. 这时就需要对图像进行平滑处理.
图像去噪是一种信号滤波的方法, 目的是保留有用信号, 去除噪音信号.
图像噪声:
噪声干扰一般是随机产生的, 分布不规律, 大小也不规则. 噪声像素的灰度是空间不相关的, 与邻近像素显著不同.

平滑处理的目的:
平滑滤波使图像的低频分量增强, 同时削弱高频分量, 用于消除图像中的随机噪声, 起到平滑作用.
图像增强:
·空间域法: 在原图像上直接对像素的灰度值进行处理. 分为两类, 点运算和局部运算(邻域有关的空间域运算).
·频域法: 在图像的变换域上进行处理, 增强感兴趣的频率分量, 然后进行反变换, 得到增强后的图像.
空间域滤波增强技术:

图像平滑处理技术:
邻域处理方法: 用某一模板对每个像元与其周围邻域的所有像元进行某种数学运算, 得到该像元新的灰度值. 新的灰度值不仅与该像元的灰度值有关, 还与其邻域内像元的灰度值有关.
邻域处理——模板:

平滑处理的基本方法:
·线性平滑: 对于每一个像素的灰度值用它的邻域值代替, 邻域为N×M
, N
取奇数.
·非线性平滑: 改进, 取一个阈值, 当像素值与其邻域平均值之间的差大于阈值时, 以均值代替; 反之取其本身值.
·自适应平滑: 物体边缘在不同的方向上有不同的统计特性, 即不同的均值和方差, 为保留一定的边缘信息, 采用自适应法.

空域卷积滤波: 空域卷积滤波借助模板操作.
模板操作:
模板操作是数字图像处理中常用的一种运算方式. 图像的平滑、锐化以及后面将要讨论的细化、边缘检测等都要用到模板操作.
模板:
· 模板: 所有系数都是正数. 也叫滤波器、掩模、核或窗, 与邻域具有相同维数.
·邻域平均模板所有系数均为1.

· 星号表示为中心元素, 将要处理的元素. 将原图中一个像素的灰度值和相邻近的8个像素值相加, 平均值作为中心值.
卷积运算:
· 领域中的每个像素分别与卷积核中的每一个元素相乘, 求和的结果即为中心像素的新值.
· 卷积核中的元素称作加权系数(卷积系数), 系数的大小及排列顺序, 决定了处理的类型. 改变加权系数与符号, 影响新值.
模板操作:
· 邻域运算: 某个像素点的结果不仅和本像素灰度有关, 而且和其邻域点的值有关.
边界问题的解决:
卷积步骤:
·将模板在图中漫游, 并将模板中心与图中某个像素位置重合;
·将模板上系数与模板下对应像素相乘;
·将所有乘积相加;
·将和赋值给图中对应模板中心位置的像素.
3.1 给数字图像添加Gaussian Noise (高斯噪声)和Salt and Pepper Noise (椒盐噪声)
- %给图像添加高斯噪声和椒盐噪声
- I = imread('Durant.png');
- I_gray = rgb2gray(I);
- %加入Gaussian noise
- I_gray1 = imnoise(I_gray, 'Gaussian', 0, 0.01);
- %加入salt and pepper noise
- %椒盐噪声也称为脉冲噪声, 是图像中常见的一种噪声.
- %它是一种随机出现的白点或者黑点.
- I_gray2 = imnoise(I_gray, 'Salt & Pepper', 0.01);
- %
- subplot(1, 3, 1);
- imshow(I_gray);
- title('原图的灰度图像');
- %
- subplot(1, 3, 2);
- imshow(I_gray1);
- title('加入Gaussian noise');
- %
- subplot(1, 3, 3);
- imshow(I_gray2);
- title('加入Salt & Pepper noise');

3.2 邻域平均法为图像降噪
3.2.1 含Gaussian Noise的图像
- %给图片加入高斯噪声, 然后使用邻域平均法降噪
- I = imread('Durant.png');
- I_gray = rgb2gray(I);
- %加入Gaussian Noise
- I_gray1 = imnoise(I_gray, 'Gaussian', 0, 0.01);
- %模板为3×3, 平滑滤波
- image = filter2(fspecial('average', 3), I_gray1) / 255;
- %
- subplot(1, 3, 1);
- imshow(I_gray);
- title('原图的灰度图像');
- %
- subplot(1, 3, 2);
- imshow(I_gray1);
- title('加入高斯噪声的灰度图像');
- %
- subplot(1, 3, 3);
- imshow(image);
- title('3×3模板平滑滤波后的灰度图像');


3.2.2 含Salt and Pepper Noise的图像
- %给图片加入椒盐噪声, 然后使用邻域平均法降噪
- I = imread('Durant.png');
- I_gray = rgb2gray(I);
- %加入Gaussian Noise
- I_gray1 = imnoise(I_gray, 'Salt & Pepper', 0.01);
- %模板为3×3, 平滑滤波
- image = filter2(fspecial('average', 3), I_gray1) / 255;
- %
- subplot(1, 3, 1);
- imshow(I_gray);
- title('原图的灰度图像');
- %
- subplot(1, 3, 2);
- imshow(I_gray1);
- title('加入高斯噪声的灰度图像');
- %
- subplot(1, 3, 3);
- imshow(image);
- title('3×3模板平滑滤波后的灰度图像');



中值滤波法:
· 邻域平均法: 属于低通滤波的处理方法, 它在抑制噪声的同时使图像变得模糊. 即图像的细节(例如边缘信息)被削弱.
中值滤波的性质:
· 中值滤波器不影响阶跃函数和斜坡函数. 周期小于窗口长度一半的脉冲受到抑制, 另外三角函数的顶部变平.
窗口的选择:
中值滤波主要特性:
3.3 数字图像的中值滤波法
3.3.1 含Salt and Pepper Noise的图像
- %给图片加入椒盐噪声, 然后使用中值滤波法降噪
- I = imread('Durant.png');
- I_gray = rgb2gray(I);
- %加入salt and pepper noise
- I_gray1 = imnoise(I_gray, 'Salt & Pepper', 0.01);
- %中值滤波是一种非线性数字滤波器技术, 用于降噪.
- %medfilter2(image, [n, n]):
- %image: 需要过滤的图像
- %[n, n]: 模板大小为n×n
- %medfilter2为二维中值滤波函数, 使用前须将图像灰度化.
- image = medfilt2(I_gray1, [3, 3]);
- %
- subplot(1, 3, 1);
- imshow(I_gray);
- title('原图的灰度图像');
- %
- subplot(1, 3, 2);
- imshow(I_gray1);
- title('加入椒盐噪声的灰度图像');
- %
- subplot(1, 3, 3);
- imshow(image);
- title('3×3模板中值滤波后的灰度图像');


3.3.2 含Gaussian Noise的图像
- %给图片加入高斯噪声, 然后使用中值滤波法降噪
- I = imread('Durant.png');
- I_gray = rgb2gray(I);
- %加入salt and pepper noise
- I_gray1 = imnoise(I_gray, 'Gaussian', 0, 0.01);
- %中值滤波是一种非线性数字滤波器技术, 用于降噪.
- %medfilter2(image, [n, n]):
- %image: 需要过滤的图像
- %[n, n]: 模板大小为n×n
- %medfilter2为二维中值滤波函数, 使用前须将图像灰度化.
- image = medfilt2(I_gray1, [3, 3]);
- %
- subplot(1, 3, 1);
- imshow(I_gray);
- title('原图的灰度图像');
- %
- subplot(1, 3, 2);
- imshow(I_gray1);
- title('加入高斯噪声的灰度图像');
- %
- subplot(1, 3, 3);
- imshow(image);
- title('3×3模板中值滤波后的灰度图像');



3.4 对多幅含Gaussian Noise的图像取平均(降噪)
3.4.1 5幅图片取平均
- %对多幅添加高斯噪声的图片取平均
- I = imread('Durant.png');
- I_gray = rgb2gray(I);
- %对原图的灰度图像I_gray分别添加5次Gauss噪声.
- %Gaussian noise: EX = 0,
- temp1 = imnoise(I_gray, 'Gaussian', 0, 0.01);
- temp2 = imnoise(I_gray, 'Gaussian', 0, 0.01);
- temp3 = imnoise(I_gray, 'Gaussian', 0, 0.01);
- temp4 = imnoise(I_gray, 'Gaussian', 0, 0.01);
- temp5 = imnoise(I_gray, 'Gaussian', 0, 0.01);
- %先将temp1, ..., temp5矩阵转换为double类型,
- %这样temp1, ..., temp5相加后, 求和结果数值不会失真.
- G = double(temp1) + double(temp2) + double(temp3) + double(temp4) + double(temp5);
- %将矩阵G中的数据除以5, 相当于5幅图片取平均.
- G = G / 5;
- %将矩阵G的元素转换为uint8类型.
- G = uint8(G);
- %显示原图的灰度图像.
- subplot(1, 2, 1);
- imshow(I_gray);
- title('原图的灰度图像');
- %显示取平均后的图片.
- subplot(1, 2, 2);
- imshow(G);
- title('5幅含噪图片取平均');

3.4.2 10幅图片取平均
- %对多幅添加高斯噪声的图片取平均
- I = imread('Durant.png');
- I_gray = rgb2gray(I);
- %获取图片矩阵的行数和列数, 创建一个height×width的零矩阵G.
- [height, width, channels] = size(I_gray);
- G = zeros(height, width);
- %对原图的灰度图像I_gray分别添加5次Gauss噪声.
- for i = 1 : 10
- G = G + double(imnoise(I_gray, 'Gaussian', 0, 0.01));
- end
- %将矩阵G中的数据除以10, 相当于10幅图片取平均.
- G = G / 10;
- %将矩阵G的元素转换为uint8类型.
- G = uint8(G);
- %显示原图的灰度图像.
- subplot(1, 2, 1);
- imshow(I_gray);
- title('原图的灰度图像');
- %显示取平均后的图片.
- subplot(1, 2, 2);
- imshow(G);
- title('10幅含噪图片取平均');
