open-cv图像梯度

图像梯度

Sobel算子

G x = [ − 1 0 + 1 − 2 0 + 2 − 1 0 + 1 ] ∗ A  and  G y = [ − 1 − 2 − 1 0 0 0 + 1 + 2 + 1 ] ∗ A G_{x}= \left[\begin{array}{ccccc} -1 & 0 & +1 \\ -2 & 0 & +2 \\ -1 & 0 & +1 \end{array}\right] * A \text { and } G_{y}=\left[\begin{array}{ccc} -1 & -2 & -1 \\ 0 & 0 & 0 \\ +1 & +2 & +1 \end{array}\right] * A Gx=121000+1+2+1A and Gy=10+120+210+1A

dst = cv2.Sobel(src,depth,dx,dy,ksize)
  • depth:图像深度
  • dx/dy:水平/垂直方向
  • ksize:算子大小
# 分别计算x 和 y
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
# 白色区域-黑色区域为整数,黑色区域-白色区域为负数,因此取绝对值,保留所有区域
sobelx = cv2.convertScaleAbs(sobelx)

sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
sobely = cv2.convertScaleAbs(sobely)

# 再求和
sobelxy = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)

Scharr算子

G x = [ − 3 0 + 3 − 10 0 + 10 − 3 0 + 3 ] ∗ A  and  G y = [ − 3 − 10 − 3 0 0 0 + 3 + 10 + 3 ] ∗ A G_{x}= \left[\begin{array}{ccccc} -3 & 0 & +3 \\ -10 & 0 & +10 \\ -3 & 0 & +3 \end{array}\right] * A \text { and } G_{y}=\left[\begin{array}{ccc} -3 & -10 & -3 \\ 0 & 0 & 0 \\ +3 & +10 & +3 \end{array}\right] * A Gx=3103000+3+10+3A and Gy=30+3100+1030+3A

scharrx = cv2.Scharr(img, cv2.CV_64F, 1, 0)
scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1)
scharrx = cv2.convertScaleAbs(scharrx)
scharry = cv2.convertScaleAbs(scharry)
scharrxy = cv2.addWeighted(scharrx, 0.5, scharry, 0.5, 0)

Laplacian算子

G x = [ 0 1 0 + 1 − 4 + 1 0 1 0 ] G_{x}= \left[\begin{array}{ccccc} 0 & 1 & 0 \\ +1 & -4 & +1 \\ 0 & 1 & 0 \end{array}\right] Gx=0+101410+10

laplacian = cv2.Laplacian(img, cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)

Canny边缘检测

  • 1)使用高斯滤波器,以平滑图像,滤除噪声。
  • 2)计算图像中每个像素点的梯度强度和方向。
  • 3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
  • 4)应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘
  • 5)通过抑制孤立的弱边缘最终完成边缘检测

1.高斯滤波

G x = [ 0.0924 0.1192 0.0924 0.1192 0.1538 0.1192 0.0924 0.1192 0.0924 ] G_{x}= \left[\begin{array}{ccccc} 0.0924 & 0.1192 & 0.0924 \\ 0.1192 & 0.1538 & 0.1192 \\ 0.0924 & 0.1192 & 0.0924 \end{array}\right] Gx=0.09240.11920.09240.11920.15380.11920.09240.11920.0924
e = H ∗ A = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] ∗ [ a b c d e f j h i ] e =H * A = \left[\begin{array}{ccccc} h_{11} &h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{array}\right] * \left[\begin{array}{ccccc} a & b & c \\ d & e & f \\ j & h & i \end{array}\right] e=HA=h11h21h31h12h22h32h13h23h33adjbehcfi

2.计算梯度和方向

采用sobel计算梯度和方向
G = G x 2 + G y 2 G = \sqrt{G x^{2}+G y^{2}} G=Gx2+Gy2
θ = tan ⁡ − 1 G y G x \theta=\tan ^{-1} \frac{G y}{G x} θ=tan1GxGy

3.非极大值抑制

线性插值法

4.双阈值检测

梯度值>maxval:则处理为边界
minVal<梯度值<连有边界则保留否则舍弃
梯度值<minVal:则舍弃

img = cv2.imread('./images/lena.jpg', cv2.IMREAD_GRAYSCALE)

v1 = cv2.Canny(img, 80, 150)
v2 = cv2.Canny(img, 50, 100)

res = np.hstack((v1, v2))
cv2_imshow('res', res)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值