该博文参考《数字图像处理》-杨帆
在图像识别中,需要有边缘鲜明的图像,及图像锐化。。然而边缘模糊是图像处理中常见的图像问题,由此造成的轮廓不清晰,线条不鲜明,使图像特征提取、识别、理解难以进行。
根据图像信号的频率特性,大面积的背景区域和缓慢变化的部分代表图像的低频分量,而他的边缘、细节、跳跃部分等都代表了高频分量,利用这一特性,我们可基于高通滤波来增强细节信息从而达到锐化目的的本质。
图像锐化中最常用的方法市梯度法。对图像 f ( x , y ) {\color{Blue} f(x,y)} f(x,y),在点 ( x , y ) {\color{Blue} (x,y)} (x,y)上的梯度是一个二维向量,可定义为:
G [ f ( x , y ) ] = [ ∂ f ∂ x ∂ f ∂ y ] T {\color{Blue} G[f(x,y)]=\begin{bmatrix} \frac{\partial f}{\partial x} & \frac{\partial f}{\partial y} \end{bmatrix}^{T}} G[f(x,y)]=[∂x∂f∂y∂f]T
对其取模:
∣ G [ f ( x , y ) ] ∣ = G x 2 + G y 2 = [ ( ∂ f ∂ x ) 2 + ( ∂ f ∂ y ) 2 ] 1 / 2 {\color{Blue} \left | G[f(x,y)] \right |=\sqrt{G_{x}^2+G_{y}^2}=[(\frac{\partial f}{\partial x})^2+(\frac{\partial f}{\partial y})^2]^{1/2}} ∣G[f(x,y)]∣=Gx2+Gy2=[(∂x∂f)2+(∂y∂f)2]1/2
不难证明,梯度的模是一个各向同性算子,并且是 f ( x , y ) {\color{Blue} f(x,y)} f(x,y)沿着G方向上的最大变化率。
对于数字图像处理,有两种二维梯度的计算方法:
G x = Δ x f ( i , j ) = f ( i + 1 , j ) − f ( i , j ) {\color{Blue} G_{x}=\Delta _{x}f(i,j)=f(i+1,j)-f(i,j)} Gx=Δxf(i,j)=f(i+1,j)−f(i,j)
G y = Δ x f ( i , j ) = f ( i , j + 1 ) − f ( i , j ) {\color{Blue} G_{y}=\Delta _{x}f(i,j)=f(i,j+1)-f(i,j)} Gy=Δxf(i,j)=f(i,j+1)−f(i,j)
将其带入上述取模运算可得到典型梯度算法。
G x = Δ x f ( i , j ) = f ( i + 1 , j + 1 ) − f ( i , j ) {\color{Blue} G_{x}=\Delta _{x}f(i,j)=f(i+1,j+1)-f(i,j)} Gx=Δxf(i,j)=f(i+1,j+1)−f(i,j)
G y = Δ x f ( i , j ) = f ( i , j + 1 ) − f ( i + 1 , j ) {\color{Blue} G_{y}=\Delta _{x}f(i,j)=f(i,j+1)-f(i+1,j)} Gy=Δxf(i,j)=f(i,j+1)−f(i+1,j)
将其带入上述取模运算可得到Roberts梯度算法。
我们将上述两种算法作图可直观展现:
由公式可见,梯度模相关与相邻像素灰度差值。在图像轮廓上,像素的灰度陡然变化,梯度值很大;在图像灰度相对平缓的区域梯度较小;而在等灰度区域,梯度值为0。由此可见,梯度算子对边界即灰度变化的区域具有偏好性,图像经过梯度运算之后可使细节清晰从而达到锐化的目的。
然而事实证明,对图像采用梯度运算之后,虽然能使图像细节清晰,但往往在灰度变化比较小的区域会丢失部分信息。我们需要采用某些手段去修正上述梯度算子。
下面介绍一些常用的方法:
1.
当梯度值超过某阈值T的像素,采用梯度值,而小于该阈值的梯度,选择用原图像的像素值。即适当的选用T,可以有效增强边界而不影响比较平滑的背景。
2.
当梯度值超过某阈值T的像素时,选用固定灰度 L G L_{G} LG来代替,而小于该阈值T时,选用原图像像素。这种方法可以使边界清晰,同时又不损害灰度变化比较平缓的区域的图像特性。
3.
当梯度值超过某阈值T的像素时,选用梯度值,而小于该阈值T时,选用固定灰度 L B L_{B} LB。这种方法将背景用一个固定的灰度级 L B L_{B} LB表示,可用于分析边缘灰度的变化。
当梯度值超过某阈值T的像素时,选用固定灰度 L G L_{G} LG,而小于该阈值T时,选用固定灰度 L B L_{B} LB。这种方法生成二值图像。
[I,map]=imread('zzpic2648.jpg'); %读入原图像
figure(1),imshow(I,map); %显示原图像
I=double(I);
[IX,IY]=gradient(I);
GM=sqrt(IX.*IX+IY.*IY); %计算梯度模值
OUT1=GM;
figure(2),imshow(OUT1,map) %显示未经处理的锐化
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
OUT2=I;
J=find(GM>=10); %阈值T=10
OUT2(J)=GM(J);
figure(3),imshow(OUT2,map) %显示第一种处理的锐化
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
OUT3=I;
J=find(GM>=10);
OUT3(J)=255;
figure(4),imshow(OUT3,map) %显示第二种处理的锐化
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&%%%
OUT4=I;
J=find(GM<=10);
OUT4(J)=255;
figure(5),imshow(OUT4,map) %显示第三种处理的锐化
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
OUT5=I;
J=find(GM>=10);
OUT5(J)=255;
Q=find(GM<10);
OUT5(Q)=0;
figure(6),imshow(OUT5,map)%显示第四种处理的锐化