图像处理Sobel 算子

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

原理:

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

  水平方向的Sobel算子核:
SobelX = − 1 0 1 − 2 0 2 − 1 0 1 \text{SobelX} = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} SobelX= −1−2−1000121

  垂直方向的Sobel算子核:
SobelY = − 1 − 2 − 1 0 0 0 1 2 1 \text{SobelY} = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} SobelY= −101−202−101

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

作用和适用场景:

  • 边缘检测: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

代码示例:

python 复制代码
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)
相关推荐
武天旭3 小时前
AI安全--AI大模型的毒性偏见与安全对齐实践
人工智能·python·深度学习
视觉小萌新3 小时前
AI Class 3 · Chapter 2-3:函数、异常、文件读写+JSON / JSONL 读写(小白版)
人工智能·python·json
小小张说故事4 小时前
Python 的 obj.x 到底按什么顺序找?拆开数据描述符、实例字典和 __getattr__ 那条优先级链
python
用户11481867894845 小时前
水印的实现方式逻辑
前端·python
贾公子6 小时前
从单条内容到账号维度——AIGC 风险评分的工程实现
后端·python
木头左7 小时前
【Python】不点浏览器发博客:逆向 CSDN 创作中心接口做 md-publish 技能
python·自动化·api
Tt有了t8 小时前
设计模式速查
java·python·设计模式
deepseek238 小时前
Python日志拖慢请求?QueueHandler排队、丢失与退出实测
python·性能优化·logging·后端开发·queuehandler
用户91294046848428 小时前
Codex 从零到能交付(05):第一次改代码:生成一个文件清单脚本
python
Dmz丶8 小时前
前端转 AI 100 天 Day 38:Token 管理与成本优化——别让 API 账单爆炸
python