【opencv-python】Sobel算子说明

Sobel算子主要用于计算图像梯度,其数学表达式为:
G x = [ + 1 0 − 1 + 2 0 − 2 + 1 0 − 1 ] ∗ A , G y = [ + 1 + 2 + 1 0 0 0 − 1 − 2 − 1 ] ∗ A G_x=\left[\begin{matrix} +1 & 0 & -1\\ +2 & 0 & -2 \\ +1 & 0 & -1 \\ \end{matrix}\right]*A,G_y=\left[\begin{matrix} +1 & +2 & +1\\ 0 & 0 & 0 \\ -1 & -2 & -1 \\ \end{matrix}\right]*A Gx=+1+2+1000121AGy=+101+202+101A
梯度大小和梯度方向分别为:
G = G x 2 + G y 2 , Θ = a t a n 2 ( G y , G x ) \rm\pmb{G}=\sqrt{G_x^2+G_y^2}, \pmb\Theta=atan2(G_y,G_x) GGG=Gx2+Gy2 ,ΘΘΘ=atan2(Gy,Gx)

详细说明可见维基百科,其原理如下图所示:
在这里插入图片描述原图像为:
在这里插入图片描述
经过Sobel算法运算后的图像为:
在这里插入图片描述
可见边缘被明显增强了。对原理进行具体分析,Sobel算子就相当于分别求水平和垂直方向的梯度,而严格意义的梯度是相邻像素之间的灰度差,对Sobel算子来说,以水平方向为例,目标图像的中心像素梯度等于于上下行左右相邻元素灰度差+本行左右像素相邻灰度差的2倍,因此直接反应了小区域内在水平方向的灰度变化情况,且上下行水平方向的相邻像素对最终梯度计算结果也起到了作用,只是权重较少,垂直方向同理,如下图所示:

在这里插入图片描述假如上下两片区域的灰度值下图所示:

在这里插入图片描述
橘色区域和绿色区域相连接,梯度方向相同,对与Canny边缘检测功能而言,绿色区域用Sobel算子计算出的梯度值大于橘色区域,因此Canny边缘检测算法只保留绿色区域的中心梯度值。


感谢支持,欢迎关注,丰富技术/学术内容持续更新!

opencv-python快速入门视频教程


在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hunter206206

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值