拉普拉斯算子,是学图像处理最先学习的,是一个二阶差分算法。
一阶差分算子,就是 相邻像素相减。
二阶差分算子,就是 在 一阶差分算子上,继续做相邻像素相减。
三阶差分算子,就是在 二阶差分上,继续差分…………
所以,比较容易理解。
![e17ba035-6c13-eb11-8da9-e4434bdf6706.png](http://p04.5ceimg.com/content/e17ba035-6c13-eb11-8da9-e4434bdf6706.png)
拉普拉斯常用的差分核心
OpenCV里面,提供了一个 Laplace API:
![e57ba035-6c13-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/e57ba035-6c13-eb11-8da9-e4434bdf6706.png)
OpenCV标准API
由API描述,该实现是 4领域 参与运算的 差分算子。
调用方式为:
![e87ba035-6c13-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/e87ba035-6c13-eb11-8da9-e4434bdf6706.png)
调用方式
注意,需要将 结果进行一定的 归一化,否则 无法显示图像。
![f07ba035-6c13-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/f07ba035-6c13-eb11-8da9-e4434bdf6706.png)
使用 abs显示
![f37ba035-6c13-eb11-8da9-e4434bdf6706.png](http://p03.5ceimg.com/content/f37ba035-6c13-eb11-8da9-e4434bdf6706.png)
使用tozero方式
![f57ba035-6c13-eb11-8da9-e4434bdf6706.png](http://p03.5ceimg.com/content/f57ba035-6c13-eb11-8da9-e4434bdf6706.png)
使用scale方式
对于结果,我是使用了 自定义的一些方式,进行展示。
对于Laplace算子的边缘检测效果其实并不好,对于噪声比较敏感,一般都用 LoG或者DoG进行改进。
Laplcae 算子有一个应用,就是归一化的检测结果,进行 方差计算,可以用在模糊检测上面。
double quality_blur_laplace(const Mat& grayImg){ Mat edge; cv::Laplacian(grayImg, edge, CV_16S, 3);//使用3x3的Laplacian算子卷积滤波 cv::convertScaleAbs(edge, edge);//归到0~255 Mat tmp_m1, tmp_sd1; cv::meanStdDev(edge, tmp_m1, tmp_sd1);//计算均值和方差 double sd1 = tmp_sd1.at(0, 0); //标准差 return sd1;}
Laplace 边缘检测还可用在图像锐化上,其实就是 (边缘 + 原图 = 锐化图)
![fa7ba035-6c13-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/fa7ba035-6c13-eb11-8da9-e4434bdf6706.png)
锐化
使用 的核心是
-1,-1,-1-1, 9,-1-1,-1,-1
还有其他用法,……
这就是 鼎鼎大名的 边缘检测算法。