图像数据处理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)

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

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

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

相关推荐
金融小师妹3 分钟前
基于哈塞特独立性表态的AI量化研究:美联储政策独立性的多维验证
大数据·人工智能·算法
qinyia1 小时前
Wisdom SSH 是一款创新性工具,通过集成 AI 助手,为服务器性能优化带来极大便利。
服务器·人工智能·ssh
硬件学长森哥3 小时前
Android影像基础--cameraAPI2核心流程
android·计算机视觉
昨日之日20063 小时前
Wan2.2-S2V - 音频驱动图像生成电影级质量的数字人视频 ComfyUI工作流 支持50系显卡 一键整合包下载
人工智能·音视频
深圳市快瞳科技有限公司4 小时前
小场景大市场:猫狗识别算法在宠物智能设备中的应用
算法·计算机视觉·宠物
SEO_juper6 小时前
大型语言模型SEO(LLM SEO)完全手册:驾驭搜索新范式
人工智能·语言模型·自然语言处理·chatgpt·llm·seo·数字营销
攻城狮7号7 小时前
腾讯混元翻译模型Hunyuan-MT-7B开源,先前拿了30个冠军
人工智能·hunyuan-mt-7b·腾讯混元翻译模型·30个冠军
zezexihaha7 小时前
从“帮写文案”到“管生活”:个人AI工具的边界在哪?
人工智能
算家云7 小时前
nano banana官方最强Prompt模板来了!六大场景模板详解
人工智能·谷歌·ai大模型·算家云·ai生图·租算力,到算家云·nano banana 提示词
暴躁的大熊7 小时前
AI助力决策:告别生活与工作中的纠结,明析抉择引领明智选择
人工智能