拉普拉斯 锐化

拉普拉斯锐化是一种很常见的图像增强技术,其实现简单,效果杠杠滴。在《数字图像处理》这本绿宝书中讲的很透彻,本文不打算详细讲解了,作为粗略的总结。

拉普拉斯锐化跟高斯滤波等都是相似的,拉普拉斯也有一个模板,就像高斯的模板一样。通过这个模板在图像中处理一遍后,就锐化了!


0 1 0
1 -4 1
0 1 0
(1)这个模板只考虑4邻域

1 1 1
1 -8 1
1 1 1
(2)这个模板称为对角掩膜,也就是考虑了8邻域,这种模板的锐化效果要更好一些。不过有时候会产生锐化过度的副作用。

0 -1 0
-1 4 -1
0 -1 0
(3)这个模板的中心与(1)中的正好相反,没啥区别,唯一的区别在下面会说明一下。

请看下面结合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;
				       
		}

}

原图是

拉普拉斯 锐化_第1张图片

锐化完了居然变成了下面这样子!

拉普拉斯 锐化_第2张图片

其实这个锐化完的图像就相当于图像的轮廓线,下面是要把这幅轮廓线加到原图中,才会有锐化的效果。中心为负值的模板就是原图减去这个轮廓图。效果都是一样的,就是融合的时候加减的问题。

拉普拉斯 锐化_第3张图片

很多人说,好麻烦,还要再加上原图,其实只要把模板稍微变一变就OK了。原来是4,那么我现在变成5,模板扫荡一遍后就是锐化完的图片,再也不用另外相加了。


下面考虑我把4加1变成5就是锐化的原图,假如我不加1,我加了0.5,或者是1.5,会有神马效果呢?加上大于1的,会让图像变得更亮,但是锐化的就不是那么明显了。加上小于1的,图像自然会暗些。下面这幅图是4加上2的效果,,也就是模板的中心值为6.

拉普拉斯 锐化_第4张图片


你可能感兴趣的:(图像处理)