图像增强与边缘检测Word格式.docx
《图像增强与边缘检测Word格式.docx》由会员分享,可在线阅读,更多相关《图像增强与边缘检测Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
图像增强技术根据增强处理过程所在的空间不同,可分为基于空域的算法和基于频域的算法两大类。
基于空域的算法处理时直接对图像灰度级做运算,基于频域的算法是在图像的某种变换域内对图像的变换系数值进行某种修正,是一种间接增强的算法。
基于空域的算法分为点运算算法和邻域去噪算法。
点运算算法即灰度级校正、灰度变换和直方图修正等,目的或使图像成像均匀,或扩大图像动态范围,扩展对比度。
邻域增强算法分为图像平滑和锐化两种。
平滑一般用于消除图像噪声,但是也容易引起边缘的模糊。
常用算法有均值滤波、中值滤波。
锐化的目的在于突出物体的边缘轮廓,便于目标识别。
常用算法有梯度法、算子、高通滤波、掩模匹配法、统计差值法等。
1.3常用的图像增强方法
(1)直方图均衡化
有些图像在低值灰度区间上频率较大,使得图像中较暗区域中的细节看不清楚。
这时可以通过直方图均衡化将图像的灰度范围分开,并且让灰度频率较小的灰度级变大,通过调整图像灰度值的动态范围,自动地增加整个图像的对比度,使图像具有较大的反差,细节清晰。
(2)对比度增强法
有些图像的对比度比较低,从而使整个图像模糊不清。
这时可以按一定的规则修改原来图像的每一个象素的灰度,从而改变图像灰度的动态范围。
(3)平滑噪声
有些图像是通过扫描仪扫描输入、或传输通道传输过来的。
图像中往往包含有各种各样的噪声。
这些噪声一般是随机产生的,因此具有分布和大小不规则性的特点。
这些噪声的存在直接影响着后续的处理过程,使图像失真。
图像平滑就是针对图像噪声的操作,其主要作用是为了消除噪声,图像平滑的常用方法是采用均值滤波或中值滤波,均值滤波是一种线性空间滤波,它用一个有奇数点的掩模在图像上滑动,将掩模中心对应像素点的灰度值用掩模内所有像素点灰度的平均值代替,如果规定了在取均值过程中掩模内各像素点所占的权重,即各像素点所乘系数,这时就称为加权均值滤波;
中值滤波是一种非线性空间滤波,其与均值滤波的区别是掩模中心对应像素点的灰度值用掩模内所有像素点灰度值的中间值代替。
(4)锐化
平滑噪声时经常会使图像的边缘变的模糊,针对平均和积分运算使图像模糊,可对其进行反运算采取微分算子使用模板和统计差值的方法,使图像增强锐化。
图像边缘与高频分量相对应,高通滤波器可以让高频分量畅通无阻,而对低频分量则充分限制,通过高通滤波器去除低频分量,也可以达到图像锐化的目的。
1.4实验
(一)直方图均衡化,过程如下:
(1)计算原图像的灰度直方图
;
(2)计算原图像的灰度累积分布函数
,进一步求出灰度变换表;
(3)根据灰度变换表,将原图像各灰度级映射为新的灰度级。
在MATLAB中,histeq函数可以实现直方图均衡化。
该命令对灰度图像I进行变换,返回有N级灰度的图像J,J中的每个灰度级具有大致相同的像素点,所以图像J的直方图较为平坦,当N小于I中灰度级数时,J的直方图更为平坦,缺省的N值为64。
代码:
%灰度直方图均衡化
I=imread('
source.jpg'
);
%读取图像
subplot(2,2,1);
imshow(I);
%显示图像
title('
原图'
subplot(2,2,2);
imhist(I)%绘制图像的灰度直方图
原图的灰度直方图'
imhist(I)%显示原始图像直方图
subplot(2,2,3);
J=histeq(I,64);
%对图像进行均衡化处理,返回有64级灰度的图像J
imshow(J);
原图直方图均衡化'
subplot(2,2,4);
imhist(J);
%绘制图像的灰度直方图
均衡后的灰度直方图'
效果图:
结果分析:
从上图【原图】可以看出原始图像动态范围较小,整体较暗,反映在直方图上像素主要集中在低灰度的一侧,如【原图的灰度直方图】所示。
经过对比度调整,图像变亮,可以看到更多的细节如图【原图直方图均衡化】和【均衡后的灰度直方图】所示。
优势:
可以充分利用图像中的亮度信息,明显改善图像质量,是一种常用的图像增强算法。
不足:
对于受噪声影响明显的图像,该算法增强效果不明显。
即不能有效地抑制噪声。
而且,仅仅利用了图像中的局部信息。
(二)锐化
图像锐化处理的作用是使灰度反差增强,从而使模糊图像变得更加清晰。
图像模糊的实质就是图像受到平均运算或积分运算,因此可以对图像进行逆运算,如微分运算以突出图像细节使图像变得更为清晰。
由于拉普拉斯是一种微分算子,它的应用可增强图像中灰度突变的区域,减弱灰度的慢变化区域。
因此,锐化处理可选择拉普拉斯算子对原图像进行处理产生描述灰度突变的图像,再将拉普拉斯图像与原始图像叠加而产生锐化图像。
拉普拉斯锐化的基本方法可以由下式表示:
这种简单的锐化方法既可以产生拉普拉斯锐化处理的效果,同时又能保留背景信息:
将原始图像叠加到拉普拉斯变换的处理结果中去,可以使图像中的各灰度值得到保留、灰度突变处的对比度得到增强,最终结果是在保留图像背景的前提下,突现出图像中小的细节。
a=imread('
subplot(221);
imshow(a);
b=double(a);
%将图像矩阵转化为double类型
s=size(b);
c=zeros(s(1,1),s(1,2));
forx=2:
s(1,1)-1
fory=2:
s(1,2)-1
c(x,y)=(-b(x+1,y)-b(x-1,y)-b(x,y+1)-b(x,y-1)+4*b(x,y));
end
end%用拉氏算子对图像进行滤波,这个过程相当于运用了一个3×
3的掩膜[0,-1,0;
-1,4,-1;
0,-1,0]
subplot(222);
imshow(c);
Laplace锐化滤波图像'
d=b+c;
%当拉普拉斯掩膜中心系数为正时,增强图像为原图像于拉氏算子滤波图像之和
d=uint8(d);
%将图像矩阵变回uint8格式
subplot(223);
imshow(d);
Laplace锐化滤波结果'
效果图;
比较原始模糊图像和经过拉氏算子运算的图像,可以发现,图像模糊的部分得到了锐化,特别是模糊的边缘部分得到了增强,边界更加明显。
但是,图像显示清楚的地方,经过滤波发生了失真,这也是拉氏算子增强的一大缺点。
2边缘检测
边缘是图像上灰度变化最剧烈的地方,传统的边缘检测就是利用了这个特点,对图像各个像素点进行微分或求二阶微分来确定边缘像素点。
一阶微分图像的峰值处对应着图像的边缘点;
二阶微分图像的过零点处对应着图像的边缘点。
根据数字图像的特点,处理图像过程中常采用差分来代替导数运算,对于图像的简单一阶导数运算,由于具有固定的方向性,只能检测特定方向的边缘,所以不具有普遍性。
为了克服一阶导数的缺点,我们定义图像的梯度为梯度算子,它是图像处理中最常用的一阶微分算法。
图像梯度的最重要性质是梯度的方向是在图像灰度最大变化率上,它恰好可以反映出图像边缘上的灰度变化。
2.1边缘检测的基本步骤
1.滤波:
边缘和噪声同属图像中强度变化剧烈的部位因此边缘检测算子对边缘和噪声都很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测算子的性能。
2.增强:
增强边缘的基础是确定图像各点邻域强度的变化值。
增强算法可以将邻域(或局部)强度之有显著变化的点突显出来。
3.检测:
在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。
最简单的边缘检测判据是利用梯度幅值的阈值作为判据。
4.定位:
边缘定位即确定边缘点的具体位置,除此之外还应包括边缘细化、连接。
图2.1边缘检测的流程
常用边缘检测算法
经典的边缘检测算法主要有微分法和最优算子法,微分法是通过利用经典的微分算子检测图像的边缘,主要包括Roberts算子、Sobel算子、Prewitt算子、Kirsch算子和Laplacian算子等,最优算子法则是微分算子发展和优化,主要有LOG算子和Canny算子等。
1.Roberts算子
边缘,是指周围像素灰度有阶跃变化或屋顶等变化的那些像素的集合。
图像的边缘对应着图像灰度的不连续性。
显然图像的边缘很少是从一个灰度跳到另一个灰度这样的理想状况。
真实图像的边缘通常都具有有限的宽度呈现出陡峭的斜坡状。
边缘的锐利程度由图像灰度的梯度决定。
梯度是一个向量,∇f指出灰度变化最快的方向和变化量。
梯度大小由
确定。
而梯度方向则由
因此最简单的边缘检测算子是用图像的垂直和水平差分来逼近梯度算子:
因此当我们寻找边缘的时候,最简单的方法是对每一个像素计算出(2.1.4)的向量,然后求出它的绝对值。
利用这种思想就得到了Roberts算子:
2.Prewitt算子
Roberts算子是直观的也是简单的,但是对噪声多的情况显然效果不好。
实践中人们做了大量的实践,总结出了一些经验,后来Prewitt提出了一个算子,这就是Prewitt算子。
Prewitt边缘检测算子使用两个有向算子(一个水平的,一个是垂直的,一般称为模板),每一个逼近一个偏导数:
如果我们用Prewitt算子检测图像M的边缘的话,我们可以先分别用水平算子和垂直算子对图像进行卷积,得到的是两个矩阵,在不考虑边界的情形下也是和原图像同样大小的M1,M2,他们分别表示图像M中相同位置处的两个偏导数。
然后把M1,M2对应位置的两个数平方后相加得到一个新的矩阵G,G表示M中各个像素的灰度的梯度值(一个逼近)。
然后就可以通过阀值处理得到边缘图像。
我们假设图像的灰度满足下面这个关系:
则梯度是(
)。
显然,当前像素3×
3邻域内像素值为:
定义垂直算子和水平算子形如:
利用这两个模板对当前像素进行卷积,得到的方向导数为:
因此当前像素处的梯度的大小为:
显然要有:
2(2a+b)=1
我们取a=b=1/6则得到的模板就是1/6乘Prewitt算子。
3.Kirsch算子
Kirsch算子由8个3×
3窗口模扳组成、每个模板分别代表一个特定的检测方向,其模板算子如图2.3.1所示。
在进行边缘检测时,把M0-M7所表示的边缘模板(加权矩阵)分别与图像中的一个3×
3区域相乘,选取输出值为最大的模板。
然后,把这一最大输出值作为中央像素点上的边缘强度,把取得最大值的边缘模板Mk的方向k(k的取值如图2.3.2所示)作为其边缘方向。
假设图像中一点P(i,j)及其八邻域的灰度如图3.3.3所示,并设Qk(k=0,1,…,7)为图像经过kirsch算子第k个模板处理后得到的k方向上的边缘强度,则P(i,j)的边缘强度为s(i,j)=max|qk|(k=0,1,…,7),而相应的边缘方向D(i,j)={k|qk为最大值}
图2.3.1
图2.3.2图2.3.3
4canny算法
Canny的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:
(1)最优检测:
算法能够尽可能多地标识出图像中的实际边缘,漏检真实边缘的概率和误检非边缘的概率都尽可能小;
(2)最优定位准则:
检测到的边缘点的位置距离实际边缘点的位置最近,或者是由于噪声影响引起检测出的边缘偏离物体的真实边缘的程度最小;
(3)检测点与边缘点一一对应:
算子检测的边缘点与实际边缘点应该是一一对应。
为了满足这些要求Canny使用了变分法(calculusofvariations),这是一种寻找优化特定功能的函数的方法。
最优检测使用四个指数函数项表示,但是它非常近似于高斯函数的一阶导数。
算法大致流程:
1、求图像与高斯平滑滤波器卷积:
2、使用一阶有限差分计算偏导数的两个阵列P与Q:
3、幅值和方位角:
4、非极大值抑制(NMS):
细化幅值图像中的屋脊带,即只保留幅值局部变化最大的点。
将梯度角的变化范围减小到圆周的四个扇区之一,方向角和幅值分别为:
非极大值抑制通过抑制梯度线上所有非屋脊峰值的幅值来细化M[i,j],中的梯度幅值屋脊.这一算法首先将梯度角θ[i,j]的变化范围减小到圆周的四个扇区之一。
5、取阈值
将低于阈值的所有值赋零,得到图像的边缘阵列
阈值τ取得太低->
假边缘
阈值τ取得太高->
部分轮廊丢失
选用两个阈值:
更有效的阈值方案.
实验:
Roberts算法进行边缘检测
程序
clc;
clearall;
closeall;
A=imread('
11.jpg'
%读入图像
imshow(A);
x_mask=[10;
0-1];
%建立X方向的模板
y_mask=rot90(x_mask);
%建立Y方向的模板
I=im2double(A);
%将图像数据转化为双精度
dx=imfilter(I,x_mask);
%计算X方向的梯度分量
dy=imfilter(I,y_mask);
%计算Y方向的梯度分量
grad=sqrt(dx.*dx+dy.*dy);
%计算梯度?
grad=mat2gray(grad);
%将梯度矩阵转换为灰度图像
level=graythresh(grad);
%计算灰度阈值
BW=im2bw(grad,level);
%用阈值分割梯度图像
figure;
imshow(BW);
%示分割后的图像即边缘图像
Roberts'
)