栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【opencv-python】Sobel算子说明

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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+1​000​−1−2−1​⎦⎤​∗A,Gy​=⎣⎡​+10−1​+20−2​+10−1​⎦⎤​∗A
梯度大小和梯度方向分别为:
G = G x 2 + G y 2 , Θ = a t a n 2 ( G y , G x ) rmpmb{G}=sqrt{G_x^2+G_y^2}, pmbTheta=atan2(G_y,G_x) GGG=Gx2​+Gy2​ ​,ΘΘΘ=atan2(Gy​,Gx​)

详细说明可见维基百科,其原理如下图所示:
原图像为:

经过Sobel算法运算后的图像为:

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

假如上下两片区域的灰度值下图所示:


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


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

opencv-python快速入门视频教程


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号