Laplacian、Sobel X、Sobel Y有什么区别呢?

问题描述:

Laplacian、Sobel X、Sobel Y有什么区别呢?

问题解答:

Laplacian、Sobel X 和 Sobel Y 是三种不同的边缘检测算子,它们在原理、方向和应用上有明显的区别:

1. Laplacian

  • 原理:Laplacian 是一种二阶导数算子,用于检测图像中亮度变化的区域。它通过计算图像的二阶导数来识别边缘。
  • 特征:能够检测到边缘的强度,但不区分边缘的方向。适用于检测图像中的快速变化区域。
  • 滤波器: \begin{bmatrix} 0 & 1 & 0\\ 1& -4 & 1\\ 0&1 & 0 \end{bmatrix}

2. Sobel X

  • 原理:Sobel X 是一种一阶导数算子,专门用于检测水平方向的边缘。它通过计算图像的水平梯度来识别边缘。
  • 特征:能够突出水平方向的边缘,并且具有抗噪声的特性。
  • 滤波器: \begin{bmatrix} -1 &0 &1 \\ -2& 0 &2 \\ -1& 0 & 1 \end{bmatrix}

3. Sobel Y

  • 原理:Sobel Y 也是一种一阶导数算子,但它专门用于检测垂直方向的边缘。通过计算图像的垂直梯度来识别边缘。
  • 特征:能够突出垂直方向的边缘,同样具有抗噪声的特性。
  • 滤波器\begin{bmatrix} 1 & 2 & 1\\ 0 &0 &0 \\ -1&-2 & -1 \end{bmatrix}

总结

  • 方向:Laplacian 不区分方向,而 Sobel X 和 Sobel Y 分别检测水平方向和垂直方向的边缘。
  • 阶数:Laplacian 是二阶导数算子,而 Sobel X 和 Sobel Y 是一阶导数算子。
  • 应用:Laplacian 更适合用于整体边缘检测,而 Sobel X 和 Sobel Y 更适合用于提取特定方向的边缘信息。

###################################################

对于一张图像,哪个是图像的x轴,哪个是图像的y轴呢?横着和竖着方向哪个对应的是x轴方向和y方向呢?

在图像处理中,通常约定如下:

  • X轴(水平轴):表示图像的横向,水平方向。即从左到右,通常对应于图像的列索引。
  • Y轴(垂直轴):表示图像的纵向,竖直方向。即从上到下,通常对应于图像的行索引。

因此,在一张图像中:

  • 横向(从左到右)对应于 X 轴。
  • 竖向(从上到下)对应于 Y 轴。

这意味着,如果你在图像中移动列(X轴),你会水平移动;而移动行(Y轴)则是垂直移动。

####################################################################

为什么Sobel X检测到的边缘线是竖线呢?

Sobel X 是用于检测水平方向边缘的算子。它通过在图像中计算水平梯度(即 X 方向的变化),强调了在 Y 方向(垂直方向)有显著变化的像素值。因此,当图像中存在竖直边缘时,Sobel X 会在这些边缘处产生较大的响应值,从而检测到竖线。

具体来说,Sobel X 的卷积核形状是:

\begin{bmatrix} -1 &0 &1 \\ -2&0 &2 \\ -1& 0 & 1 \end{bmatrix}

这个核会增强水平变化而抑制垂直变化,因此当遇到竖直边缘时,会产生明显的响应。

###############################################################

三者的代码如下:

import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('logo8.jpg',0)
#cv2.CV_64F 输出图像的深度(数据类型),可以使用-1, 与原图像保持一致 np.uint8
laplacian=cv2.Laplacian(img,cv2.CV_64F)
# 参数 1,0 为只在 x 方向求一阶导数,最大可以求 2 阶导数。
sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
# 参数 0,1 为只在 y 方向求一阶导数,最大可以求 2 阶导数。
sobely=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])
plt.show()

三者的结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神笔馬良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值