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

简介: 数字图像处理--(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总结了其他参数的含义。

image.png

例子


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

G=0.00000.00000.00020.00000.00000.00000.01130.08370.01130.00000.00020.08370.61870.08370.00020.00000.01130.08370.01130.00000.00000.00000.00020.00000.0000

平滑


与锐化相反,就是滤掉高频分量,从而达到减少图象噪声,使图片变得有些模糊。因此又称为低通滤波。

介于之前做过相关的文章这里就不展开说明了

使用均值滤波和中值滤波来验证线型的和非线性不同模板大小的滤波效果

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


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

彩色图像


clc;clearall;closeall;
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),[55]); %对高斯躁声中值滤波gauss_img3(:,:,2)=medfilt2(P2(:,:,2),[55]); %对高斯躁声中值滤波gauss_img3(:,:,3)=medfilt2(P2(:,:,3),[55]); %对高斯躁声中值滤波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================'); 

image.png

灰度图像


clc;clearall;closeall;
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,[55]); %对高斯躁声中值滤波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================'); 

image.png

锐化


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

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

My_filter


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

拉普拉斯算子


clc;clearall;closeall;
%%提取模板L0=[010;1-41;010];
L1=[-1-1-1;-18-1;-1-1-1];
%%增强模板L2=[-1-1-1;-19-1;-1-1-1];
L3=[-1-1-1;-110-1;-1-1-1]/2;
L4=[-1-1-1;-111-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');

效果奉上:

image.png

image.png

目录
相关文章
|
2月前
|
机器学习/深度学习 算法 数据可视化
通过深度学习和人脸图像进行年龄段估计matlab仿真
通过深度学习和人脸图像进行年龄段估计matlab仿真
|
2月前
|
存储 缓存 算法
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
|
2月前
|
机器学习/深度学习 算法 数据可视化
python/matlab图像去雾/去雨综述
python/matlab图像去雾/去雨综述
38 0
|
1月前
|
算法
m基于OFDM+QPSK和LDPC编译码以及MMSE信道估计的无线图像传输matlab仿真,输出误码率,并用图片进行测试
MATLAB2022a仿真实现了无线图像传输的算法,包括OFDM、QPSK调制、LDPC编码和MMSE信道估计。OFDM抗频率选择性衰落,QPSK用相位表示二进制,LDPC码用于前向纠错,MMSE估计信道响应。算法流程涉及编码、调制、信道估计、均衡、解码和图像重建。MATLAB代码展示了从串行数据到OFDM信号的生成,经过信道模型、噪声添加,再到接收端的信道估计和解码过程,最终计算误码率。
22 1
|
2天前
|
算法 计算机视觉 异构计算
基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证
该内容展示了FPGA实现图像累积直方图的算法。使用Vivado2019.2和matlab2022a,通过FPGA的并行处理能力优化图像处理。算法基于像素值累加分布,计算图像中像素值小于等于特定值的像素个数。核心代码为`test_image`模块,读取二进制图像文件并传递给`im_hist`单元,生成直方图和累积直方图。
|
10天前
|
文字识别 算法 计算机视觉
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
15 0
|
1月前
|
计算机视觉
数字图像处理笔记(一)Matlab实现直方图均衡化
数字图像处理笔记(一)Matlab实现直方图均衡化
|
1月前
|
资源调度 算法
m基于OFDM+QPSK和LDPC编译码以及LS信道估计的无线图像传输matlab仿真,输出误码率,并用图片进行测试
m基于OFDM+QPSK和LDPC编译码以及LS信道估计的无线图像传输matlab仿真,输出误码率,并用图片进行测试
26 2
|
1月前
|
编解码 算法 计算机视觉
基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
|
2月前
|
算法 测试技术 计算机视觉
基于MATLAB的图像条形码识别系统(matlab系列1)
基于MATLAB的图像条形码识别系统(matlab系列1)
40 1

热门文章

最新文章