• 图像处理Sobel 算子


      Sobel算子是一种常用的图像处理算法,用于边缘检测。它利用了图像中灰度值的变化来识别边缘的位置。在OpenCV中,Sobel算子通常用于图像梯度计算,其中包括水平方向和垂直方向的梯度。这两个方向的梯度合并后可以得到图像的边缘信息。

    原理:

      Sobel算子的原理基于图像中的灰度变化。它使用了一个小的卷积核(3x3的矩阵)对图像进行卷积操作,以检测图像中像素值的梯度。对于水平方向和垂直方向的梯度,Sobel算子使用以下两个核:
      水平方向的Sobel算子核:
    SobelX = [ − 1 0 1 − 2 0 2 − 1 0 1 ] \text{SobelX} =

    [101202101]" role="presentation" style="position: relative;">[101202101]
    SobelX= 121000121
      垂直方向的Sobel算子核:
    SobelY = [ − 1 − 2 − 1 0 0 0 1 2 1 ] \text{SobelY} =
    [121000121]" role="presentation" style="position: relative;">[121000121]
    SobelY= 101202101

      这两个核分别对图像进行水平和垂直方向的卷积运算,得到了水平方向和垂直方向上的梯度。

    作用和适用场景:

    • 边缘检测:Sobel算子可以帮助识别图像中的边缘,因为边缘处的灰度值通常会发生剧烈变化。
    • 特征提取:梯度信息可以用于图像的特征提取,例如在计算机视觉任务中用于对象识别、图像分割等。

    公式:

      Sobel算子在水平方向(x轴)的应用:
    G x = SobelX ∗ 图像 G_x = \text{SobelX} * \text{图像} Gx=SobelX图像
      Sobel算子在垂直方向(y轴)的应用:
    G y = SobelY ∗ 图像 G_y = \text{SobelY} * \text{图像} Gy=SobelY图像
      最终梯度图像的合并:
    梯度图像 = G x 2 + G y 2 \text{梯度图像} = \sqrt{{G_x}^2 + {G_y}^2} 梯度图像=Gx2+Gy2

    代码示例:

    import cv2
    import numpy as np
    
    def show_images(image):
        cv2.namedWindow('image',cv2.WINDOW_KEEPRATIO)
        cv2.imshow('image',image)
        cv2.waitKey()
        cv2.destroyAllWindows()
    
    def Sobel(image):
        # 使用Sobel算子计算水平方向和垂直方向的梯度
        sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
        sobel_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
        # 计算梯度的幅值
        gradient_img = np.sqrt(sobel_x ** 2 + sobel_y ** 2)
    
        return sobel_x,sobel_y,gradient_img
    
    if __name__ == '__main__':
        # 读取图像
        img = cv2.imread('cat-dog.png', flags=0)
        re_img=Sobel(img)
        # 将四张图像连接成一个大图像
        top_row = np.hstack((img, re_img[0]))
        bottom_row = np.hstack((re_img[1], re_img[2]))
        combined_img = np.vstack((top_row, bottom_row))
    
        show_images(combined_img)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    第三章-Mybatis源码解析-以xml方式走流程-mapper解析(三)
    揭秘newSingleThreadExecutor:深度解析与源码探秘
    【kubernetes的基本API操作】
    RTL8715AH,RTL8715AQ双频WI-FI物联网低功耗SOC
    k8s安全机制
    小米真无线耳机 Air 2s产品蓝牙配对ubuntu20.04 笔记本电脑
    Apache服务器的下载与安装
    Java 常用类(包装类)
    Maven的安装与配置以及注意事项
    【刷题专项】— 模拟
  • 原文地址:https://blog.csdn.net/qq_50993557/article/details/134517546