空域图像增强-图像滤波处理

3.图像滤波处理。自选一张图片,完成以下图像处理:①给图像分别添加随机噪声和椒盐噪声;②采用不同的平滑滤波模板进行滤波对比(不同模板、不同尺寸);③采用中值滤波对图像进行滤波对比;④对添加随机噪声的多幅图片取平均。重点对比分析:不同空间域卷积器模板的滤波效果有何不同?空间域卷积器模板的大小的滤波效果有何影响?

图像平滑处理的基本方法:

图像在获取、传输过程中, 受干扰的影响, 会产生噪声. 噪声是一种错误的信号, 干扰正常信号, 造成图像毛糙. 这时就需要对图像进行平滑处理.

图像去噪是一种信号滤波的方法, 目的是保留有用信号, 去除噪音信号.

图像噪声:

噪声干扰一般是随机产生的, 分布不规律, 大小也不规则. 噪声像素的灰度是空间不相关的, 与邻近像素显著不同.

空域图像增强-图像滤波处理_第1张图片

平滑处理的目的:

  1. 模糊: 在提取较大目标前, 先去除太小的细节, 或将目标内的小间断连接起来.
  2. 消除噪声: 改善图像质量, 降低干扰.

   平滑滤波使图像的低频分量增强, 同时削弱高频分量, 用于消除图像中的随机噪声, 起到平滑作用.

图像增强:

·空间域法: 在原图像上直接对像素的灰度值进行处理. 分为两类, 点运算局部运算(邻域有关的空间域运算).

·频域法: 在图像的变换域上进行处理, 增强感兴趣的频率分量, 然后进行反变换, 得到增强后的图像.

空间域滤波增强技术:

空域图像增强-图像滤波处理_第2张图片

图像平滑处理技术:

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

邻域处理——模板:

空域图像增强-图像滤波处理_第3张图片

平滑处理的基本方法:

·线性平滑: 对于每一个像素的灰度值用它的邻域值代替, 邻域为N×M, N取奇数.

·非线性平滑: 改进, 取一个阈值, 当像素值与其邻域平均值之间的差大于阈值时, 以均值代替; 反之取其本身值.

·自适应平滑: 物体边缘在不同的方向上有不同的统计特性, 即不同的均值和方差, 为保留一定的边缘信息, 采用自适应法.

空域图像增强-图像滤波处理_第4张图片

空域卷积滤波: 空域卷积滤波借助模板操作.

模板操作:

    模板操作是数字图像处理中常用的一种运算方式. 图像的平滑、锐化以及后面将要讨论的细化、边缘检测等都要用到模板操作.

模板:

· 模板: 所有系数都是正数. 也叫滤波器、掩模、核或窗, 与邻域具有相同维数.

·邻域平均模板所有系数均为1.

空域图像增强-图像滤波处理_第5张图片

· 星号表示为中心元素, 将要处理的元素. 将原图中一个像素的灰度值和相邻近的8个像素值相加, 平均值作为中心值.

卷积运算:

  • 卷积就是做加权求和的过程. 卷积核就是模板, 大小与邻域相同.

· 领域中的每个像素分别与卷积核中的每一个元素相乘, 求和的结果即为中心像素的新值.

· 卷积核中的元素称作加权系数(卷积系数), 系数的大小及排列顺序, 决定了处理的类型. 改变加权系数与符号, 影响新值.

模板操作:

· 邻域运算: 某个像素点的结果不仅和本像素灰度有关, 而且和其邻域点的值有关.

  • 模板运算的数学含义是卷积运算.
  • 卷积是一种用途很广泛的算法, 可用卷积来完成各种处理变换.

边界问题的解决:

  • 忽略图像边界数据, 多采用该方法.
  • 在图像四周复制原图像边界像素的值, 从而使卷积核悬挂在图像四周时可以进行正常的运算.
  • 计算出来的像素值超出范围问题, 对此可简单地将其值置为0或255.

卷积步骤:

·将模板在图中漫游, 并将模板中心与图中某个像素位置重合;

·将模板上系数与模板下对应像素相乘;

·将所有乘积相加;

·将和赋值给图中对应模板中心位置的像素.

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');

空域图像增强-图像滤波处理_第6张图片

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模板平滑滤波后的灰度图像');

空域图像增强-图像滤波处理_第7张图片 

空域图像增强-图像滤波处理_第8张图片

空域图像增强-图像滤波处理_第9张图片

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模板平滑滤波后的灰度图像');

空域图像增强-图像滤波处理_第10张图片

空域图像增强-图像滤波处理_第11张图片

空域图像增强-图像滤波处理_第12张图片

中值滤波法: 

· 邻域平均法: 属于低通滤波的处理方法, 它在抑制噪声的同时使图像变得模糊. 即图像的细节(例如边缘信息)被削弱.

  • 中值滤波: 抑制噪声又要保持细节. 将窗口中奇数个数据按大小顺序排列, 处于中心位置的那个数作为处理结果. 中值滤波法是一种非线性信号处理方法, 1971年提出并应用在一维信号分析中, 被图像信号处理引用. 在一定条件下, 克服线性滤波器(如邻域平滑滤波等)的模糊, 对滤除脉冲干扰及图像扫描噪声最为有效. 不需要统计特性, 使用方便. 但是对一些细节多, 特别是点、线、尖顶细节多的图像不宜采用中值滤波法.
  • 中值滤波就是用一个奇数点的移动窗口, 将窗口中心点的值用窗口内各点的中值代替. 假设窗口内共有5点, 其值分别为200、80、90、110和120, 那么此窗口内各点的中值即为110. 平均滤波为120.

中值滤波的性质:

· 中值滤波器不影响阶跃函数斜坡函数. 周期小于窗口长度一半脉冲受到抑制, 另外三角函数的顶部变平.

  • 二维中值滤波的窗口形状和尺寸对滤波效果影响较大, 不同的图像内容和不同的应用要求, 往往采用不同的窗口形状和尺寸. 窗口尺寸: 先用3×3, 再用5×5, 窗口尺寸不断增大, 直到满意为止.

窗口的选择:

  • 窗口: 线状、方形、圆形、十字形及圆环等.
  • 方形或圆形窗口: 缓变的较长轮廓线物体为宜.
  • 十字形窗口: 含有尖顶物体适用, 窗口大小则以不超过图中最小有效物体的尺寸为宜.
  • 不宜采用中值滤波的情况: 图像中点、线、尖角细节较多.

中值滤波主要特性:

  • 输入不变性: 在窗口内单调增加或单调减少的序列、一些周期性的序列, 中值滤波存在不变性, 输出信号仍保持输入信号不变.
  • 对大的边缘高度, 中值滤波较邻域均值好; 对于较小边缘高度, 两种滤波差别很小.
  • 是非线性的.
  • 在抑制图像随机脉冲噪声方面有效, 运算速度快, 便于实时处理.
  • 去除孤立线或点干扰, 保留空间清晰度较平滑滤波好, 但对高斯噪声则不如平滑滤波.

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模板中值滤波后的灰度图像');

空域图像增强-图像滤波处理_第13张图片

空域图像增强-图像滤波处理_第14张图片

空域图像增强-图像滤波处理_第15张图片 

 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模板中值滤波后的灰度图像');

空域图像增强-图像滤波处理_第16张图片

空域图像增强-图像滤波处理_第17张图片

空域图像增强-图像滤波处理_第18张图片

 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幅含噪图片取平均');

空域图像增强-图像滤波处理_第19张图片

 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幅含噪图片取平均');

空域图像增强-图像滤波处理_第20张图片

 

你可能感兴趣的:(数字图像处理(MATLAB),计算机视觉,图像处理,人工智能)