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 useMat 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 fineif(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 grayscaleMat abs_dst;Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );// converting back to CV_8UconvertScaleAbs( dst, abs_dst );imshow( window_name, abs_dst );waitKey(0);return 0;
}

解释

声明变量

 // Declare the variables we are going to useMat 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 fineif(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_8UconvertScaleAbs( dst, abs_dst );

显示结果

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

结果

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

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

参考文献:

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/2608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Yolov5 v7.0目标检测——详细记录环境配置、自定义数据处理、模型训练与常用错误解决方法(数据集为河道漂浮物)

1. Yolov5 YOLOv5是是YOLO系列的一个延伸&#xff0c;其网络结构共分为&#xff1a;input、backbone、neck和head四个模块&#xff0c;yolov5对yolov4网络的四个部分都进行了修改&#xff0c;并取得了较大的提升&#xff0c;在input端使用了Mosaic数据增强、自适应锚框计算、自…

C++ 二叉搜索树

文章目录 二叉搜索树的概念二叉搜索树的性质二叉搜索树的模拟实现封装框架添加操作查找操作删除操作 二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都…

PD虚拟机和Crossover软件有什么不同?谁更强大?

PD虚拟机&#xff08;Parallels Desktop&#xff09;和Crossover软件都是为Mac用户提供在macOS上运行Windows应用程序的能力&#xff0c;但它们在设计理念、功能和使用场景上存在一些差异。 PD虚拟机&#xff08;Parallels Desktop&#xff09;的特点&#xff1a; 1. 全面的虚…

MySQL中的并发控制,读写锁,和锁的粒度

MySQL中的并发控制&#xff0c;读写锁&#xff0c;和锁的粒度 并发控制的概述 在数据库系统中&#xff0c;并发控制是一种用于确保当多个用户同时访问数据库时&#xff0c;系统能够提供数据的一致性和隔离性的机制。MySQL支持多种并发控制技术&#xff0c;其中包括锁机制、多…

用友 GRP-U8 fastjson远程代码执行漏洞复现(XVE-2024-8863)

0x01 产品简介 用友GRP-U8R10行政事业内控管理软件是用友公司专注于国家电子政务事业,基于云计算技术所推出的新一代产品,是我国行政事业财务领域最专业的政府财务管理软件。 0x02 漏洞概述 用友 GRP-U8 R10系列版本 VerifyToken 接口存在低版本fastjson反序列化漏洞,未经…

用户请求经过哪些处理(公网)

DNS服务器之间协作&#xff1a; 递归DNS查询&#xff1a;用户的请求首先发送到递归DNS服务器。 查询根DNS服务器&#xff1a;递归DNS服务器查询根DNS服务器&#xff0c;以找到管理.com顶级域的TLD DNS服务器。 查询TLD DNS服务器&#xff1a;根DNS服务器响应带有TLD DNS服务器…

centos7.6上安装mysql7.6 完整过程

安装过程&#xff1a; 参考&#xff1a;https://blog.csdn.net/qq_45103475/article/details/123151050 查找mysql [rootbogon ~]# whereis mysql mysql: /usr/lib64/mysql /usr/share/mysql 删除目录 [rootbogon ~]# rm -rf /usr/lib64/mysql [rootbogon ~]# whereis mysql m…

计算机服务器中了devicdata勒索病毒怎么处理,devicdata勒索病毒解密工具流程

随着网络技术的不断发展与应用&#xff0c;越来越多的企业离不开网络&#xff0c;通过网络可以开展各项工作业务&#xff0c;网络也为企业的生产运营提供各类极大便利&#xff0c;大大提高了生产效率&#xff0c;但网络在为企业提供便利的同时&#xff0c;也为企业的数据安全带…

AJAX——案例

1.商品分类 需求&#xff1a;尽可能同时展示所有商品分类到页面上 步骤&#xff1a; 获取所有的一级分类数据遍历id&#xff0c;创建获取二级分类请求合并所有二级分类Promise对象等待同时成功后&#xff0c;渲染页面 index.html代码 <!DOCTYPE html> <html lang&qu…

探索SAVI:土壤调整植被指数的意义与应用

​随着遥感技术的不断发展&#xff0c;植被指数成为了评估地表植被覆盖和健康状况的重要工具之一。其中&#xff0c;SAVI&#xff08;Soil Adjusted Vegetation Index&#xff0c;土壤调整植被指数&#xff09;作为一种针对土壤表面反射率进行调整的植被指数&#xff0c;在土地…

Python 基础、流程、容器、函数

一、基础语法 1.1 前言 1.1.1 Python简介 Python是一门编程语言&#xff0c;Python的作者是Guido van Rossum&#xff08;龟叔&#xff09; Python优点&#xff1a;简单易学 Python与嵌入式、集成电路行业 强大的库和工具生态系统&#xff1a;Python拥有广泛而强大的库和…

深入理解高级加密标准(Advanced Encryption Standard)

title: 深入理解高级加密标准&#xff08;Advanced Encryption Standard&#xff09; date: 2024/4/23 20:04:36 updated: 2024/4/23 20:04:36 tags: AES概述加密原理优势特点算法详解安全性应用实践案例分析 第一章&#xff1a;AES概述 AES的历史和背景 历史&#xff1a; 高…

MySQL数据库精讲001——概述

MySQL数据库精讲001——概述 文章目录 MySQL数据库精讲001——概述1.1 安装1.1.1 版本1.1.2 安装一、下载二、解压三、配置1. 添加环境变量2. 初始化MySQL3. 注册MySQL服务4. 启动MySQL服务5. 修改默认账户密码 四、登录MySQL五、卸载MySQL 1.1.3 连接1.1.4 企业使用方式(了解)…

华为数通方向HCIP-DataCom H12-821题库(多选题:321-340)

第321题 关于OSPF的命令描述,不正确的是: A、stub区域和totally stub区域配置了no-summary参数 B、OSPFv2和OSPF v3配置接口命令的区别是OSPF V2可以使用network命令,而OSPFv3直接 C、在接口上使能stubrouter命令用来配置次路由器为stub路由器,stub路由器可以与非stub路由 …

mac安装nvm管理node(手残流,git下载)

1. 准备 首先电脑里得有brew、git、vscode&#xff0c;看这里安装brew、git&#xff0c;看这里安装vscode。 我本人比较low&#xff0c;mac命令也记不熟&#xff0c;本篇就是git下载nvm&#xff0c;vscode看配置&#xff0c;省心不动脑子就可以了。 2. 清理node 如果mac里没…

javaScript中的作用域和作用域链

作用域&#xff08;Scope&#xff09; 什么是作用域 作用域是在运行时代码中的某些特定部分中变量、对象和函数的可访问性。 换句话说&#xff0c;作用域决定了代码区块中变量和其他资源的可见性。 示例&#xff1a; function outFun2() {var inVariable "内层变量2…

边缘计算是什么?

一、边缘计算是什么&#xff1f; 边缘计算是一种分布式计算范式&#xff0c;它将计算任务和数据存储从中心化的云端推向网络的边缘&#xff0c;即设备或终端&#xff0c;以提高响应速度和降低网络带宽需求。在边缘计算中&#xff0c;数据在源头附近进行处理和分析&#x…

OKR已死?是中华田园KPI?

近年来&#xff0c;关于OKR&#xff08;Objectives and Key Results&#xff0c;目标与关键成果&#xff09;和KPI&#xff08;Key Performance Indicators&#xff0c;关键绩效指标&#xff09;的讨论不绝于耳。有人宣称OKR已死&#xff0c;认为KPI才是更符合中国企业的绩效管…

Unity3d的海盗王地图

一直以来&#xff0c;都想将海盗王的地图搬到手游unity3d上面。 经过漫长时间的研究&#xff0c;终于实现了当初的想法。

网络编程-libuv介绍

官网 https://libuv.org/ 概要 libuv是一个强大的跨平台异步I/O库&#xff0c;主要用于构建高性能、可扩展的网络应用程序。它最初是为Node.js开发的&#xff0c;用于处理Node.js的异步I/O操作&#xff0c;但随着时间的推移&#xff0c;它也被广泛应用于其他系统&#xff0…