拉普拉斯锐化是一种很常见的图像增强技术,其实现简单,效果杠杠滴。在《数字图像处理》这本绿宝书中讲的很透彻,本文不打算详细讲解了,作为粗略的总结。
拉普拉斯锐化跟高斯滤波等都是相似的,拉普拉斯也有一个模板,就像高斯的模板一样。通过这个模板在图像中处理一遍后,就锐化了!
0 | 1 | 0 |
1 | -4 | 1 |
0 | 1 | 0 |
1 | 1 | 1 |
1 | -8 | 1 |
1 | 1 | 1 |
0 | -1 | 0 |
-1 | 4 | -1 |
0 | -1 | 0 |
请看下面结合opencv实现的代码:
//拉普拉斯滤波
void Laplace(IplImage *srcImg,IplImage *destImg)
{
const int widthStep = srcImg->widthStep;
uchar *pData = (uchar *)srcImg->imageData;
for ( int i = 1; i < srcImg->height - 1; ++i )
for ( int j = 1; j < srcImg->width - 1; ++j )
{
int count = pData[(i-1)*widthStep + j] + pData[i*widthStep + j -1] +
pData[i*widthStep + j + 1] + pData[(i+1)*widthStep +j] ;//+
//pData[(i-1)*widthStep +j-1] +pData[(i-1)*widthStep+j+1] +
//pData[(i+1)*widthStep +j-1]+ pData[(i+1)*widthStep+j+1];
int tmpGray = 4*pData[i*widthStep +j] - count;
if (tmpGray >255 )
tmpGray = 255;
else if(tmpGray < 0 )
tmpGray = 0;
destImg->imageData[i*widthStep +j] = (uchar)tmpGray;
}
}
原图是
锐化完了居然变成了下面这样子!
其实这个锐化完的图像就相当于图像的轮廓线,下面是要把这幅轮廓线加到原图中,才会有锐化的效果。中心为负值的模板就是原图减去这个轮廓图。效果都是一样的,就是融合的时候加减的问题。
很多人说,好麻烦,还要再加上原图,其实只要把模板稍微变一变就OK了。原来是4,那么我现在变成5,模板扫荡一遍后就是锐化完的图片,再也不用另外相加了。
下面考虑我把4加1变成5就是锐化的原图,假如我不加1,我加了0.5,或者是1.5,会有神马效果呢?加上大于1的,会让图像变得更亮,但是锐化的就不是那么明显了。加上小于1的,图像自然会暗些。下面这幅图是4加上2的效果,,也就是模板的中心值为6.