OpenCV——Sobel和拉普拉斯变换

Sobel变换和拉普拉斯变换都是高通滤波器

什么是高通滤波器呢?就是保留图像的高频分量(变化剧烈的部分),抑制图像的低频分量(变化缓慢的部分)。而图像变化剧烈的部分,往往反应的就是图像的边沿信息了。

1. Sobel算子(主要用于边缘检测)

//Sobel变化实例

Mat sobelX;  
Sobel(image,sobelX,CV_8U,1,0,3,0.4,128);  
imshow("X方向Sobel结果",sobelX);  
  
Mat sobelY;  
Sobel(image,sobelY,CV_8U,0,1,3,0.4,128);  
imshow("Y方向Sobel结果",sobelY);  

 

//函数说明

void Sobel(InputArray src, OutputArray dst, int ddepth, int xorder, int yorder, int ksize=3, double
scale=1, double delta=0, int borderType=BORDER_DEFAULT )
void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size=3 );
/*
src
输入图像.
dst
输出图像.
xorder
x 方向上的差分阶数
yorder
y 方向上的差分阶数
aperture_size
扩展 Sobel 核的大小,必须是 1, 3, 5 或 7。 除了尺寸为 1, 其它情况下, aperture_size ×aperture_size 可分离内核将用来计算差分。对 aperture_size=1的情况,
使用 3x1 或 1x3 内核 (不进行高斯平滑操作)。这里有一个特殊变量 CV_SCHARR (=-1),对应 3x3 Scharr 滤波器,可以给出比 3x3 Sobel 滤波更精确的结果。
对 x-方向 或矩阵转置后对 y-方向。
*/

2.Laplacian变换

Laplacian变换功能1用来检测物体的边缘信息

具体说明:

在图像平坦(灰度值无变换的区域),拉普拉斯滤波后的图像在该区域的强度值为0.在图像灰度值剧烈变换的区域(边缘),拉普拉斯滤波后的图像的强度值(绝对值)相对较大。 
物体边缘一般在强度值的零交点(注意:并不是在强度值为0的点,而是在强度值从正变换到负,或从负变换到正的过程中,隐含存在的为0的亚像素级的点)。

 

Laplacian变换功能2:可用于图像增强(原图像减去拉普拉斯变换的图像)

原理大体为: 

图像相对平坦的区域拉普拉斯变换后的值约等于0。像素(原)-0=像素(原),即该区域图像几乎没有变化。 
在图像中强度值变换剧烈的地方,通常是物体的边缘处,拉普拉斯变换后的该区域的强度值(绝对值)较大。那么 像素(原)-像素(变换后),肯定会发生变化。例如:150(原)-50(变换后的 )=100,该点处的像素变黑。

 

函数:

void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3 );
/*
src    输入图像.
dst    输出图像.
aperture_size    核大小 (与 cvSobel 中定义一样)
*/

函数 cvLaplace 计算输入图像的 Laplacian变换,方法是先用 sobel 算子计算二阶 x- 和 y- 差分,再求和:

对 aperture_size=1 则给出最快计算结果,相当于对图像采用如下内核做卷积:

类似于 cvSobel 函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和cvSobel一致。

posted @ 2016-10-27 14:48  Not-Bad  阅读(3479)  评论(0编辑  收藏  举报