正交梯度算子(一阶导)

在边缘灰度值过度比较尖锐切图像中噪声比较小时,梯度算子工作效果好。

1、数字图像中求导数是利用差分近似微分来进行的。

2、梯度对应一阶导,梯度是矢量。
211105131662549.png  
矢量的幅度(有时候常称为梯度)
211105135104275.png
方向角:
211105139947662.png

注意:范数的概念,实际上就是一种求距离的方法,详见 距离度量函数
幅度有这里用欧式距离是2范数,城区距离是1范数,∞范数是棋盘距离。

实际计算中先计算每个图片对应点的(Gx,Gy),然后求范数,范数的值就是灰度图,范数大灰度高的地方是边界。

一般地,计算Gx,Gy都有两个模板,分别对图片做两次卷积,然后再求范数。

总的来说2范数还是精度高一些,但是计算量比较大。

常见的几种模板:

211105143383618.png




转载于:https://www.cnblogs.com/Dr-XLJ/p/3854716.html

### 多边缘 Sobel 算子检测算实现与原理 #### 1. Sobel 算子基本概念 Sobel算子种经典的微分算子,用于图像处理中的边缘检测。该算子通过计算像素点及其邻域内的梯度变化来识别图像中的边界[^4]。 #### 2. 梯度值的计算方 为了获取更精确的边缘信息,在每次遍历时,Sobel算子会分别沿着两个正交的方向(通常是水平和垂直方向)应用不同的卷积核矩阵。具体来说: - **水平方向 (Gx)** 的梯度可以通过以下模板计算: \[ G_x = \begin{bmatrix} -1 & 0 & +1 \\ -2 & 0 & +2 \\ -1 & 0 & +1 \end{bmatrix} * I(x,y) \] - **垂直方向 (Gy)** 的梯度则采用如下模板: \[ G_y = \begin{bmatrix} +1 & +2 & +1 \\ 0 & 0 & 0 \\ -1 & -2 & -1 \end{bmatrix} * I(x,y) \] 其中 \(I(x, y)\) 表示原始输入图像中位于坐标\((x, y)\)处的灰度值;\(G_x\) 和 \(G_y\) 分别代表在X轴和Y轴上的梯度强度[^2]。 #### 3. 综合梯度幅值与角度 当获得了上述两个方向上的梯度之后,可以进步合成总的梯度大小以及其对应的角度θ: - 总体梯度幅度 M 可由下式给出: \[ M=\sqrt{{G_{x}}^{2}+{G_{y}}^{2}} \] - 方向角 θ 则可通过反正切函数获得: \[ \theta=atan2(G_y,G_x) \] 这里 atan2 是四象限反余弦函数,能够返回 [-π,+π] 范围内正确的角度值。 #### 4. Python 实现代码样例 下面是个简单的Python程序片段,展示了如何使用 OpenCV 库执行 Sobel 边缘检测并显示结果: ```python import cv2 import numpy as np from matplotlib import pyplot as plt def sobel_edge_detection(image_path): img = cv2.imread(image_path, 0) # Apply GaussianBlur to reduce noise and improve edge detection results. blur_img = cv2.GaussianBlur(img,(5,5),0) # Compute gradients using Sobel operator along both axes. grad_x = cv2.Sobel(blur_img,cv2.CV_64F,1,0,ksize=5) grad_y = cv2.Sobel(blur_img,cv2.CV_64F,0,1,ksize=5) abs_grad_x = cv2.convertScaleAbs(grad_x) abs_grad_y = cv2.convertScaleAbs(grad_y) # Combine gradient magnitude from X and Y directions into one image. combined_edges = cv2.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0) plt.figure(figsize=(8,6)) plt.subplot(1,2,1);plt.imshow(combined_edges,cmap='gray');plt.title('Combined Edges') plt.show() if __name__ == '__main__': sobel_edge_detection('./example_image.jpg') # Replace with your own file path. ``` 此脚本读取给定路径下的图片文件,并对其进行高斯模糊预处理以减少噪声干扰。接着运用 `cv2.Sobel()` 函数分别提取横向和纵向的梯度信息,最后将两者按权重相加以得到最终的结果图[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值