图像数据处理20

五、边缘检测

5.1基于梯度的边缘检测

5.1.1梯度的基本概念: 在高等数学中,我们都已经对梯度进行了学习,梯度是一个向量,其方向反映了函数在该点变化率最快的方向(即函数沿梯度方向变化最快)。

**5.1.2梯度算子:**梯度算子在图像处理中常用于边缘检测,它通过计算图像中各像素点邻域的灰度值变化来识别图像的边缘。梯度算子的滤波模板可以对图像进行平去噪,进行边缘检测并提供边缘的方向信息。梯度算子的系数可以指定参与计算的像素(将不希望参与特定方向梯度计算的像素点的系数设置为零或接近零的值)还有其的权重大小。通常情况下,梯度算子的滤波器系数之和为零,它确保了梯度算子在恒定灰度区域不会给出错误的边缘检测结果。

5.1.3常见的梯度算子

①Sobel算子

Sobel算子是一种结合了高斯平滑和微分求导运算的离散微分算子。它通过计算图像亮度函数的梯度的近似值来工作。

沿x方向的梯度 沿y方向的梯度

②Prewitt算子

其通过计算像素点邻域的灰度值差分来实现边缘检测,且对噪声具有一定的抑制作用。

③Roberts算子

它是基于交叉差分的梯度算法。Roberts算子通过局部差分来计算检测图像的边缘线条,对具有陡峭边缘且含噪声少的图像效果较好,尤其是边缘处正负45度较多的图像。
标沿对角线方向

沿反对角线方向

Scharr算子

Scharr算子可以看作是Sobel算子的一种优化版本,它在提供更高精度的同时保持了相同的计算速度。

附图与Sobel算子一致

5.1.4:代码与应用实例

python 复制代码
import cv2
import numpy as np

# 读取图像
image = cv2.imread('fu.jpg', cv2.IMREAD_GRAYSCALE)

# 使用Sobel算子进行边缘检测
sobelx = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobely = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)

# 计算梯度幅值
gradient_magnitude = np.sqrt(sobelx ** 2 + sobely ** 2)

# 将梯度幅值映射到0-255范围
gradient_magnitude = np.uint8(255 * gradient_magnitude / np.max(gradient_magnitude))

# 将所有图像缩小一半
scale_percent = 40  # 百分比
width = int(image.shape[1] * scale_percent / 100)
height = int(image.shape[0] * scale_percent / 100)
dim = (width, height)

resized_image = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)
resized_sobelx = cv2.resize(sobelx, dim, interpolation=cv2.INTER_AREA)
resized_sobely = cv2.resize(sobely, dim, interpolation=cv2.INTER_AREA)
resized_gradient_magnitude = cv2.resize(gradient_magnitude, dim, interpolation=cv2.INTER_AREA)

# 显示结果
cv2.imshow('Original', resized_image)
cv2.imshow('Sobel X', resized_sobelx)
cv2.imshow('Sobel Y', resized_sobely)
cv2.imshow('Gradient Magnitude', resized_gradient_magnitude)

cv2.waitKey(0)
cv2.destroyAllWindows()

sobelx = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)

sobely = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)

①cv2.CV_64F:表示输出图像的深度,这里使用64位浮点数。使用浮点数可以防止在计算梯度幅值时发生溢出。

②1, 0表示计算x方向的一阶导数,0, 1表示计算y方向的一阶导数。

③ksize=3:Sobel算子的大小,这里使用3x3的核。

计算梯度幅值

gradient_magnitude = np.sqrt(sobelx ** 2 + sobely ** 2)

计算平方和的平方根,得到梯度幅值

注:本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。

本文的内容主要基于我对张运楚教授编著的《数字图像处理》一书的学习和理解。这本书深入浅出地介绍了数字图像处理的基本理论以及经典算法等,并且提供了丰富的示例代码和实际用例,极大地帮助了我学习图像处理知识。在此,我推荐大家阅读这本书,更加深入的学习有关图像处理的知识。

相关推荐
摸鱼仙人~1 分钟前
Attention Free Transformer (AFT)-2020论文笔记
论文阅读·深度学习·transformer
python算法(魔法师版)14 分钟前
深度学习深度解析:从基础到前沿
人工智能·深度学习
kakaZhui39 分钟前
【llm对话系统】大模型源码分析之 LLaMA 位置编码 RoPE
人工智能·深度学习·chatgpt·aigc·llama
struggle20252 小时前
一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI
人工智能·深度学习·目标检测·语言模型·自然语言处理·数据挖掘·集成学习
佛州小李哥2 小时前
通过亚马逊云科技Bedrock打造自定义AI智能体Agent(上)
人工智能·科技·ai·语言模型·云计算·aws·亚马逊云科技
云空3 小时前
《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》
运维·人工智能·web安全·网络安全·开源·网络攻击模型·安全威胁分析
AIGC大时代3 小时前
对比DeepSeek、ChatGPT和Kimi的学术写作关键词提取能力
论文阅读·人工智能·chatgpt·数据分析·prompt
山晨啊84 小时前
2025年美赛B题-结合Logistic阻滞增长模型和SIR传染病模型研究旅游可持续性-成品论文
人工智能·机器学习
一水鉴天4 小时前
为AI聊天工具添加一个知识系统 之77 详细设计之18 正则表达式 之5
人工智能·正则表达式
davenian5 小时前
DeepSeek-R1 论文. Reinforcement Learning 通过强化学习激励大型语言模型的推理能力
人工智能·深度学习·语言模型·deepseek