OpenCV图像滤波(17)计算图像梯度函数Sobel()的使用

news2024/12/27 17:44:44
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

Sobel()函数用于计算图像的一阶、二阶、三阶或混合导数。它使用扩展的Sobel算子来执行这一任务。
在所有情况下,除了一种情况之外,都使用 ksize×ksize 的可分离核来计算导数。当 ksize = 1 时,使用 3×1 或 1×3 的核(也就是说,不进行高斯平滑)。ksize = 1 只能用于计算一阶或二阶的 x- 或 y- 导数。

还有一个特殊的值 ksize = FILTER_SCHARR (-1),它对应于 3×3 的 Scharr 滤波器,该滤波器可能比 3×3 的 Sobel 算子提供更准确的结果。Scharr 算子的核为:
[ − 3 0 3 − 10 0 10 − 3 0 3 ] \begin{bmatrix} -3&0&3 \\ -10&0&10 \\ -3&0&3 \end{bmatrix} 31030003103
对于 x-导数,或转置后用于 y-导数。该函数通过将图像与适当的核进行卷积来计算图像导数:
dst = ∂ x o r d e r + y o r d e r src ∂ x x o r d e r ∂ y y o r d e r \texttt{dst} = \frac{\partial^{xorder+yorder} \texttt{src}}{\partial x^{xorder} \partial y^{yorder}} dst=xxorderyyorderxorder+yordersrc
Sobel 算子结合了高斯平滑和微分,因此结果或多或少对噪声具有抵抗力。大多数情况下,该函数被调用时使用 (xorder = 1, yorder = 0, ksize = 3) 或 (xorder = 0, yorder = 1, ksize = 3) 来计算第一阶的 x- 或 y- 图像导数。第一种情况对应的核为:
[ − 1 0 1 − 2 0 2 − 1 0 1 ] \begin{bmatrix}-1&0&1 \\ -2&0&2 \\ -1&0&1\end{bmatrix} 121000121
第二种情况对应的核为:
[ − 1 − 2 − 1 0 0 0 1 2 1 ] \begin{bmatrix} -1&-2&-1 \\ 0&0&0 \\ 1&2&1 \end{bmatrix} 101202101

Sobel()函数是OpenCV库中的一个函数,用于计算图像的梯度,通常被用于边缘检测。该函数通过对图像应用Sobel算子来估计图像强度函数的梯度。

函数原型

void cv::Sobel
(
	InputArray 	src,
	OutputArray 	dst,
	int 	ddepth,
	int 	dx,
	int 	dy,
	int 	ksize = 3,
	double 	scale = 1,
	double 	delta = 0,
	int 	borderType = BORDER_DEFAULT 
)		

参数

  • 参数src 输入图像。
  • 参数dst 输出图像,与输入图像具有相同的尺寸和通道数。
  • 参数ddepth 输出图像深度, 参见combinations; 对于8位输入图像,这将导致导数被截断。
  • 参数dx x方向上的导数阶数。
  • 参数dy y方向上的导数阶数。
  • 参数ksize 扩展的Sobel核的大小;必须是1, 3, 5, 或 7。
  • 参数scale 计算得到的导数值的可选缩放因子;默认情况下,不应用任何缩放(参见 getDerivKernels 获取更多详情)。
  • 参数delta 在将结果存储到 dst 中之前添加到结果中的可选偏移量。
  • 参数borderType 像素外推方法,参见 BorderTypes。BORDER_WRAP 不受支持。

示例代码

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    // 加载图像
    Mat grayImage = imread( "/media/dingxin/data/study/OpenCV/sources/images/erik.jpg", IMREAD_GRAYSCALE );
    if ( grayImage.empty() )
    {
        std::cout << "Error: Image cannot be loaded!" << std::endl;
        return -1;
    }

    cv::Size sz2Sh( 400, 600 );
    cv::resize( grayImage, grayImage, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );

    // 创建输出图像
    Mat gradX, gradY;
    Mat abs_gradX, abs_gradY;

    // 计算x方向上的梯度
    Sobel( grayImage, gradX, CV_16S, 1, 0, 3 );  // 一阶 x-导数
    convertScaleAbs( gradX, abs_gradX );

    // 计算y方向上的梯度
    Sobel( grayImage, gradY, CV_16S, 0, 1, 3 );  // 一阶 y-导数
    convertScaleAbs( gradY, abs_gradY );

    // 显示结果
    imshow("origianl image", grayImage);
    imshow( "Gradient X", abs_gradX );
    imshow( "Gradient Y", abs_gradY );

    waitKey( 0 );

    return 0;
}

运行结果

在这里插入图片描述

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

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

相关文章

微信小程序 ==== 半屏打开小程序

目录 打开半屏小程序 调用流程 打开半屏小程序 半屏小程序环境判断 返回原小程序 使用限制 wx.openEmbeddedMiniProgram 功能描述 参数 wx.navigateBackMiniProgram 功能描述 示例代码 Object wx.getEnterOptionsSync() 功能描述 返回值 返回有效 referrerInfo…

数据可视化之旅,从数据洞察到图表呈现,可视化的产品设计

图表作为数据可视化的重要工具&#xff0c;是对原始数据进行深度加工与解读的有效手段&#xff0c;它助力我们洞悉数据背后的真相&#xff0c;使我们能更好地适应这个由数据驱动的世界。无论是工作汇报、项目实施、产品设计、后台界面还是数据大屏展示&#xff0c;图表都扮演着…

Transformer目标检测 | DETR论文解读

0. 前言 DETR是首个将Transformer应用到2D目标检测任务中的算法&#xff0c;由Facebook于2020年在论文《End-to-End Object Detection with Transformers》中提出。与传统目标检测算法不同的是&#xff0c;DETR将目标检测任务视为一个直接的集合预测问题&#xff0c;采用基于集…

Java同城宠物兼职遛狗系统小程序源码

&#x1f43e;【同城新宠】遛狗兼职大揭秘&#xff01;一键解锁“遛狗系统”&#xff0c;狗狗开心你也赚&#xff01;✨ &#x1f43e; 开篇&#xff1a;告别孤单&#xff0c;狗狗也需要社交圈&#xff01;&#x1f46d; Hey小伙伴们&#xff0c;你家的小毛球是不是总在家里闷…

周杰伦又救了腾讯音乐一次

文丨郭梦仪 “一个周杰伦撑起了半个腾讯音乐”&#xff0c;近十年前对腾讯音乐的调侃&#xff0c;如今依然成立。 作为中国乐坛霸主&#xff0c;腾讯音乐&#xff08;简称TME&#xff0c;1698.HK&#xff09;过去打下的音乐版权江山&#xff0c;似乎已成其取之不尽的金矿&…

Github-vscode联合使用保姆及教程

Github-VScode联合使用保姆及教程 update: 2024/8/10 _Karen bluu 文章目录 Github-VScode联合使用保姆及教程1.Git 和 Github分别是什么2.安装2.1 git安装2.2 vscode安装 3. 使用Github3.1 拉取项目3.1.1 拉取方法3.1.2 注意事项 3.2 寻找合适的项目3.3 创建自己的github仓库3…

【Python学习-UI界面】PyQt5 小部件12-QStackedWidget 多页显示

功能和 QTabWidget 类似&#xff0c;它也有助于高效利用窗口的客户区域。 QStackedWidget 提供了一个窗口堆栈&#xff0c;每次只能查看一个窗口。它是建立在 QStackedLayout 之上的一个有用的布局。 样式如下: 右键可以变型为QTabWidget

养生生活视频素材去哪里找?养生系列视频素材网站分享

如何寻找高质量的养生视频素材。无论您是刚入行的新手&#xff0c;还是拥有众多粉丝的资深创作者&#xff0c;优质的养生视频素材都是吸引观众的关键。接下来&#xff0c;我将介绍一些顶级平台&#xff0c;帮助您轻松获取各类养生视频素材。 蛙学网 首先推荐的平台是蛙学网。这…

redisssion分布式锁

分布式锁的问题 基于setnx的分布式锁实现起来并不复杂&#xff0c;不过却存在一些问题。 锁误删问题 第一个问题就是锁误删问题&#xff0c;目前释放锁的操作是基于DEL&#xff0c;但是在极端情况下会出现问题。 例如&#xff0c;有线程1获取锁成功&#xff0c;并且执行完任…

Vue2 和 Vue3中EventBus使用差异

目录 前言一、EventBus 和 mitt 的对比二、Vue 2 中的 EventBus 使用实例2.1 创建 EventBus2.2 在组件中使用 EventBus2.2.1 组件 A - 发送事件2.2.2 组件 B - 监听事件 2.3 注意事项 三、Vue 3 中的 mitt 使用实例3.1 安装 mitt3.2 创建 mitt 实例3.3 在组件中使用 mitt3.3.1 …

【笔记】MSPM0G3507开发环境搭建——MSPM0G3507与RT_Thread(一)

环境搭建大体过程就不再赘述了&#xff0c;本文记录一下我刚开始搭建环境时踩过的坑以及一些不太懂的地方。后边会出MSPM0G3507RT-Thread 3.1.5相关的教程&#xff0c;感兴趣记得点点关注。 本篇使用立创地猛星MSPM0G3507开发板 参考文章&#xff1a; 【学习笔记一】搭建MSPM…

几种Word Embedding技术详解

NLP 中的词嵌入是一个重要术语&#xff0c;用于以实值向量的形式表示用于文本分析的单词。这是 NLP 的一项进步&#xff0c;提高了计算机更好地理解基于文本的内容的能力。它被认为是深度学习在解决具有挑战性的自然语言处理问题方面最重要的突破之一。 在这种方法中&#xff…

视觉SLAM中的数学基础:李群与李代数

在视觉SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;中&#xff0c;理解和应用李群&#xff08;Lie Group&#xff09;与李代数&#xff08;Lie Algebra&#xff09;是非常关键的。李群与李代数为描述和处理空间中的连续变换&#xff08;如旋转和平移&am…

【OCR 学习笔记】二值化——局部阈值方法

二值化——局部阈值方法 自适应阈值算法Niblack算法Sauvola算法 自适应阈值算法 自适应阈值算法1用到了积分图&#xff08;Integral Image&#xff09;的概念。积分图中任意一点 ( x , y ) (x,y) (x,y)的值是从图左上角到该点形成的矩形区域内所有值的和。即&#xff1a; I (…

逻辑回归之鸢尾花数据集多分类任务

目录 1.导入数据 2.定义多分类模型 3.准备测试数据 4.绘制决策边界 对于多分类任务&#xff0c;其实就是多个二分类任务。 先分黑色(标签为1)和其他(标签为0)&#xff0c;在这个基础上再去分红色和绿色&#xff0c;此时就将红色标签设置为1&#xff0c;其他设置为0&#x…

关于 Lora中 Chirp Spread Spectrum(CSS)调制解调、发射接收以及同步估计的分析

本文结合相关论文对CSS信号的数学形式、调制解调、发射接收以及同步估计做了全面分析&#xff0c;希望有助于更好地理解lora信号 long-range (LoRa) modulation, also known as chirp spread spectrum (CSS) modulation, in LoRaWAN to ensure robust transmission over long d…

Unity(2022.3.38LTS) - 页面介绍

目录 A. 创建项目 B.Unity 编辑器页面 C. 自己点点 A. 创建项目 有多个编辑器版本的选择编辑器. 3D和2D的区别就是初始化的包不同,这些包打开项目之后都可以在自行下载,随意切换, B.Unity 编辑器页面 Unity 编辑器页面是一个高度集成且功能丰富的开发环境&#xff0c;为游…

ISE14.7后仿真、烧录教程

ISE14.7后仿真、烧录教程 ISE14.7后仿真、烧录教程 系统版本&#xff1a;win10&#xff0c;EDA工具版本&#xff1a;ISE14.7&#xff0c;modelsim SE 10.4&#xff0c;本文主要包含两部分内容&#xff0c;首先是基于ISE的后仿真&#xff0c;基于ISE和modelsim的联合后仿真&am…

C++简单界面设计

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {---------------------窗口设置----------------------this->setWindowTitle("南城贤子摄影工作室");//设置窗口标题this->setWindowIcon(QIcon("d:\\Pictures\\C…

上海悠远为您解析芯片管理系统的核心功能

在当今科技日新月异的时代&#xff0c;芯片作为信息技术的基石&#xff0c;其管理效率与安全性直接关系到整个系统的稳定运行与数据安全。因此&#xff0c;一个高效、智能的芯片管理系统成为了不可或缺的技术支撑。该系统通过集成多项核心技术&#xff0c;实现了对芯片从生产到…