Opencv--Laplacian算子

Laplace 算子

目标

  • 使用OpenCV函数cv :: Laplacian来实现Laplace运算符的离散模拟。

理论

  • 在上一个教程中,我们学习了如何使用Sobel操作符。这是基于以下事实:在边缘区域中,像素强度显示“跳跃”或强度的高变化。得到强度的一阶导数,我们观察到边缘的特征是最大值,如图所示:

Opencv--Laplacian算子_第1张图片

  • 和...如果我们采取二阶导数会发生什么?

Opencv--Laplacian算子_第2张图片

您可以观察到二阶导数为零!因此,我们也可以使用此标准来尝试检测图像中的边缘。然而,请注意,零不仅会出现在边缘(它们实际上可以出现在其他无意义的位置); 这可以通过在需要时应用过滤来解决。

 

Laplace Operator

  • 从上面的解释,我们推导出二阶导数可以用来检测边缘。由于图像是“* 2D *”,所以我们需要在两个维度上使用导数。在这里,Laplace Operator很方便。
  • Laplace Operator被定义为:

Laplace Operator算法

  • 拉普拉斯运算符通过函数cv :: Laplacian在OpenCV中实现。事实上,由于拉普拉斯算子使用图像的梯度,所以它在内部调用Sobel算子来执行其计算。

Code

  • 这个程序是做什么的?
  1. 加载图像
  2. 用高斯模糊来消除噪点
  3. 将原始图像转换为灰度
  4. 将Laplace Operator应用于灰度图像
  5. 在窗口中显示结果
  • 代码如下:
#include 
#include 

using namespace cv;

int main(int argc, char** argv) {

	Mat src = imread("C:/usr/opencv-test/Testpictures/sight.jpg"); // by default
	Mat edge_image, gray_src,dst;
	if (src.empty())
	{
		printf("image load failed!\n");
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", src);


	GaussianBlur(src, dst, Size(3, 3), 0, 0);  //高斯模糊,去噪,使平滑
	cvtColor(dst, gray_src, CV_BGR2GRAY); //转为灰度

	//	Laplacian算子								 
	Laplacian(gray_src, edge_image, CV_16S, 3);
	convertScaleAbs(edge_image, edge_image);
	

	imshow("edge_image", edge_image);

	//imshow("output image", gray_src);

	waitKey(0);
	return 0;

}

 

结果

  • 在编译上面的代码之后,我们可以运行它作为参数作为图像的路径。例如,使用作为输入:

Opencv--Laplacian算子_第3张图片

 

  • 我们得到以下结果:
  • Opencv--Laplacian算子_第4张图片

你可能感兴趣的:(嵌入式)