opencv-第六章-拉普拉斯变换和canny算子
opencv的拉普拉斯函数实现了拉普拉斯算子的离散模拟。因为拉普拉斯算子可以用二次导数的形式定义,可假设其离散实现类似于二阶sobel导数。事实的确如此,opencv在计算拉普拉斯算子时直接使用sobel算子。
void cvLaplace(const CvArr* src, CvArr* dst, int apertureSize=3);
cvLaplace函数通常把源图像和目标图像以及中孔大小作为变量。源图像既可以是8位(无符号)图像,也可以是32位(浮点)图像。而目标图像必须是16位(有符号)或者32位(浮点)图像。这里的中孔与sobel导数中出现的中孔完全一样,事实上主要给出区域大小,在二次求导的计算中,采样这个区域的像素。
拉普拉斯算子可用于各种情况。一个通常的应用是检测“团块”。联想到拉普拉斯算子的形式是沿着x轴和y轴的二次导数的和,这就意味着周围是更高值的单点或者小块(比中孔小)会将使这个函数值最大化。反过来说,周围是更低值的点将会使函数的负值最大化。
基于这种思想,拉普拉斯算子也可以用作边缘检测。为达此目的,只需要考虑当函数快速变化时其一阶导数变大即可。同样重要的是,当我们逼近类似边缘的不连续地方时导数会快速增长,而穿过这些不连续地方时导数又会快速减小。所以导