拉普拉斯-Laplacian

使用中心为5的8邻域拉普拉斯算子与图像卷积可以达到锐化增强图像的目的,拉普拉斯算子如下图所示:

	Mat image = imread("test.jpg", 1);
	imshow("原图像", image);
	Mat imageEnhance;
	Mat kernel = (Mat_<uchar>(3, 3) << 0, -1, 0, 0, 5, 0, 0, -1, 0);
	filter2D(image, imageEnhance, CV_8UC3, kernel);
	imshow("拉普拉斯算子增强效果", imageEnhance);

 拉普拉斯算子还可以表示成模板的形式 

	Mat image = imread("test.jpg");
	imshow("image", image);
	Mat kernel = (Mat_<uchar>(3, 3) << 1, 1, 1, 1, -8, 1, 1, 1, 1);
    //0, 1, 0, 1, -4, 1, 0, 1, 0
    //0, -1, 0, -1, 4, -1, 0, -1, 0
    //-1, 1, -1, 1, 8, -1, -1, 1, -1
	Mat matlaplacian;
	filter2D(image, matlaplacian, CV_8UC3, kernel);
	imshow("matlaplacian", matlaplacian);

 

 参考:https://blog.csdn.net/li_wen01/article/details/72864291

Sobel 算子 ,其基础来自于一个事实,即在边缘部分,像素值出现”跳跃“或者较大的变化。如果在此边缘部分求取一阶导数,你会看到极值的出现。正如下图所示:

 如果在边缘部分求二阶导数会出现什么情况?

 你会发现在一阶导数的极值位置,二阶导数为0。所以我们也可以用这个特点来作为检测图像边缘的方法。 但是, 二阶导数的0值不仅仅出现在边缘(它们也可能出现在无意义的位置),但是我们可以过滤掉这些点

 Laplacian 算子

  1. 从以上分析中,我们推论二阶导数可以用来 检测边缘 。 因为图像是 “2维”, 我们需要在两个方向求导。使用Laplacian算子将会使求导过程变得简单。
  2. Laplacian 算子 的定义:

    Laplace(f) = \dfrac{\partial^{2} f}{\partial x^{2}} + \dfrac{\partial^{2} f}{\partial y^{2}}

  3. OpenCV函数 Laplacian 实现了Laplacian算子。 实际上,由于 Laplacian使用了图像梯度,它内部调用了 Sobel 算子。
Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );

函数接受了以下参数:
src_gray: 输入图像。
dst: 输出图像
ddepth: 输出图像的深度。 因为输入图像的深度是 CV_8U ,这里我们必须定义 ddepth = CV_16S 以避免外溢。
kernel_size: 内部调用的 Sobel算子的内核大小,此例中设置为3。
scale, delta 和 BORDER_DEFAULT: 使用默认值
	Mat image = imread("test.jpg", 1);
	imshow("原图像", image);
	/// 使用高斯滤波消除噪声
	GaussianBlur(image, image, Size(3, 3), 0, 0, BORDER_DEFAULT);
	/// 使用Laplace函数
	Mat imageEnhance;
	int kernel_size = 3;
	int scale = 1;
	int delta = 0;
	int ddepth = CV_32FC3;
	Laplacian(image, imageEnhance, ddepth, kernel_size, scale, delta, BORDER_DEFAULT);
	Mat abs_dst;
	convertScaleAbs(imageEnhance, abs_dst);

	imshow("拉普拉斯算子增强效果", imageEnhance);

 

	Mat src, src_gray, dst;
    /// 装载图像
	src = imread("test.jpg", 1);
	imshow("原图", src);
	/// 使用高斯滤波消除噪声
	GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);
	/// 转换为灰度图
	cvtColor(src, src_gray, CV_RGB2GRAY);
	/// 使用Laplace函数
	Mat abs_dst;
	int kernel_size = 3;
	int scale = 1;
	int delta = 0;
	int ddepth = CV_16S;
	char* window_name = "Laplace Demo";
	Laplacian(src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT);
	convertScaleAbs(dst, abs_dst);
	/// 显示结果
	imshow(window_name, abs_dst);

 参考:

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/laplace_operator/laplace_operator.html

https://blog.csdn.net/dcrmg/article/details/53677739 

https://blog.csdn.net/iefenghao/article/details/84843318##

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值