索引地址:系列索引
图像锐化处理的作用是使灰度反差增强,从而使模糊图像变得更加清晰。图像模糊的实质就是图像受到平均运算或积分运算,因此可以对图像进行逆运算,如微分运算能够突出图像细节,使图像变得更为清晰。由于拉普拉斯是一种微分算子,它的应用可增强图像中灰度突变的区域,减弱灰度的缓慢变化区域。
普拉斯算子是最简单的各向同性微分算子,具有旋转不变性。一个二维图像函数 的拉普拉斯变换是各向同性的二阶导数,定义为:
▽ 2 f ( x , y ) = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 \bigtriangledown^2 f(x,y)= \frac {\partial^2f}{\partial x^2}+\frac{\partial^2 f}{\partial y^2} ▽ 2 f ( x , y ) = ∂ x 2 ∂ 2 f + ∂ y 2 ∂ 2 f
在一个二维函数f(x,y)中,x,y两个方向的二阶差分分别为,
∂ 2 f ∂ x 2 = f ( x + 1 , y ) + f ( x − 1 , y ) − 2 f ( x , y ) ∂ 2 f ∂ y 2 = f ( x , y − 1 ) + f ( x , y − 1 ) − 2 f ( x , y ) \frac {\partial^2f}{\partial x^2}=f(x+1,y)+f(x-1,y)-2f(x,y) \\ \frac{\partial^2 f}{\partial y^2}=f(x,y-1)+f(x,y-1)-2f(x,y) ∂ x 2 ∂ 2 f = f ( x + 1 , y ) + f ( x − 1 , y ) − 2 f ( x , y ) ∂ y 2 ∂ 2 f = f ( x , y − 1 ) + f ( x , y − 1 ) − 2 f ( x , y )
为了更适合于数字图像处理,将该方程表示为离散形式:
▽ 2 f ( x , y ) = [ f ( x + 1 , y ) + f ( x − 1 , y ) + f ( x , y − 1 ) + f ( x , y − 1 ) ] − 4 f ( x , y ) \bigtriangledown^2 f(x,y) = [f(x+1,y)+f(x-1,y)+f(x,y-1)+f(x,y-1)]-4f(x,y) ▽ 2 f ( x , y ) = [ f ( x + 1 , y ) + f ( x − 1 , y ) + f ( x , y − 1 ) + f ( x , y − 1 ) ] − 4 f ( x , y )
写成filter mask的形式如下,
注意该(a)的mask的特点,mask在上下左右四个90度的方向上结果相同,也就是说在90度方向上无方向性。为了让该mask在45度的方向上也具有该性质,对该filter mask进行扩展定义为(b)。
将Laplace算子写成filter mask后,其操作大同小异于其他的空间滤波操作。将filter mask在原图上逐行移动,然后mask中数值与其重合的像素相乘后求和,赋给与mask中心重合的像素,对图像的第一,和最后的行和列无法做上述操作的像素赋值零,就得到了拉普拉斯操作结果。
函数原型:
1 Laplacian ( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );
参数说明:
src_gray,输入图像 dst,Laplace操作结果 ddepth,输出图像深度,因为输入图像一般为CV_8U,为了避免数据溢出,输出图像深度应该设置为CV_16S kernel_size,filter mask的规模,我们的mask时3x3的,所以这里应该设置为3 scale,delta,BORDER_DEFAULT,默认设置就好 测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <iostream> #include <opencv2/opencv.hpp> using namespace std;using namespace cv;int main () { Mat src = imread ("012.jpg" ,0 );namedWindow ("OriginalImage" );imshow ("OriginalImage" ,src);CV_Assert (src.depth () == CV_8U); Mat dst,abs_dst_laplace;Laplacian (src,dst,CV_16S,3 );convertScaleAbs (dst,abs_dst_laplace);namedWindow ("result_laplacian" );imshow ("result_laplacian" ,abs_dst_laplace); waitKey (0 ); return 0 ; }
测试效果为: