OpenCV计算机图像视觉基础学习笔记11——详解Laplance算子

继续学习。


Laplance算子也是通过卷积求取图像的边缘。只不过它是用一种求二阶导数的方法。

理论

在二阶导数的时候,最大变化处的值为零即边缘是零值。通过二阶导数计算,依据此理论我们可以计算图像二阶导数,提取边缘。这便是Laplance算子所依靠的数学依据。

这里给出公式。可以看到它是由在x和y方向上的二阶偏导数组成。

Opencv已经提供了相关API cv::Laplancian

处理流程

  • 高斯模糊去噪声(使用GaussianBlur()
  • 转换为灰度图像(使用cvtColor()
  • Laplance算子-二阶导数计算(使用Laplancian
  • 取绝对值(使用convertScaleAbs()
  • 显示结果

    可以看到与做Sobel操作时的有点类似。

简单测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {
Mat src, dst;
src = imread("D:/pic3.png");
if (!src.data) {
cout << "could not load image..." << endl;
return -1;
}
char input_WIN[] = "input image";
char output_WIN[] = "output image";

namedWindow(input_WIN, CV_WINDOW_AUTOSIZE);
imshow(input_WIN, src);

Mat gsrc, edgeimg;
GaussianBlur(src, dst, Size(3, 3), 0, 0);
cvtColor(dst, gsrc, CV_BGR2GRAY);

Laplacian(src, edgeimg, CV_16S, 3); // 后注 参数1应是gsrc
convertScaleAbs(edgeimg, edgeimg);

namedWindow(output_WIN, CV_WINDOW_AUTOSIZE);
imshow(output_WIN, edgeimg);
waitKey(0);
return 0;
}

嗯,当我写到这里时才发现,貌似有些不太对劲,因为我没有传入gsrc,而传入了彩色的src,所以导致效果图看起来怪怪的。

稍作修改。

算子优化

可以看到,用Laplance算子得出的图片噪点较多,我们着手处理解决一下这个问题。

采用什么方法?即我在OpenCV计算机图像视觉基础学习笔记7——基本阈值操作讲到的阈值操作threshold

在输出前增加一行代码即可:threshold(edgeimg, edgeimg, 0, 255, THRESH_OTSU | THRESH_BINARY);


-------------本文结束,感谢您的阅读转载请注明原作者及出处-------------


本文标题:OpenCV计算机图像视觉基础学习笔记11——详解Laplance算子

文章作者:Shawn Zhou

发布时间:2019年08月31日 - 09:08

最后更新:2019年08月31日 - 10:08

原始链接:http://shawnzhou.xyz/2019/08/31/19-08-31-01/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

知识无价,码字不易。对您有用,敬请打赏。金额随意,感谢关心。
0%