8.12DoG (Difference of Gaussians)

news2024/10/2 10:34:02

基本概念

不同尺度的高斯模糊图像之间的差异(DoG),用于边缘检测。函数: cv::GaussianBlur() 结合 cv::Laplacian() 或者自定义DoG实现。

在OpenCV中并没有直接提供一个名为“DoG”(Difference of Gaussians)的函数,但是你可以通过组合使用高斯模糊(Gaussian Blur)来实现DoG的效果。DoG技术通常用于边缘检测和特征检测,如SIFT(Scale-Invariant Feature Transform)特征提取算法中。

DoG的基本思想是在不同的尺度上对图像应用高斯模糊,然后计算两个不同尺度的高斯模糊图像之间的差异。这个差异图像是在某个尺度上图像边缘的良好近似。

实现步骤
应用高斯模糊:对输入图像应用两次高斯模糊,每次使用不同的核大小(不同的σ值)。
计算差异:从两个高斯模糊图像中减去较小σ值对应的图像得到差异图像。
函数原型
虽然没有直接的DoG函数,但我们可以通过调用cv::GaussianBlur函数来实现所需的效果:

void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT);

使用示例

下面是一个使用C++和OpenCV实现DoG效果的示例代码:

#include "pch.h"

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	// 读取图像文件
	cv::Mat img = cv::imread("874.png", cv::IMREAD_GRAYSCALE);

	if (img.empty())
	{
		std::cout << "Error: Image not found or unable to read the image." << std::endl;
		return -1;
	}

	// 定义高斯核大小和σ值
	int kernel_size1 = 3; // 第一个高斯模糊核大小
	int kernel_size2 = 5; // 第二个高斯模糊核大小
	double sigma1 = 0.0;  // σ值可以设为0让OpenCV自动计算
	double sigma2 = 0.0;  // σ值可以设为0让OpenCV自动计算

	// 创建输出图像
	cv::Mat img_gauss1, img_gauss2, dog;

	// 对图像应用高斯模糊
	cv::GaussianBlur(img, img_gauss1, cv::Size(kernel_size1, kernel_size1), sigma1);
	cv::GaussianBlur(img, img_gauss2, cv::Size(kernel_size2, kernel_size2), sigma2);

	// 计算DoG
	cv::absdiff(img_gauss2, img_gauss1, dog); // 计算差异并取绝对值

	// 显示原图和DoG图像
	cv::namedWindow("Original Image", cv::WINDOW_NORMAL);
	cv::imshow("Original Image", img);

	cv::namedWindow("DoG Image", cv::WINDOW_NORMAL);
	cv::imshow("DoG Image", dog);

	// 等待用户按键后退出
	cv::waitKey(0);

	return 0;
}

说明
读取图像:首先读取一张灰度图像。
定义核大小和σ值:定义两个不同的高斯核大小,通常较大的核对应较大的σ值。
应用高斯模糊:使用cv::GaussianBlur函数分别对图像应用两个不同大小的高斯模糊。
计算差异:使用cv::absdiff函数计算两个模糊图像之间的差异。cv::absdiff函数计算两个图像的元素差,并返回绝对值。
显示结果:显示原始图像和DoG图像。


说明
读取图像:首先读取一张灰度图像。
定义核大小和σ值:定义两个不同的高斯核大小,通常较大的核对应较大的σ值。
应用高斯模糊:使用cv::GaussianBlur函数分别对图像应用两个不同大小的高斯模糊。
计算差异:使用cv::absdiff函数计算两个模糊图像之间的差异。cv::absdiff函数计算两个图像的元素差,并返回绝对值。
显示结果:显示原始图像和DoG图像。

运行结果

这个简单的例子展示了如何在OpenCV中通过组合不同的函数来实现DoG效果。你可以根据需要调整高斯核大小和σ值来获得不同的效果。在实际应用中,可能还需要进一步处理DoG图像,例如阈值化或非极大值抑制等操作,以更好地突出边缘或特征。

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

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

相关文章

【学术会议征稿】第四届人工智能、机器人和通信国际会议(ICAIRC 2024)

第四届人工智能、机器人和通信国际会议&#xff08;ICAIRC 2024&#xff09; 2024 4th International Conference on Artificial Intelligence, Robotics, and Communication 第四届人工智能、机器人和通信国际会议&#xff08;ICAIRC 2024&#xff09;定于2024年12月27-29日…

css 自定义滚动条样式

* { scrollbar-color: auto !important; scrollbar-width: auto; } //滚动条宽高 ::-webkit-scrollbar { width: 4px; height: 4px; background: transparent; } ::-webkit-scrollbar-thumb { //滑块部分 border-radius: 5px; background-color: rgba(32, 224, 254, 1); } ::-…

【Python报错已解决】TypeError: can only concatenate str (not “float“) to str

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

docker compose的使用

docker compose 1.概述 是 Docker 官方提供的一款开源工具&#xff0c;主要用于简化在单个主机上定义和运行多容器 Docker 应用的过程。它的核心作用是容器编排&#xff0c;使得开发者能够在一个统一的环境中以声明式的方式管理多容器应用的服务及其依赖关系。 也就是说Docker…

用 Django 5 快速生成一个简单 进销存 系统 添加 个打印 按钮

一、前置条件&#xff1a; 1.安装好python 【关联网址】 2. 安装好vscode 【关联网址】 插件 3. 登陆海螺AI【关联网址】 4. 安装好 pip install django 【关联网址】 pip install django -i https://mirrors.aliyun.com/pypi/simple/ 二、开始生成 1. 打开vscode 打开…

[数据库实验五] 审计及触发器

一、实验目的与要求&#xff1a; 1.了解MySQL审计功能及实现方式 2.掌握触发器的工作原理、定义及操作方法 二、实验内容&#xff1a; 注&#xff1a; 在同一个触发器内编写多行代码&#xff0c;需要用结构begin ……end 函数current_user()获得当前登录用户名 1.自动保存…

Linux 应用层自定义协议与序列化

文章目录 一、应用层1、协议2、序列化 && 反序列化3、通过Json库进行数据的序列化 && 反序列化Json::Value类Json::Reader类Json::Writer类 二、为什么read、write、recv、send和Tcp支持全双工&#xff1f;发数据的本质&#xff1a;tcp支持全双工通信的原因&am…

gitlab-runner集成CI/CD完整项目部署

目录 1.环境安装 2.gitlab代码仓库搭建 3.gitlab-runner-安装以及注册 4..gitlab-ci.yml脚本 5.脚本说明 6.build.sh 7.test.sh 8. deploy.sh 9.运行流水线 10.选择流水线分支 11.查看运行阶段 12.查看运行日志 13.查看服务器真实日志 1.环境安装 确保服务器的Java环…

Python_异常机制

软件程序在运行过程中&#xff0c;非常可能遇到刚刚提到的这些问题&#xff0c;我们称之为异常&#xff0c;英文是&#xff1a;Exception&#xff0c;意思是例外。遇到这些例外情况&#xff0c;或者叫异常&#xff0c;我们怎么让写的程序做出合理的处理&#xff0c;安全的退出&…

Footprint Growthly Quest 工具:赋能 Telegram 社区实现 Web3 飞速增长

作者&#xff1a;Stella L (stellafootprint.network) 在 Web3 的快节奏世界里&#xff0c;社区互动是关键。而众多 Web3 社区之所以能够蓬勃发展&#xff0c;很大程度上得益于 Telegram 平台。正因如此&#xff0c;Footprint Analytics 精心打造了 Growthly —— 一款专为 Tel…

Tkinter制作登录界面以及登陆后页面切换

Tkinter制作登录界面以及登陆后页面切换 前言序言1. 由来2. 思路3. 项目结构描述4. 项目实战1. 登录界面实现&#xff08;代码&#xff09;2. 首页界面实现&#xff08;代码&#xff09;3. 打包build.py&#xff08;与main.py同级目录&#xff09;4. 打包安装包 前言 本帖子&a…

【nrm】npm 注册表管理器

nrm是什么 nrm&#xff08;NPM Registry Manager&#xff09;是一个用于管理 Node.js 包管理器&#xff08;如 npm 和 Yarn&#xff09;的注册表工具。它可以帮助用户快速切换不同的 npm 源&#xff0c;以便于提高包安装的速度和效率&#xff0c;特别是在中国大陆地区&#xf…

Ubuntu23.10下处理libncurses5-dev包的安装问题

Ubuntu23.10下处理libncurses5-dev包的安装问题 导语环境准备问题和解决方案总结参考文献 导语 使用Ubuntu23.10的时候&#xff0c;遇到需要termios的场景&#xff0c;结果发现无论是codeblocks还是系统本身的gcc都无法找到term.h和curse.h&#xff0c;网上找了很多解决方案都…

了解云计算工作负载保护的重要性,确保数据和应用程序安全

云计算de小白 云计算技术的快速发展使数据和应用程序安全成为一种关键需求&#xff0c;而不仅仅是一种偏好。随着越来越多的客户公司将业务迁移到云端&#xff0c;保护他们的云工作负载&#xff08;指所有部署的应用程序和服务&#xff09;变得越来越重要。云工作负载保护&…

【stm32】TIM定时器输出比较-PWM驱动LED呼吸灯/舵机/直流电机

TIM定时器输出比较 一、输出比较简介1、OC&#xff08;Output Compare&#xff09;输出比较2、PWM简介3、输出比较通道(高级)4、输出比较通道(通用)5、输出比较模式6、PWM基本结构配置步骤&#xff1a;程序代码&#xff1a;PWM驱动LED呼吸灯 7、参数计算8、舵机简介程序代码&am…

nginx 安装(Centos)

nginx 安装-适用于 Centos 7.x [rootiZhp35weqb4z7gvuh357fbZ ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.9.2009 (Core) Release: 7.9.2009 Codename: Core# 创建文件…

大模型训练:K8s 环境中数千节点存储最佳实践

今天这篇博客来自全栈工程师朱唯唯&#xff0c;她在前不久举办的 KubeCon 中国大会上进行了该主题分享。 Kubernetes 已经成为事实的应用编排标准&#xff0c;越来越多的应用在不断的向云原生靠拢。与此同时&#xff0c;人工智能技术的迅速发展&#xff0c;尤其是大型语言模型&…

智慧政务助力实现服务民生新突破

在数字化转型的浪潮中&#xff0c;中国移动紧密结合人工智能&#xff08;AI&#xff09;技术&#xff0c;推动政务服务的智能化升级。近日&#xff0c;中国移动正式发布政务大模型3.0版本&#xff0c;以科技创新提升政务效率&#xff0c;实现服务民生的新突破。 为什么…

【Android】页面启动耗时统计流程梳理

文章基于Android 11 写在前面&#xff1a; 最近的文章都会放流程图&#xff0c;时序图之类的图片&#xff0c;解释下为什么这么做&#xff1a; 图片的好处&#xff1a; 流程清晰&#xff0c;一目了然很多代码&#xff0c;如同老太太的裹脚布&#xff0c;又臭又长。影响理解&a…

Python的Pandas库学习指南

应用场景 Pandas库因其强大的数据处理和分析能力&#xff0c;在数据科学和数据分析领域有着广泛的应用。 1. 数据清洗 处理缺失数据&#xff1a;通过删除或填充缺失值来清洗数据。数据类型转换&#xff1a;将数据转换为合适的格式&#xff0c;例如将日期字符串转换为日期类型…