学号:20011210119
姓名:范亚奇
转载自:
https://blog.csdn.net/ccsss22/article/details/109249220
【嵌牛导读】随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人们服务。数字图像处理是一种通过计算机采用一定的算法对图形图像进行处理的技术。数字图像处理技术已经在各个领域上都有了比较广泛的应用。图像处理的信息量很大,对处理速度的要求也比较高。MATLAB强大的运算和图形展示功能,使图像处理变得更加的简单和直观。本文介绍了MATLAB 语言的特点,基于MATLAB的数字图像处理环境,介绍了如何利用MATLAB及其图像处理工具箱进行数字图像处理,并通过一些例子来说明利用MATLAB图像处理工具箱进行图像处理的方法。主要论述了利用MATLAB实现图像增强、二值图像分析等图像处理。
【嵌牛鼻子】图像增强 数字图像处理 MATLAB
【嵌牛正文】
1.1基本概念
图像增强是一类基本的图像处理技术,其目的是对图像进行加工,以得到对具体应用来说视觉效果更好、更有用的图像。这里的好和有用要因具体的应用目的和要求而异,并且所需的具体增强技术也可不同。
目前常用的增强技术根据其处理所进行的空间不同,可分为基于图像域的方法和基于变化域的方法。第一类,直接在图像所在的空间进行处理,也就是在像素组成的空间里直接对像素进行操作;第二类,在图像的变化域对图像进行间接处理。
1.2 图像增强处理的方法简介
1.2.1空间变换增强
空间变换增强又包含了增强对比度和图像求反。
增强对比度实际是增强原图像的各部分的反差。实际中往往是通过原图中某两个灰度值之间的动态范围来实现的。
对图像求反是将原来的灰度值翻转,简单的说就是使黑变白,使白变黑。
普通的黑白底片和照片就是这样的关系。具体的变换就是将图像中每个像素的灰度值根据变换曲线进行映射。
1.2.2空域滤波增强
空域滤波可分为线形滤波和非线形滤波两类。
线形滤波器的设计常基于对傅立叶变换的分析。
非线形空域滤波器则一般直接对邻域进行操作。
另外各种滤波器根据功能又主要分成平滑滤波和锐化滤波。平滑可用低通来实现,锐化可用高通来实现
平滑滤波器:它能减弱或消除傅立叶空间的高频分量,但不影响在低频分量。因为高频分量对应图像中的区域边缘等灰度值具有较大较快变化的部分,滤波器将这些分量滤去可使图像平滑。
锐化滤波器:它能减弱或消除傅立叶空间的高频分量
1.2.3频域增强
频域增强的基本原理是:卷积理论是频域技术的基础。设函数f(x,y)与线性位不变算子h(x,y)的卷积结果是g(x,y),即g(x,y)=h(x,y)*f(x,y)
那么根据卷积定理在频域有:
G(x,y)=H(u,v)F(u,v)
其中G(x,y)、 H(u,v)、F(u,v)分别是g(x,y)、h(x,y)、f(x,y)的傅立叶变换。
频域增强的两个关键步骤:
(1)将图像从空域转换到频域所需的变换及将图像从频域空间转换回空域所需的变换;
(2)在频域空间对图像进行增强加工操作。
常用的频域增强方法有低通滤波和高通滤波。
低通滤波也称低频滤波器。图像的能量大部分集中在幅度谱的低频和中频度,而图像的边缘和噪声对应于高频部分。因此能降低高频成分幅度的滤波器就能减弱噪声的影响。
高通滤波也称高频滤波器,它的频值在0频率处单位为1,随着频率的增长,传递函数的值逐渐增加;当频率增加到一定值之后传递函数的值通常又回到0值或者降低到某个大于1的值。在前一种情况下,高频增强滤波器实际上是依照能够带通滤波器,只不过规定0频率处的增益为单位1。
实际应用中,为了减少图像中面积大且缓慢变化的成分的对比度,有时让0频率处的增益小于单位1更合适。如果传递函数通过原点,则可以称为laplacian滤波器。
图像处理工具包是由一系列支持图像处理操作的函数组成的。所支持的图像处理操作有:图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(DCT变换等) 、图像分析和统计、二值图像操作等。下面就MATLAB 在图像处理中各方面的应用分别进行介绍。
(1) 图像文件格式的读写和显示。MATLAB 提供了图像文件读入函数 imread(),用来读取如:bmp、tif、tiffpcx 、jpg 、gpeg 、hdf、xwd等格式图像文;图像写出函数 imwrite() ,还有图像显示函数 image()、imshow()等等。
(2) 图像处理的基本运算。MATLAB 提供了图像的和、差等线性运算 ,以及卷积、相关、滤波等非线性算。例如,conv2(I,J)实现了I,J两幅图像的卷积。
(3) 图像变换。MATLAB 提供了一维和二维离散傅立叶变换(DFT) 、快速傅立叶变换(FFT) 、离散余弦变换 (DCT) 及其反变换函数,以及连续小波变换(CWT)、离散小波变换(DWT)及其反变换。
(4) 图像的分析和增强。针对图像的统计计算MATLAB 提供了校正、直方图均衡、中值滤波、对比度调整、自适应滤波等对图像进行的处理。
(5) 图像的数学形态学处理。针对二值图像,MATLAB 提供了数学形态学运算函数;腐蚀(Erode)、膨胀(Dilate)算子,以及在此基础上的开 (Open)、闭(Close)算子、厚化 (Thicken) 、薄化 (Thin) 算子等丰富的数学形态学运算。
以上所提到的 MATLAB在图像中的应用都是由相应的MATLAB函数来实现的,使用时,只需按照函数的调用语法正确输入参数即可。具体的用法可参考MATLAB丰富的帮助文档。图像边缘对图像识别和计算机分析十分有用,在MATLAB中,函数 edge()用于灰度图像边缘的提取,它支持六种不同的边缘提取方法,即Sobel方法、Prewitt 方法、Robert 方法,Laplacian2Gaussian方法、过零点方法和Canny方法。
2图像增强
图像增强是一类基本的图像处理技术,其目的是对图像进行加工,以得到对具体应用来说视觉效果更好、更有用的图像。这里的好和有用要因具体的应用目的和要求而异,并且所需的具体增强技术也可不同。
目前常用的增强技术根据其处理所进行的空间不同,可分为基于图像域的方法和基于变化域的方法。第一类,直接在图像所在的空间进行处理,也就是在像素组成的空间里直接对像素进行操作;第二类,在图像的变化域对图像进行间接处理。空域增强方法可表示为:g(x,y)=EH[f(x,y)],其中f(x,y)和g(x,y)分别为增强前后的图像,EH代表增强操作。
2.1空域变换增强
2.1.1 增强对比度
增强对比度实际是增强原图像的各部分的反差。实际中往往是通过原图中某两个灰度值之间的动态范围来实现的(如图2-1)。
在图2.1中可以看出,通过变换可以使原图的较高的和较低的灰度值的动态范围减小了,而原图在二者之间的动态范围增加了,从而其范围的对比度增加了。
MATLAB代码所示:
X1=imread('pout.tif');
figure,imshow(X1)
f0=0;g0=0;
f1=70;g1=30;
f2=180;g2=230;
f3=255;g3=255;
r1=(g1-g0)/(f1-f0);
b1=g0-r1*f0;
r2=(g2-g1)/(f2-f1);
b2=g1-r2*f1;
r3=(g3-g2)/(f3-f2);
b3=g2-r3*f2;
[m,n]=size(X1);
X2=double(X1);
for i=1:m
for j=1:n
f=X2(i,j);
g(i,j)=0;
if(f>=0)&(f<=f1)
g(i,j)=r1*f+b1;
elseif (f>=f1)&(f<=f2)
g(i,j)=r2*f+b2;
elseif (f>=f2)&(f<=f3)
g(i,j)=r3*f+b3;
end
end
end
figure,imshow(mat2gray(g))
图像处理图示(如图2-2和图2-3)
4.1.2 图像求反
对图像求反是将原来的灰度值翻转,简单的说就是使黑变白,使白变黑。
普通的黑白底片和照片就是这样的关系。具体的变换就是将图像中每个像素的灰度值根据变换曲线进行映射。
MATLAB代码所示:
X1=imread('pout.tif');
f1=200;
g1=256;
k=g1/f1;
[m,n]=size(X1);
X2=double(X1);
for i=1:m
for j=1:n
f=X2(i,j);
g(i,j)=0;
if(f>=0)&(f<=f1)
g(i,j)=g1-k*f;
else
g(i,j)=0;
end
end
end
figure,imshow(mat2gray(g))
图像处理图如图2-4所示:
2.2空域滤波增强
一般情况下,像素的邻域比该像素要大,也就是说这个像素的邻域中除了本身以外还包括其他像素。在这种情况下,g(x,y)在(x,y)位置处的值不仅取决于f(x,y)在以(x,y)为中心的邻域内所有的像素的值。如仍以s和t分别表示f(x,y)在(x,y)位置处的灰度值,并以n(s)代表f(x,y)在(x,y)邻域内像素的灰度值,则 t=EA[s,n(s)]。为在邻域内实现增强操作,常可利用模板与图像进行卷积。每个模板实际上是一个二维数组,其中各个元素的取值定了模板的功能,这种模板操作也称为空域滤波。
2.2.1 基本原理
空域滤波可分为线形滤波和非线形滤波两类。
线形滤波器的设计常基于对傅立叶变换的分析。
非线形空域滤波器则一般直接对邻域进行操作。
另外各种滤波器根据功能又主要分成平滑滤波和锐化滤波。平滑可用低通来实现,锐化可用高通来实现
平滑滤波器:它能减弱或消除傅立叶空间的高频分量,但不影响在低频分量。因为高频分量对应图像中的区域边缘等灰度值具有较大较快变化的部分,滤波器将这些分量滤去可使图像平滑。
锐化滤波器:它能减弱或消除傅立叶空间的高频分量
空域滤波器都是利用模板卷积,主要步骤如下:
(1)将模板在图中漫游,并将模板中心与图中某个像素位置重合;
(2)将模板上的系数与模板下对应的像素相乘;
(3)将所有的乘积相加;
(4)将和(模板的输出响应)赋给图中对应的模板中心位置像素。
下面分别介绍在MATLAB中如何应用平滑和锐化滤波器。
2.2.2 线性平滑滤波器
线性低通滤波器是最常用的线性平滑滤波器。这种滤波器的所有系数都是正的。对3*3的模板来说,最简单的操作是取所有系数都为1。为保证输出图像仍在原来的灰度范围内,在计算R后要将其除以9再进行赋值。这种方法称为邻域平均法。
MATLAB实现均值过滤器的代码所示:
I=imread('saturn.tif');
J=imnoise(I,'salt & pepper',0.02);
imshow(I)
figure,imshow(J)
K1=filter2(fspecial('average',3),J)/255;
figure,imshow(K1)
title('3*3的均值滤波器')
原图像,加入椒盐噪声的图像和均值滤波的图像分别如图2-5、图2-6和图2-7所示。
2.2.3 非线性平滑滤波器
中值滤波器是最常用的非线性平滑滤波器。它是一种临域运算,类似于卷积,但计算的不是加权求和,而是把邻域中的像素按灰度级进行排序,然后选择改组的中间值作为输出的像素值。具体步骤:
(1)将模板在图像中漫游,并将模板中心和图像某个像素的位置重合;
(2)读取模板下对应像素的灰度值;
(3)将这些灰度值从小到大排成一列;
(4)找出这些值排在中间的一个;
(5)将这个中间值赋给对应模板中心位置的像素。
MATLAB实现中值滤波器代码所示:
I=imread('saturn.tif');
J=imnoise(I,'salt & pepper',0.02);
K1=medfilt2(J,[3,3]);
figure,imshow(K1)
中值滤波的结果如图2-8所示。
2.2.4 线性锐化滤波器
线性高通滤波器是最常用的线性锐化滤波器。这种滤波器的中心系数都是正的,而周围的系数都是负的。对3*3的模板来说,典型的系数取值是:[-1 –1 –1;-1 8 –1;-1 –1 -1]。事实上这是拉普拉斯算子,所有的系数之和为0。当这样的模板放在图像中灰度值是常数或变化很小的区域时,其输出为0或很小。这个滤波器将原来的图像中的零频域分量去除了,也就是将输出的图像的平均值变为0,这样就会有一部分像素的灰度值小于0。在图像处理中我们一般只考虑正的灰度值,所以还有将输出图像的灰度值范围通过尺度变回到所要求的范围。
MATLAB代码所示:
I=imread('saturn.tif');
m=fspecial('laplacian')
I1=filter2(m,I)
h=fspecial('unsharp',0.5);
I2=filter2(h,I)/255;
subplot(1,2,1);
imshow(I1);
title('高通滤波laplacian算子')
subplot(1,2,2);
imshow(I2);
title('高通滤波unsharp')
处理结果如图2-9所示:
2.3 频域增强
2.3.1 基本原理
卷积理论是频域技术的基础。设函数f(x,y)与线性位不变算子h(x,y)的卷积结果是g(x,y),即g(x,y)=h(x,y)*f(x,y)。那么根据卷积定理在频域有:
G(x,y)=H(u,v)F(u,v)
其中G(x,y)、 H(u,v)、F(u,v)分别是g(x,y)、h(x,y)、f(x,y)的傅立叶变换。
频域增强的主要步骤是:
(1)技术所需增强图的傅立叶变换;
(2)将其与一个(根据需要设计的)转移函数相乘;
(3)再将结果进行傅立叶反变换以得到增强的图。
频域增强的两个关键步骤:
(1)将图像从空域转换到频域所需的变换及将图像从频域空间转换回空域所需的变换;
(2)在频域空间对图像进行增强加工操作。
常用的频域增强方法有低通滤波和高通滤波。以下分别介绍在MATLAB中如何实现。
2.3.2 低通滤波
图像的能量大部分集中在幅度谱的低频和中频度,而图像的边缘和噪声对应于高频部分。因此能降低高频成分幅度的滤波器就能减弱噪声的影响。Butterworth 低通滤波器是一种物理上可以实现的低通滤波器,n阶,截断频率为d0的Butterworth低通滤波器的转移函数为:
H(u,v)=
用MATLAB实现Butterworth低通滤波器的代码所示:
I1=imread('Saturn.tif');
figure,imshow(I1)
I2=imnoise(I1,'salt');
figure,imshow(I2)
f=double(I2);
g=fft2(f);
g=fftshift(g);
[N1,N2]=size(g);
n=2;
d0=50;
n1=fix(N1/2);
n2=fix(N2/2);
for i=1:N1
for j=1:N2
d=sqrt((i-n1)^2+(j-n2)^2);
h=1/(1+0.414*(d/d0)^(2*n));
result(i,j)=h*g(i,j);
end
end
result=ifftshift(result);
X2=ifft2(result);
X3=uint8(real(X2));
figure,imshow(X3)
原图和处理结果如图2-10和图2-11所示
2.3.3 高通滤波
高通滤波也称高频滤波器,它的频值在0频率处单位为1,随着频率的增长,传递函数的值逐渐增加;当频率增加到一定值之后传递函数的值通常又回到0值或者降低到某个大于1的值。在前一种情况下,高频增强滤波器实际上是依照能够带通滤波器,只不过规定0频率处的增益为单位1。
实际应用中,为了减少图像中面积大且缓慢变化的成分的对比度,有时让0频率处的增益小于单位1更合适。如果传递函数通过原点,则可以称为laplacian滤波器。
n阶截断频率为d0的Butterworth高通滤波器的转移函数为:
H(u,v)=
MATLAB实现Butterworth高通滤波器代码所示:
I1=imread('blood1.tif');
figure,imshow(I1)
f=double(I1);
g=fft2(f);
g=fftshift(g);
[N1,N2]=size(g);
n=2;
d0=5;
n1=fix(N1/2);
n2=fix(N2/2);
for i=1:N1
for j=1:N2
d=sqrt((i-n1)^2+(j-n2)^2);
if d==0
h=0;
else
h=1/(1+(d0/d)^(2*n));
end
result(i,j)=h*g(i,j);
end
end
result=ifftshift(result);
X2=ifft2(result);
X3=uint8(real(X2));
figure,imshow(X3)
原图和处理结果如图4-12和4-13所示。
二值图像中所有的像素只能从0和1这两个值中取,因此在MATLAB中,二值图像用一个由0和1组成的二维矩阵表示。这两个可取的值分别对应于关闭和打开,关闭表征该像素处于背景,而打开表征该像素处于前景。以这种方式来操作图像可以更容易识别出图像的结构特征。