Marr-Hildresh边缘检测算子,用于解决边缘检测的核心问题---定位精度和抑制噪声。Marr-Hildreth算子以高斯函数为平滑算子,结合拉普拉斯算子提取二阶导数的零交叉理论进行边缘检测。边缘检测中灰度变化与图像尺寸无关,检测算子可为不同尺度,灰度变化梯度在一阶导数的极值点(波峰或波谷),或在二阶导数为零的交叉点。
由于噪声点对边缘检测有一定的影响,所以效果更好的边缘检测器是LoG算子。它把高斯平滑滤波器和拉普拉斯锐化滤波器结合起来,先平滑掉噪声,再进行边缘检测,所以效果会更好。
Marr-Hildreth边缘检测代码:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
void marrEdge(const Mat src, Mat& result, int kerValue, double delta)
{
//计算LoG算子
Mat kernel;
//半径
int kerLen = kerValue / 2;
kernel = Mat_<double>(kerValue, kerValue);
//滑窗
for (int i = -kerLen; i <= kerLen; i