边缘检测(Edge Detection)
文章首发:xmoon.info
边缘提取#
在大多数时候图像的边缘可以承载大部分的信息,并且提取边缘可以除去很多干扰信息,提高处理数据的效率
目标:#
识别图像中的突然变化(不连续)
- 图像的大部分语义信息和形状信息都可以编码在边缘上
- 理想:艺术家使用线条勾勒画(但艺术家也使用对象层次的知识)
边缘的种类#
- 表面形状的突变
- 深度方向的不连续
- 表面颜色的突变
- 光线阴影的不连续
边缘的特征#
边缘是图像强度函数中快速变化的地方,变化的地方就存在梯度,对灰度值求导,导数为0的点即为边界点
卷积的导数
- 偏导数公式:
∂f(x,y)∂x=limε→0f(x+ε,y)−f(x,y)ε∂f(x,y)∂x=limε→0f(x+ε,y)−f(x,y)ε
- 在卷积中为描述数据,采取 近似化处理:
∂f(x,y)∂x≈f(x+1,y)−f(x,y)1∂f(x,y)∂x≈f(x+1,y)−f(x,y)1
显然在x方向的导数就是与该像素自身与右边相邻像素的差值
卷积描述偏导
使用卷积核处理
有限差分滤波器(卷积核)
- Roberts 算子
Roberts 算子是一种最简单的算子,是一种利用局部差分算子寻找边缘的算子。他采用对角线方向相邻两象素之差近似梯度幅值检测边缘。检测垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感,无法抑制噪声的影响。
1963年, Roberts 提出了这种寻找边缘的算子。 Roberts 边缘算子是一个 2x2 的模版,采用的是对角方向相邻的两个像素之差。
Roberts 算子的模板分为水平方向和垂直方向,如下所示,从其模板可以看出, Roberts 算子能较好的增强正负 45 度的图像边缘。
dx=[−1001]
dy=[0−110]
- Prewitt算子
Prewitt 算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用。Prewitt算子适合用来识别噪声较多、灰度渐变的图像。
dx=[10−110−110−1]
dy=[−1−1−1000111]
- Sobel算子
Sobel算子是一种用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导。Sobel 算子在 Prewitt 算子的基础上增加了权重的概念,认为相邻点的距离远近对当前像素点的影响是不同的,距离越近的像素点对应当前像素的影响越大,从而实现图像锐化并突出边缘轮廓。
dx=[10−120−210−1]
dy=[−1−2−1000121]
图像梯度#
∇f=[∂f∂x,∂f∂y]
- 梯度指向强度增长最快的方向
- 梯度的角度
边的方向与梯度方向垂直
θ=tan−1(∂f∂y/∂f∂x)
- 梯度的模长(幅值)
可以说明是边缘的可能性大小
||∇f||=√(∂f∂x)2+(∂f∂y)2
高斯滤波器#
当图像的像素存在大量噪点时,相邻的像素差异大,所求梯度也会偏大,无法提取边缘信息。
解决方案
高斯滤波器的导数
Candy 边缘检测#
门限化
经过处理后,可以得到边缘图,但存在很多高频噪点,通过设置更高的门限,过滤噪点,使得到的边缘更“纯粹”
非最大化抑制
在通过高斯滤波后可以得到图像的大致轮廓线,由于图像的像素变换通常是缓慢改变的, 在处理后的图像中仍然存在大量的粗的“边”
- 检查像素是否沿梯度方向为局部最大值,选择沿边缘宽度的最大值作为边缘
- 处理后
经过上面的处理后,已经可以较为粗糙的得到图像的边缘图,但仍然存在问题,在有些部分的边 缘不连续,失去了很多信息如上图的黄色区域
,这是由于在门限化的过程中,设置过小,导致将需要的边缘滤除。
双门限法
- 先使用高门限将较粗的边检测出来,这些边都是比较鲁棒的,是噪声的可能性极低
- 再降低门限,将较细的边显现出来
- 将与高门限过滤出的边连接的低门限边保留,滤除没有连接的(不连续的)噪声
- 处理后可以得到更好的边缘效果
学习资源:北京邮电大学计算机视觉——鲁鹏
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)