OpenCV如何实现拉普拉斯算子的离散模拟

 返回:OpenCV系列文章目录(持续更新中......)

上一篇:OpenCV的Sobel 衍生品
下一篇 :OpenCV 如何实现边缘检测器

目标

在本教程中,您将学习如何:

  • 使用 OpenCV 函数 Laplacian() 实现拉普拉斯算子的离散模拟。

理论

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

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

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

拉普拉斯算子

  1. 从上面的解释中,我们推断出二阶导数可用于检测边。由于图像是“*2D*”的,我们需要在两个维度上取导数。在这里,拉普拉斯运算符派上用场。
  2. 拉普拉斯运算符的定义如下:

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

C++代码
 

  1. 这个程序是做什么的?
    • 加载图像
    • 通过应用高斯模糊去除噪点,然后将原始图像转换为灰度
    • 将拉普拉斯运算符应用于灰度图像并存储输出图像
    • 在窗口中显示结果教程代码如下所示。您也可以从这里下载
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
 
using namespace cv;
 
int main( int argc, char** argv )
{
 // Declare the variables we are going to use
 Mat src, src_gray, dst;
 int kernel_size = 3;
 int scale = 1;
 int delta = 0;
 int ddepth = CV_16S;
 const char* window_name = "Laplace Demo";
 
 const char* imageName = argc >=2 ? argv[1] : "lena.jpg";
 
 src = imread( samples::findFile( imageName ), IMREAD_COLOR ); // Load an image
 
 // Check if image is loaded fine
 if(src.empty()){
 printf(" Error opening image\n");
 printf(" Program Arguments: [image_name -- default lena.jpg] \n");
 return -1;
 }
 
 // Reduce noise by blurring with a Gaussian filter ( kernel size = 3 )
 GaussianBlur( src, src, Size(3, 3), 0, 0, BORDER_DEFAULT );
 
 cvtColor( src, src_gray, COLOR_BGR2GRAY ); // Convert the image to grayscale
 
 Mat abs_dst;
 Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );
 
 // converting back to CV_8U
 convertScaleAbs( dst, abs_dst );
 
 imshow( window_name, abs_dst );
 waitKey(0);
 
 return 0;
}

解释

声明变量

 // Declare the variables we are going to use
 Mat src, src_gray, dst;
 int kernel_size = 3;
 int scale = 1;
 int delta = 0;
 int ddepth = CV_16S;
 const char* window_name = "Laplace Demo";

加载源图像

 const char* imageName = argc >=2 ? argv[1] : "lena.jpg";
 
 src = imread( samples::findFile( imageName ), IMREAD_COLOR ); // Load an image
 
 // Check if image is loaded fine
 if(src.empty()){
 printf(" Error opening image\n");
 printf(" Program Arguments: [image_name -- default lena.jpg] \n");
 return -1;
 }

降低噪音

 // Reduce noise by blurring with a Gaussian filter ( kernel size = 3 )
 GaussianBlur( src, src, Size(3, 3), 0, 0, BORDER_DEFAULT );

灰度

 cvtColor( src, src_gray, COLOR_BGR2GRAY ); // Convert the image to grayscale

拉普拉斯算子

 Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );
  • 参数是:
    • src_gray:输入图像。
    • dst:目标(输出)图像
    • ddepth:目标图像的深度。由于我们的输入是CV_8U因此我们定义 ddepth = CV_16S 以避免溢出
    • kernel_size:要在内部应用的 Sobel 算子的内核大小。在此示例中,我们使用 3。
    • scaledelta 和 BORDER_DEFAULT:我们将它们保留为默认值。

将输出转换为 <em>CV_8U</em> 图像

 // converting back to CV_8U
 convertScaleAbs( dst, abs_dst );

显示结果

 imshow( window_name, abs_dst );
 waitKey(0);

结果

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

  1. 我们得到以下结果。请注意,树木和奶牛的轮廓是如何大致清晰地定义的(除了强度非常相似的区域,即奶牛头部周围)。另外,请注意,树木后面的房子屋顶(右侧)是臭名昭著的标记。这是因为该区域的对比度较高。

参考文献:

1、 《Laplace Operator》---Ana Huamán


最近更新

  1. TCP协议是安全的吗?

    2024-04-24 06:24:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-24 06:24:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-24 06:24:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-24 06:24:04       20 阅读

热门阅读

  1. spring boot项目怎么预防CSRF攻击

    2024-04-24 06:24:04       13 阅读
  2. 【MongoDB】--MongoDB的组合索引

    2024-04-24 06:24:04       13 阅读
  3. mongodb分片集群搭建

    2024-04-24 06:24:04       13 阅读
  4. 【八股】Redis篇

    2024-04-24 06:24:04       12 阅读
  5. 代码随想录(番外)图论2

    2024-04-24 06:24:04       12 阅读
  6. Python自动化系列---Python基础

    2024-04-24 06:24:04       15 阅读
  7. 本地存储、自定义事件、全局事件总线

    2024-04-24 06:24:04       12 阅读
  8. Node.js在前端的妙用:打造更出色的Web体验

    2024-04-24 06:24:04       14 阅读
  9. Halide 高效的图像处理语言 简化图像编程

    2024-04-24 06:24:04       14 阅读
  10. 【Kotlin】Flow简介

    2024-04-24 06:24:04       15 阅读
  11. python制作小游戏2

    2024-04-24 06:24:04       15 阅读