美文网首页
OpenCV:十五、Laplance算子

OpenCV:十五、Laplance算子

作者: 马洪滔 | 来源:发表于2021-01-21 14:42 被阅读0次

    前言

    在上一章中描述了Sobel边缘检测算子,详细描述可点击查看(https://www.jianshu.com/writer#/notebooks/47386368/notes/82286161)

    目标

    本章中,将学习:

    • Laplance算子理论
    • 相关API
    • 代码演示

    Laplance算子理论

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


      拉普拉斯算子理论.png

      对应的算子梯度如下:


      拉普拉斯梯度.png
      还是上面这个图像,我们求一阶导数之后,还能求其二级导数。这个时候,当初图像上变化最大的位置,二阶导数为0,首先我们看一下离散的一阶导数的计算方法:
      一阶导数.png

      再对一阶导数求导得出二阶导数:


      二阶导数.png
      因为图像有行列两个方向,所以要两个方向分别求导数:
      梯度.png
      拉普拉斯算子由OpenCV函数cv::Laplacian实现。实际上,由于拉普拉斯算子使用图像的梯度,因此它在内部调用Sobel算子来执行其计算。
    • 处理流程
      1.高斯模糊 - 去噪声GaussianBlur()
      2.转换为灰度图像cvtColor()
      3.拉普拉斯 - 二阶导数计算Laplacian()
      4.取绝对值convertScaleAbs()
      5.显示结果

    相关API

    void Laplacian( 
        InputArray src, 
        OutputArray dst, 
        int ddepth,  
        int ksize = 3,
        double scale = 1,                       
        double delta = 0, 
        int borderType = BORDER_DEFAULT 
    );
    
    • InputArray类型的src ,输入图像。
    • OutputArray类型的dst ,输出图像,图像的大小、通道数和输入图像相同。
    • int类型的ddepth,目标图像的所需深度。
    • int类型的ksize,用于计算二阶导数滤波器的孔径大小。大小必须是正数和奇数。
    • double类型的scale,计算拉普拉斯值的可选比例因子。默认情况下,不应用缩放。
    • double类型的delta,在将筛选的像素存储到dst中之前添加到这些像素的可选值。说的有点专业了其实就是给所选的像素值添加一个值delta。
    • int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT。

    代码演示

    int main(int argc, char** argv) {
        Mat src, dst;
        src = imread(STRPAHT2);
        if (!src.data) {
            printf("could not load image");
        }
    
        //降噪
        Mat gray_src, edge_image;
        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);
        //二值化
        threshold(edge_image, edge_image, 0, 255, THRESH_OTSU | THRESH_BINARY);
        imshow("Laplaiance", edge_image);
    
        waitKey(0);
        return 0;
    }
    
    效果图.png

    相关文章

      网友评论

          本文标题:OpenCV:十五、Laplance算子

          本文链接:https://www.haomeiwen.com/subject/texkzktx.html