数字图像处理--(04)数字图像增强之图像平滑与锐化(MATLAB)

一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像边缘信息也主要集中在其高频部分。这将导致原始图像在平滑处理之后,图像边缘和图像轮廓模糊的情况出现(平滑可以认为是去除噪声,这样也就模糊了图像的边缘信息)。为了减少这类不利效果的影响,就需要利用图像锐化技术,使图像的边缘变得清晰。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变得清晰。微分运算是求信号的变化率,由傅立叶变换的微分性质可知,微分运算具有较强高频分量作用。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。但要注意能够进行锐化处理的图像必须有较高的性噪比,否则锐化后图像性噪比反而更低,从而使得噪声增加的比信号还要多,因此一般是先去除或减轻噪声后再进行锐化处理。

模板运算

模板( ( 也称 样板 或 窗) ) 是实现空域滤波的基本工具。
模板运算的基本思路 :将赋予某个像素的值作为它本身灰度值和其相邻像素灰度值的函数。

模板卷积在空域实现的 主要步骤 如下:

  1. 将模板在图中漫游,并将模板中心与图中某个像素位置重合;
  2. 将模板上的各个系数与模板下各对应像素的灰度值相乘;
  3. 将所有乘积相加(为保持灰度范围,常将结果再除以模板的系数个数)
  4. 将上述运算结果(模板的输出响应)赋给图中对应模板 中心位置的像素

空域滤波增强的目的

主要是平滑图像或锐化图像,所以空域滤波器可分为 平滑滤波器 和锐化滤波器 两类

滤波器分类

  1. 平滑滤波器:模糊,消除噪声能减弱或消除图像中的高频率分量,但不影响低频率分量。 高频对应图像中的区域边缘等灰度值具有较大较快变化的部分,平滑滤波器将这些分量滤去可减少局部灰度的起伏,使图像变得比较平滑
  2. 锐化滤波器:增强被模糊的细节减弱或消除图像中的低频率分量,但不影响高频率分量。 低频分量对应图像中灰度值缓慢变化的区域,锐化滤波器将这些分量滤去,可使图像反差增加,边缘明显

部分使用的函数说明

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算子,用于边缘提取,无参数。
type= ‘unsharp’,为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2。

imfilter函数

函数名称:imfilter
函数语法:g=imfilter(f,w,filtering_mode,boundary_options,size_optinos)
函数功能:对任意类型数组或多维图像进行滤波
参数介绍:f是输入图像,w为滤波模板,g为滤波结果;表1-1总结了其他参数的含义。
在这里插入图片描述

例子

G=fspecial(‘gaussian’,5)%参数为5,表示产生55的gaussian矩阵,如果没有,默认为33的矩阵。

G =
 
    0.0000    0.0000    0.0002    0.0000    0.0000
    0.0000    0.0113    0.0837    0.0113    0.0000
    0.0002    0.0837    0.6187    0.0837    0.0002
    0.0000    0.0113    0.0837    0.0113    0.0000
    0.0000    0.0000    0.0002    0.0000    0.0000

平滑

与锐化相反,就是滤掉高频分量,从而达到减少图象噪声,使图片变得有些模糊。因此又称为低通滤波。
介于之前做过相关的文章这里就不展开说明了
使用均值滤波和中值滤波来验证线型的和非线性不同模板大小的滤波效果

均值滤波和和中值滤波的对比

均值滤波和和中值滤波都可以起到平滑图像,虑去噪声的功能。均值滤波采用线性的方法,平均整个窗口范围内的像素值,均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。均值滤波对高斯噪声表现较好,对椒盐噪声表现较差。中值滤波采用非线性的方法,它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘,选择适当的点来替代污染点的值,所以处理效果好,对椒盐噪声表现较好,对高斯噪声表现较差。

彩色图像

clc;clear all;close all;
M=imread('../img1.jpg'); %读取图像
[ROW,COL, DIM] = size(M);%保存图像尺寸
subplot(3,3,1),imshow(M),title('原始图像');%显示原始图像
P1=imnoise(M,'gaussian',0.05); %加入高斯躁声
subplot(3,3,2),imshow(P1),title('加入高斯躁声 0.05');%加入高斯躁声后显示图像
P2=imnoise(M,'gaussian',0.5); %加入高斯躁声
subplot(3,3,3),imshow(P2),title('加入高斯躁声 0.5');%加入高斯躁声后显示图像
gauss_img1(:,:,1)=medfilt2(P1(:,:,1)); %对高斯躁声中值滤波
gauss_img1(:,:,2)=medfilt2(P1(:,:,2)); %对高斯躁声中值滤波
gauss_img1(:,:,3)=medfilt2(P1(:,:,3)); %对高斯躁声中值滤波
subplot(3,3,4),imshow(gauss_img1),title('3X3高斯躁声中值滤波 0.05');
gauss_img2(:,:,1)=medfilt2(P2(:,:,1)); %对高斯躁声中值滤波
gauss_img2(:,:,2)=medfilt2(P2(:,:,2)); %对高斯躁声中值滤波
gauss_img2(:,:,3)=medfilt2(P2(:,:,3)); %对高斯躁声中值滤波
subplot(3,3,5),imshow(gauss_img2),title('3X3高斯躁声中值滤波 0.5');
gauss_img3(:,:,1)=medfilt2(P2(:,:,1),[5 5]); %对高斯躁声中值滤波
gauss_img3(:,:,2)=medfilt2(P2(:,:,2),[5 5]); %对高斯躁声中值滤波
gauss_img3(:,:,3)=medfilt2(P2(:,:,3),[5 5]); %对高斯躁声中值滤波
subplot(3,3,6),imshow(gauss_img3),title('5X5高斯躁声中值滤波 0.5');
A=fspecial('average',3); %生成系统预定义的3X3滤波器
mean_filter_img1(:,:,1)=filter2(A,P1(:,:,1))/255.;     
mean_filter_img1(:,:,2)=filter2(A,P1(:,:,2))/255.; 
mean_filter_img1(:,:,3)=filter2(A,P1(:,:,3))/255.; 
subplot(3,3,7),imshow(mean_filter_img1),title('3X3高斯躁声均值滤波 0.05');
mean_filter_img2(:,:,1)=filter2(A,P2(:,:,1))/255.;     
mean_filter_img2(:,:,2)=filter2(A,P2(:,:,2))/255.; 
mean_filter_img2(:,:,3)=filter2(A,P2(:,:,3))/255.; 
subplot(3,3,8),imshow(mean_filter_img2),title('3X3高斯躁声均值滤波 0.5');
A=fspecial('average',5); %生成系统预定义的5X5滤波器
mean_filter_img3(:,:,1)=filter2(A,P2(:,:,1))/255.;     
mean_filter_img3(:,:,2)=filter2(A,P2(:,:,2))/255.; 
mean_filter_img3(:,:,3)=filter2(A,P2(:,:,3))/255.; 
subplot(3,3,9),imshow(mean_filter_img3),title('5X5高斯躁声均值滤波 0.5');
disp('====================finish================'); 
 

在这里插入图片描述

灰度图像

clc;clear all;close all;
M=imread('../gray1.jpg'); %读取图像
M=rgb2gray(M);
[ROW,COL, DIM] = size(M);%保存图像尺寸
subplot(3,3,1),imshow(M),title('原始图像');%显示原始图像
P1=imnoise(M,'gaussian',0.05); %加入高斯躁声
subplot(3,3,2),imshow(P1),title('加入高斯躁声 0.05');%加入高斯躁声后显示图像
P2=imnoise(M,'gaussian',0.5); %加入高斯躁声
subplot(3,3,3),imshow(P2),title('加入高斯躁声 0.5');%加入高斯躁声后显示图像
gauss_img1=medfilt2(P1); %对高斯躁声中值滤波
subplot(3,3,4),imshow(gauss_img1),title('3X3高斯躁声中值滤波 0.05');
gauss_img2=medfilt2(P2); %对高斯躁声中值滤波
subplot(3,3,5),imshow(gauss_img2),title('3X3高斯躁声中值滤波 0.5');
gauss_img3=medfilt2(P2,[5 5]); %对高斯躁声中值滤波
subplot(3,3,6),imshow(gauss_img3),title('5X5高斯躁声中值滤波 0.5');
A=fspecial('average',3); %生成系统预定义的3X3滤波器
mean_filter_img1=filter2(A,P1)/255.;     
subplot(3,3,7),imshow(mean_filter_img1),title('3X3高斯躁声均值滤波 0.05');
mean_filter_img2=filter2(A,P1)/255.;     
subplot(3,3,8),imshow(mean_filter_img2),title('3X3高斯躁声均值滤波 0.5');
A=fspecial('average',5); %生成系统预定义的5X5滤波器
mean_filter_img3=filter2(A,P1)/255.;     
subplot(3,3,9),imshow(mean_filter_img3),title('5X5高斯躁声均值滤波 0.5');
disp('====================finish================'); 
 
 

在这里插入图片描述

锐化

通过增强高频分量来减少图象中的模糊,因此又称为高通滤波。锐化处理在增强图象边缘的同时增加了图象的噪声。

这里我为了方便定义了个函数,不用再区分灰度和彩色图了

My_filter

function IMG=My_filter(I,Module)
%
[~,~, DIM] = size(I);%保存图像尺寸
IMG=I;
for i = 1:DIM
    IMG(:,:,i)=filter2(Module,I(:,:,i));
end



拉普拉斯算子

clc;clear all;close all;
%% 提取模板
L0=[0 1 0;1 -4 1;0 1 0];
L1=[-1 -1 -1;-1 8 -1;-1 -1 -1];
%% 增强模板
L2=[-1 -1 -1;-1 9 -1;-1 -1 -1];
L3=[-1 -1 -1;-1 10 -1;-1 -1 -1]/2;
L4=[-1 -1 -1;-1 11 -1;-1 -1 -1]/3;
%% 处理
I=imread('../img1.jpg'); %读取图像
[ROW,COL, DIM] = size(I);%保存图像尺寸
subplot(231),imshow(I),title('原始图像');%显示原始图像
%A=fspecial('laplacian'); %生成系统预定义的3X3滤波器
Laplacian_img1=My_filter(I,L0);
subplot(232),imshow(Laplacian_img1),title('Laplacian算子 L0');
Laplacian_img2=My_filter(I,L1);
subplot(233),imshow(Laplacian_img2),title('Laplacian算子 L1');
Laplacian_img3=My_filter(I,L2);
subplot(234),imshow(Laplacian_img3),title('Laplacian算子 L2');
Laplacian_img4=My_filter(I,L3);
subplot(235),imshow(Laplacian_img4),title('Laplacian算子 L3');
Laplacian_img5=My_filter(I,L4);
subplot(236),imshow(Laplacian_img5),title('Laplacian算子 L4');

效果奉上:
在这里插入图片描述
在这里插入图片描述

普瑞斯特算子

clc;clear all;close all;
%% 水平 垂直
Prewitt_x=[1 1 1;0 0 0;-1 -1 -1];
Prewitt_y=[-1 0 1;-1 0 1;-1 0 1];
%% 处理
I=imread('../gray4.jpg'); %读取图像
[ROW,COL, DIM] = size(I);%保存图像尺寸
subplot(131),imshow(I),title('原始图像');%显示原始图像
%A=fspecial('laplacian'); %生成系统预定义的3X3滤波器
Sobel_img1=My_filter(I,Prewitt_x);
subplot(132),imshow(Sobel_img1),title('水平 Prewitt_x');
Sobel_img2=My_filter(I,Prewitt_y);
subplot(133),imshow(Sobel_img2),title('垂直 Prewitt_y');

在这里插入图片描述
在这里插入图片描述

Sobel算子

clc;clear all;close all;
%% 水平 垂直
Sobel_x=[1 2 1;0 0 0;-1 -2 -1];
Sobel_y=[-1 0 1;-2 0 2;-1 0 1];
%% 处理
I=imread('../gray3.jpg'); %读取图像
[ROW,COL, DIM] = size(I);%保存图像尺寸
subplot(131),imshow(I),title('原始图像');%显示原始图像
%A=fspecial('laplacian'); %生成系统预定义的3X3滤波器
Sobel_img1=My_filter(I,Sobel_x);
subplot(132),imshow(Sobel_img1),title('水平 Sobel_x');
Sobel_img2=My_filter(I,Sobel_y);
subplot(133),imshow(Sobel_img2),title('垂直 Sobel_y');

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41445387/article/details/104693465