OpenCV图像梯度(Sobel和Scharr)

Posted 程序媛一枚~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV图像梯度(Sobel和Scharr)相关的知识,希望对你有一定的参考价值。

这篇博客将介绍图像渐变以及如何使用OpenCV的cv2.Sobel计算Sobel渐变和Scharr渐变。

1 图像梯度是什么?

图像梯度是许多计算机视觉和图像处理程序的基本组成部分。

  • 我们使用梯度来检测图像中的边缘,这使得我们能够在图像中找到物体的轮廓和边缘线;
  • 我们使用它们作为通过特征提取量化图像的输入-事实上,非常成功和著名的图像描述符,如定向梯度直方图和SIFT是建立在图像梯度表示的基础上的;
  • 梯度图像甚至被用来构造显著性图,突出图像的主题;

2 图像梯度的用途

图像梯度的主要应用在于边缘检测。边缘检测是在图像中寻找轮廓/边缘的过程,它揭示了图像中物体的结构信息。因此,边缘可以对应于:

  • 图像中对象的边界
  • 图像中阴影或光照条件的边界
  • 对象中“局部”的边界

图像梯度定义为图像强度的方向变化。
或者更简单地说,在输入(灰度)图像的每个像素处,梯度测量给定方向上像素强度的变化。通过估计方向或方向以及大小(即方向的变化有多大),能够检测图像中看起来像边缘的区域。

梯度幅度(gradient magnitude)用来衡量图像强度的变化有多大。梯度幅度是一个实值数字,它量化了强度变化的“强度”。
梯度方向(gradient orientation)用于确定强度变化的方向。顾名思义,梯度方向会给出一个角度或𝜃 ,用来量化变化的方向。

弧度(radians)转角度(degrees): 弧度*180/pi = 角度

3 图像梯度的使用

  • Sobel和Scharr核,它们是卷积算子,使用OpenCV和cv2.Sobel可自动计算图像梯度

当量化和抽象地表示图像时,梯度幅度和方向有助于获得优秀的特征和图像描述符。
但是对于边缘检测,梯度表示对局部噪声非常敏感。将需要添加更多的步骤来创建一个实际的健壮的边缘检测器。
Soble核如下:

Scharr核如下,比Soble核能获得更好的梯度近似值:

参考

以上是关于OpenCV图像梯度(Sobel和Scharr)的主要内容,如果未能解决你的问题,请参考以下文章

图像梯度

使用cv2.Sobel()cv2.Scharr()cv2.Laplacian()寻找图像的梯度边缘

OpenCV 图像梯度算子

Opencv图像边缘检测——Roberts算子(手写)Sobel算子(手写和调包)Scharr算子Laplacian算子

OpenCV竟然可以这样学!成神之路终将不远(十四)

图像梯度(opencv-c++)