ToB企服应用市场:ToB评测及商务社交产业平台

标题: 图像处置处罚 -- Sobel滤波器的实现原理与使用案例 [打印本页]

作者: 勿忘初心做自己    时间: 2024-8-6 15:15
标题: 图像处置处罚 -- Sobel滤波器的实现原理与使用案例
Sobel滤波器

概述

Sobel滤波器是一种边沿检测方法,用于图像处置处罚和计算机视觉范畴。它通过计算图像灰度值的梯度来检测边沿。Sobel滤波器结合了高斯平滑和微分利用,以减少噪声并加强边沿检测结果。
实现原理

Sobel滤波器通过使用两个3x3卷积核(也称为掩模)来计算图像灰度值的水平和垂直梯度。分别称为                                              G                            x                                       G_x                  Gx​ 和                                              G                            y                                       G_y                  Gy​。
水平梯度核                                              G                            x                                       G_x                  Gx​

                                                    G                               x                                      =                                       [                                                                                                     −                                              1                                                                                                            0                                                                                             1                                                                                                                                   −                                              2                                                                                                            0                                                                                             2                                                                                                                                   −                                              1                                                                                                            0                                                                                             1                                                                                 ]                                            G_x = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix}                     Gx​=               ​−1−2−1​000​121​               ​
垂直梯度核                                              G                            y                                       G_y                  Gy​

                                                    G                               y                                      =                                       [                                                                                                     −                                              1                                                                                                                            −                                              2                                                                                                                            −                                              1                                                                                                                                  0                                                                                             0                                                                                             0                                                                                                                   1                                                                                             2                                                                                             1                                                                                 ]                                            G_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix}                     Gy​=               ​−101​−202​−101​               ​
梯度计算

对于每个像素                                    I                         (                         x                         ,                         y                         )                              I(x, y)                  I(x,y),应用这些卷积核以获得水平和垂直方向上的梯度值:
                                                    G                               x                                      (                            x                            ,                            y                            )                            =                                       ∑                                           i                                  =                                  −                                  1                                          1                                                 ∑                                           j                                  =                                  −                                  1                                          1                                      I                            (                            x                            +                            i                            ,                            y                            +                            j                            )                            ⋅                                       G                               x                                      (                            i                            +                            1                            ,                            j                            +                            1                            )                                  G_x(x, y) = \sum_{i=-1}^{1} \sum_{j=-1}^{1} I(x+i, y+j) \cdot G_x(i+1, j+1)                     Gx​(x,y)=i=−1∑1​j=−1∑1​I(x+i,y+j)⋅Gx​(i+1,j+1)
                                                    G                               y                                      (                            x                            ,                            y                            )                            =                                       ∑                                           i                                  =                                  −                                  1                                          1                                                 ∑                                           j                                  =                                  −                                  1                                          1                                      I                            (                            x                            +                            i                            ,                            y                            +                            j                            )                            ⋅                                       G                               y                                      (                            i                            +                            1                            ,                            j                            +                            1                            )                                  G_y(x, y) = \sum_{i=-1}^{1} \sum_{j=-1}^{1} I(x+i, y+j) \cdot G_y(i+1, j+1)                     Gy​(x,y)=i=−1∑1​j=−1∑1​I(x+i,y+j)⋅Gy​(i+1,j+1)
梯度幅值

然后,计算梯度幅值(也称为梯度强度):
                                         G                            =                                                                G                                     x                                     2                                              +                                               G                                     y                                     2                                                                   G = \sqrt{G_x^2 + G_y^2}                     G=Gx2​+Gy2​             ​
为了便于计算,也可以使用近似计算梯度幅值:
                                         G                            ≈                            ∣                                       G                               x                                      ∣                            +                            ∣                                       G                               y                                      ∣                                  G \approx |G_x| + |G_y|                     G≈∣Gx​∣+∣Gy​∣
梯度方向

                                         θ                            =                            arctan                            ⁡                                       (                                                        G                                     y                                                           G                                     x                                                      )                                            \theta = \arctan\left(\frac{G_y}{G_x}\right)                     θ=arctan(Gx​Gy​​)
使用场景

代码实现

以下是使用Python和OpenCV实现Sobel滤波器的示例代码:
  1. import cv2
  2. import numpy as np
  3. from matplotlib import pyplot as plt
  4. # 读取图像并转换为灰度图
  5. image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
  6. # 使用OpenCV的Sobel函数计算梯度
  7. sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
  8. sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
  9. # 计算梯度幅值
  10. sobel = np.hypot(sobel_x, sobel_y)
  11. sobel = np.uint8(sobel / np.max(sobel) * 255)
  12. # 显示结果
  13. plt.figure(figsize=(10, 5))
  14. plt.subplot(1, 2, 1), plt.title('Original Image'), plt.imshow(image, cmap='gray')
  15. plt.subplot(1, 2, 2), plt.title('Sobel Filtered Image'), plt.imshow(sobel, cmap='gray')
  16. plt.show()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4