OpenCV-25sobel算子(索贝尔算子)

这篇具有很好参考价值的文章主要介绍了OpenCV-25sobel算子(索贝尔算子)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面所提到的滤波都是用于降噪的,去掉噪声,而算子是用来找边界,来识别图像的边缘。

一、概念

边缘是像素值发生跃迁的值,是图像的显著特点之一,在图像特征提取,对象检测,模式识别等方面都有重要的作用。

人眼如何识别图像的边缘呢?

比如有一幅画,图里面有一条线,左边很亮,右边很暗,那人眼就很容易识别这条线作为边缘,也就是像素的灰度值快速变化的地方。

sobel算子对图像求一阶导数一阶导数越大,说明像素在该方面的变化越大,边缘信号越强。

因为图像的灰度值都是离散的数字,sobel算子采样离散差分算子计算图像像素点亮度值的近似梯度

差分算子是一种算子,对任一实函数f(x),若记Δf(x)=f(x+1)-f(x),则称Δ为向前差分算子,简称差分算子。

图像时二维的,即沿着宽度/高度两个方向。

我们使用卷积核对图像进行处理:

水平方向:

OpenCV-25sobel算子(索贝尔算子),OpenCV,opencv,计算机视觉,图像处理,人工智能,python,numpy

中间一列相当于f(x),第3列相当于f(x+1),第1列相当于f(x-1);相当于第3列的像素点减去第1列的像素点最后得到的就是水平方向上的近似梯度。

垂直方向:

OpenCV-25sobel算子(索贝尔算子),OpenCV,opencv,计算机视觉,图像处理,人工智能,python,numpy

中间一行相当于f(x),第3行相当于f(x+1),第1行相当于f(x-1); 相当于第3行的像素点减去第1行的像素点最后得到的就是垂直方向上的近似梯度。

综合考虑这两个方向上的变化,我们可以使用以下公式反应某个像素的梯度变化情况:

OpenCV-25sobel算子(索贝尔算子),OpenCV,opencv,计算机视觉,图像处理,人工智能,python,numpy

有时候为了简单起见,也可以用绝对值相加替代:OpenCV-25sobel算子(索贝尔算子),OpenCV,opencv,计算机视觉,图像处理,人工智能,python,numpy

二.示例代码如下所示

import cv2
import numpy as np

img = cv2.imread("chess.png")

# 计算x轴方向的梯度,只有垂直方向的边缘
dx = cv2.Sobel(img, cv2.CV_64F, dx=1, dy=0, ksize=3)
# 计算y轴方向的梯度,只有水平方向的边缘
dy = cv2.Sobel(img, cv2.CV_64F, dx=0, dy=1, ksize=3)

new_img = cv2.add(dx, dy)
cv2.imshow("img1", img)
cv2.imshow("img2", dx)
cv2.imshow("img3", dy)
cv2.imshow("new_img", new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意点:

sobel算子必须分开计算x轴和y轴,不然的话效果很差。文章来源地址https://www.toymoban.com/news/detail-808965.html

到了这里,关于OpenCV-25sobel算子(索贝尔算子)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包