python+opencv-15 图像梯度与边缘检测

图像梯度与边缘检测

图像梯度是一种描述图像像素之间差异的方法,可以作为图像的一种特征来表征图像。图像梯度计算的是图像的边缘信息,它能够反应图像像素变化的速度,如灰度值变化较大的地方,梯度值也较大。图像梯度就是指像素的一阶导数,在图像处理中可以通过计算像素值的差近似导数值。图像边缘是指灰度值发生急剧变化的地方,边缘检测的目的是在不破坏图像信息的条件下,减少图像的数据量,绘制出其边缘线图。

Soble算子

Soble算子一种离散型差分算子,用来运算图像灰度函数的梯度的近似值。Soble算子是典型的基于一阶导数的边缘监测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑作用,能很好的消除噪声影响。
Soble算子包含两组 3 ∗ 3 3*3 33的矩阵,分别为横向及纵向模板,将之与图像进行平面卷积,即可分别得出横向及纵向的灰度差分近似值。
Soble算子的水平方向的模板为: G x = [ − 1 0 1 − 2 0 2 − 1 0 1 ] × s r c { {G}_{x}}=\left[ \begin{matrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \\ \end{matrix} \right]\times src Gx=121000121×src
Soble算子的垂直方向的模板为: G y = [ − 1 − 2 − 1 0 0 0 1 2 1 ] × s r c { {G}_{y}}=\left[ \begin{matrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \\ \end{matrix} \right]\times src Gy=101202101×src

import cv2 as cv

image = cv.imread("lena.jpg", 0)

Sobelx = cv.Sobel(image, cv.CV_64F, 1, 0)
Sobelx = cv.convertScaleAbs(Sobelx)

Sobely = cv.Sobel(image, cv.CV_64F, 0, 1)
Sobely = cv.convertScaleAbs(Sobely)

Sobelxy = cv.Sobel(image, cv.CV_64F, 1, 1)
Sobelxy = cv.convertScaleAbs(Sobelxy)

Sobelxy_my = cv.addWeighted(Sobelx, 0.5, Sobely, 0.3, 0)

cv.imshow("image", image)
cv.imshow("Sobelx", Sobelx)
cv.imshow("Sobely", Sobely)
cv.imshow("Sobelxy", Sobelxy)
cv.imshow("Sobelxy_my", Sobelxy_my)

cv.waitKey()
cv.destroyAllWindows()

在这里插入图片描述

Scharr算子

Scharr算子可被视为Sobel算子的改进,具有与Sobel算子相同的计算速度,但是其精度更高。
Scharr算子由两个卷积核构成,且这两个卷积核不可分离。图像与水平方向的卷积运算反应垂直方向上的边缘强度,图像与垂直方向的卷积运算反应水平方向上的边缘强度。
s c h a r r x = [

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值