1 背景介绍

图像底层的处理对象,比如图像的噪点、边缘、直线、圆、特征点等为目的。那么本章主要解决的问题是如何提取图形中的边缘?是我们关心中的重点。那么,其数学原理是一阶离散差分的形式。故我们知道把一个图像处理转变为灰度图像,就是处理这张图像的每个像素灰度的变化,那么在边缘处,灰度变化比较明显(对应着其梯度或者灰度矢量的变化)。

2 Sobel算子的形式

  • 图像处理绝大数在卷积操作,Opencv 会提供一个

    或者
    或者其他大小的 kernel,也就是卷积核。对于卷积核操作,首先我们要明白卷积原理。

卷积公式:

我擦,看到他的定义瞬间懵掉了。那么他到底解释的什么?我给出引用其他小伙伴的卷积解释卷积到底是什么?我还是一脸雾水,当我看到以下证明时,我才完全明白其来源和含义:

设二维连续型随机变量

的概率密度函数为
,则随机变量
的概率密度​
的求解过程为:

那么:

则:

其实,卷积函数就是二阶积分一种特殊情况的一元积分形式。

  • Sobel 卷积算子,

    轴方向的变化和
    轴方向的变化

看到

你会疑问为什么 Sobel 算子会长成这个样子?要解决这一个疑问,首先要知道,一阶差分方程形式为:
在求
方向上变化,
在求
方向上变化。至于为什么会出现数字2,我的思考是当前像素位置 上类似于高斯权重的分配。左右变换大为
,上下变换大为

为原始图像,那么在
方向上的卷积为:

那么在

方向上的卷积为:

具体计算方式如下:

其中

表示图像
点的灰度值。

那么,改点的灰度梯度为:

如果梯度

大于某一阀值则认为该点
为边缘点。

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。

3 API 函数介绍

void cv::Sobel( InputArray _src, OutputArray _dst, int ddepth, int dx, int dy,int ksize, double scale, double delta, int borderType )第一个参数:_src 输入的源影像 第二个参数:_dst输出的目标影像,大小和通道数与源影像相同。深度由ddepth来决定第三个参数:目标影像的深度;当源源影像的深度为CV_8U时,一般ddepth选择为CV_16S第四个参数:x方向上的导数因子第五个参数:Y方向上的导数因子第六个参数:如果ksize<0的时候,那么使用scharr内核过滤因子。scharr的内核过滤因子大小为3。dx大于等于0,dy大于等于0,并且dx+dy==1

#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char **argv)
{Mat image  = imread("/Users/cc/Desktop/OpenCV/demo/MyOpenCvDemo/MyDemo/swk.jpeg");if (image.empty()){cout << "could not find the image resource ..." << endl;return -1;}Mat grayImg;cvtColor(image, grayImg, COLOR_BGR2GRAY);Mat sobelx;Sobel(grayImg, sobelx, CV_32F, 1, 0);double minVal, maxVal;minMaxLoc(sobelx, &minVal, &maxVal);Mat draw;sobelx.convertTo(draw, CV_8U, 255.0 / (maxVal - minVal), -minVal * 255.0 / (maxVal - minVal));namedWindow("My Image", CV_WINDOW_AUTOSIZE);imshow("My Image", draw);waitKey(0);return 0;
}

4 运行结果

sobel算子_OpenCV 学习:4 Sobel算子相关推荐

  1. sobel算子_OpenCV图像处理专栏十八 | 手动构造Sobel算子完成边缘检测

    1. 前言 众所周知,在传统的图像边缘检测算法中,最常用的一种算法是利用Sobel算子完成的.Sobel算子一共有 个,一个是检测水平边缘的算子,另一个是检测垂直边缘的算子. 2. Sobel算子优缺 ...

  2. OpenCV3学习(6.1)——边缘检测---Canny,Sobel,Prewitt,Robert,Laplace,LOG,DOG算子

    图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.由于数字图像的离散信号, ...

  3. OpenCV Sobel检测算子和Scharr检测算子

    Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,但是很多实际应用的场合,sobel边缘却是首选,Sobel算子是高斯平滑与微分操作的结合体 ...

  4. java求sobel算子代码_边缘检测sobel算子

    #1,个人理解 网上查了很多资料,都说sobel算子是用来检测边缘的,分别给了两个方向上的卷积核,然后说明做法,就说这就是sobel算子.对于我个人来说,还有很多不明白的地方,所以理清下思路. #2, ...

  5. opencv学习日志18-canny算子

    前言 这篇文章主要讲述opencv中canny算子的使用. 一.canny算子 //第一题 调用canny算子 #include <opencv2/opencv.hpp> #include ...

  6. CANN训练营第三季_昇腾CANN算子精讲课_TBE算子Sinh开发笔记_算子开发(二)

    1.作业算子要求 2.检查版本对应关系 在Mindstudio软件包下载界面可以检查安装的mindstudio版本和cann版本是否一致,如果不一致可能会导致后面算子工程创建出错. 这里我用的Mind ...

  7. 应用sobel算子算法c语言,Sobel算子详解

    1 .卷积应用-图像边缘提取 Sobel 算子是一个离散微分算子 (discrete differentiation operator). 它结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度. ...

  8. sobel算子 matlab实现6,Sobel算子matlab实现

    算子实际上是用来对图像进行卷积处理,其本质是用变分法来处理梯度问题,用途就是边缘检测.45度和135度效果一般,水平检测加垂直检测效果还可以. function Sobel(name,Threshol ...

  9. sobel算子 matlab实现6,sobel算子,matlab实现

    A=imread('D:\image\Body.jpg'); I = rgb2gray(A); subplot(2,2,1); imshow(I); title('原图'); hx=[-1 -2 -1 ...

最新文章

  1. SSL 数字证书助力电子商务,让您网络购物更安心
  2. avue form提交变为不可编辑_教程42——富文本编辑器的原理(项目)
  3. Android新控件RecyclerView浅析及上拉和下拉刷新
  4. python 布尔值为f我的_python – 为什么我没有得到布尔值?
  5. itextsharp php,C#_C#使用iTextSharp设置PDF所有页面背景图功能实例,本文实例讲述了C#使用iTextSharp - phpStudy...
  6. 禁用FCKeditor浏览服务器
  7. HDU 4812 D Tree (点分治) (2013ACM/ICPC亚洲区南京站现场赛)
  8. Kotlin静态方法定义和调用
  9. rstudio安装后打不开_R与RStudio最简单安装指南
  10. Java垃圾回收器的工作原理
  11. Java并发和多线程3:线程调度和有条件取消调度
  12. Unity 使物体朝向某个方位
  13. 【RLchina第六讲】Imitation Learning
  14. Spark中使用Dataset的groupBy/agg/join/broadcast hasjoin/sql broadcast hashjoin示例(java api)
  15. delphi连接mysql不用添加dsn_Delphi]delphi中动态创建MySQL的ODBC连接 .
  16. C语言自学之路一(初识C语言)
  17. LOAP引擎:clickhouse03:文件的导入导出方式
  18. 张正友相机标定法原理与实现
  19. 陈龙杰计算机专业,第四届学生职业技能大赛获奖名单
  20. UT单元测试总结基础篇

热门文章

  1. python定义匿名函数关键字_python语言的匿名函数、7种可调用对象以及用户定义的可调用类型...
  2. Effective Java之列表由于数组(二十五)
  3. Raft算法的Leader选举和日志复制过程
  4. Megastore:为交互式服务提供可扩展的高可用性存储
  5. 07.德国博士练习_09_agg_query
  6. vi 搜索命令_vi或vim如何查询关键字
  7. Windows下安装苹果iPhone开发环境xcode图文教程
  8. linux中的vsprintf_Git29 年超 100 万次 commit,Linux 内核何以发展至今?
  9. 测试硬盘读写速度软件_机械硬盘回春:2023年容量破40TB 读写速度媲美SATA SSD
  10. java i=(int)b_定义类B和类C如下,并将其保存为B.java文件,得到的结果是()class B{int b;B(int i){b=i;}}class C extend...