1、图像平滑往往使图像中的边界、轮廓变的模糊,为了减少这类不利效果的影响,这就需要利用图像鋭化技术,使图像的边缘变的清晰。图像銳化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变的清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变的清晰。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。为了要把图像中间任何方向伸展的的边缘和轮廓线变得清晰,我们希望对图像的某种运算是各向同性的。可以证明偏导平方和的运算是各向同性的,既:式中( )是图像旋转前的坐标,( )是图像旋转后的坐标。梯度运算就是在
2、这个式子的基础上开方得到的。图像(x,y)点的梯度值:为了突出物体的边缘,常常采用梯度值的改进算法,将图像各个点的梯度值与某一阈值作比较,如果大于阈值,该像素点的灰度用梯度值表示,否则用一个固定的灰度值表示。我们在对图像增强的过程中,采用的是一种简单的高频滤波增强方法:式中 f,g 分别为锐化前后的图像, 是与扩散效应有关的系数。 表示对图像 f 进行二次微分的拉普拉斯算子。这表明不模糊的图像可以由模糊的图像减去乘上系数的模糊图像拉普拉斯算子来得到。 可以用下面的模板 H=1,4 ,1,4 ,-20,4, 1,4,1 来近似。在具体实现时,上述模板 H 中的各个系数可以改变, 这个系数的选择也
3、很重要,太大了会使图像的轮廓过冲,太小了则图像锐化不明显。实验表明, 选取 2-8 之间往往可以达到比较满意的效果。下面给出 等于 4 的情况下的实现代码和效果图:void CDibView:OnMenuitem32785() CClientDC pDC(this);HDC hDC=pDC.GetSafeHdc();/获取当前设备上下文的句柄;SetStretchBltMode(hDC,COLORONCOLOR);CDibDoc *pDoc=GetDocument();HDIB hdib;hdib=pDoc-GetHDIB();BITMAPINFOHEADER *lpDIBHdr;/位图信息头
4、结构指针;BYTE *lpDIBBits;/指向位图像素灰度值的指针;lpDIBHdr=( BITMAPINFOHEADER *)GlobalLock(hdib);/得到图像的位图头信息 lpDIBBits=(BYTE*)lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);/获取图像像素值 BYTE* pData1;static int a33=1,4,1,4,-20,4,1,4,1;/拉普拉斯算子模板;int m,n,i,j,sum;int Width=lpDIBHdr-biWidth;int Height=lpDIBHdr-biHei
5、ght;pData1=(BYTE*)new charWIDTHBYTES(Width*8)*Height;file:/进行拉普拉斯滤波运算;for(i=1;i255) sum=255;*(pData1+WIDTHBYTES(Width*8)*i+j)=sum;file:/原始图像 pData 减去拉普拉斯滤波处理后的图像 pData1for(i=0;i255) sum=255;*(lpDIBBits+WIDTHBYTES(Width*8)*i+j)=sum;StretchDIBits (hDC,0,0,lpDIBHdr-biWidth,lpDIBHdr-biHeight,0,0,lpDIBHdr-biWidth,lpDIBHdr-biHeight,lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS,SRCCOPY);(a ) LENA 原图 (b)拉普拉斯锐化图