数字图像处理——边缘检测

本文内容参考《数字图像处理基础》Wilhelm Burger等著。
边缘:图像中那些沿某一方向局部强度变化显著的位置。局部强度变化越强烈,越能证明这一位置存在边缘。

基于梯度的边缘检测:

将图像矩阵的一行灰度变化看作一个一维函数 f(x) ,则像素变化就是 f(x)=dfdx(x) 。对于离散函数 f(u) ,用中心差分公式粗略估计点 u 处的切线斜率

dfdu(u)f(u+1)f(u1)(u+1)(u1)=f(u+1)f(u1)2=(0.500.5)f(u1)f(u)f(u+1)

由上式可见,对原图像像素数组进行边缘检测梯度滤波,就是用线性算子 (0.500.5) 与对应位置的像素数组做卷积线性滤波。

对图像函数局部梯度的近似是很多经典边缘检测算子的基础,不同边缘检测算子的差异在于:(1.)估算梯度分量的滤波器类型;(2.)将这些梯度分量结合起来的办法。而我们在边缘检测时,关心的主要是:(a.)边缘点的强度;(b.)边缘的方向。

(1.)Prewitt算子(滤波矩阵):

HPx=111000111=111(101)

HPy=101101101=(111)101

经尺度因子作用滤波算子后,对 原图像的滤波输出
Dx=16HPxI,Dy=16HPyI

局部边缘强度 E(u,v)
E(u,v)=(Dx(u,v))2+(Dy(u,v))2

局部边缘方向角 Φ(u,v)
Φ(u,v)=arctan(Dy(u,v)Dx(u,v))

(2.)Sobel算子(滤波矩阵):

HSx=121000121=121(101)

HSy=101202101=(121)101

经尺度因子作用滤波算子后,对 原图像的滤波输出
Dx=18HSxI,Dy=18HSyI

局部边缘强度 E(u,v)
E(u,v)=(Dx(u,v))2+(Dy(u,v))2

局部边缘方向角 Φ(u,v)
Φ(u,v)=arctan(Dy(u,v)Dx(u,v))

(3.)改进的Sobel算子(滤波矩阵):

HSx=13231030003103

HSy=13230310010303

经尺度因子作用滤波算子后,对 原图像的滤波输出
Dx=HSxI,Dy=HSyI

局部边缘强度 E(u,v)
E(u,v)=(Dx(u,v))2+(Dy(u,v))2

局部边缘方向角 Φ(u,v)
Φ(u,v)=arctan(Dy(u,v)Dx(u,v))

(4.)Roberts算子(滤波矩阵):使用两个非常小的 2×2 滤波器沿图像的对角线方向估算方向梯度

HR1=(0110)

HR2=(1001)

经尺度因子作用滤波算子后,对 原图像的滤波输出
Dx=12HR1I,Dy=12HR2I

局部边缘强度 E(u,v)
E(u,v)=(Dx(u,v))2+(Dy(u,v))2

局部边缘方向角 Φ(u,v)
Φ(u,v)=arctan(Dy(u,v)Dx(u,v))

一个滤波器如果对类似边缘的结构相应越强,那它对方向性就越敏感。方向不敏感的滤波器趋向于对非边缘结构有良好的响应,而最具识别能力的边缘检测滤波器,通常只对一个比较狭小的角度范围内的边缘有相应。

(5.)罗盘算子(滤波矩阵):使用一系列敏感方向范围较窄的滤波器,如下述的8个方向跨距为 45o 的滤波器。

HS0=121000121HS4=121000121

HS1=210101012HS5=210101012

HS2=101202101HS6=101202101

HS3=012101210HS7=012101210

每个方向的输出
D0=IHS0,D1=IHS1,D2=IHS2,D3=IHS3,D4=D0,D5=D1,D6=D2,D7=D3

(u,v) 处的 边缘强度
ES(u,v)=max(|D0(u,v)|,|D1(u,v)|,|D2(u,v)|,|D3(u,v)|)

局部的边缘方向
ΦS(u,v)=π4j,j=argmax0i7Di(u,v)

基于一阶导数的边缘检测算子得到的边缘是与灰度过渡范围等宽的,因此边缘无法被精确定位。

基于二阶导数的边缘检测:

函数的二阶导数可以度量局部曲率,边缘通常存在于图像函数的二阶导数的零点位置(过零点处)。此外,由于二阶导数通常会放大图像噪声,所以需要用合适的低通滤波器做预平滑处理。

多尺度边缘检测技术:

边缘并不是仅仅存在于某个固定分辨率或尺度上,而是遍及多种可能的尺度。所以,多尺度边缘检测技术首先检测各种尺度下的边缘,然后在每个图像位置上判断哪一个尺度上的那一条边缘是主要的
(1.)Canny算子:在不同分辨率的图像上使用一系列的相对大尺寸的有向滤波器进行滤波,然后将这些滤波结果融合起来成为一张正常的边缘图。它是一种基于一阶导数的梯度方法,使用二阶导数的过零点精确定位边缘。

边缘强度EI可以通过计算图像的梯度来得到。在Python中,可以使用Sobel算子来计算图像的x和y方向的梯度,然后将两个方向的梯度进行加权相加得到边缘强度EI。 具体的计算步骤如下: 1. 将图像转换为灰度图像,如果原始图像已经是灰度图像则不需要进行转换。 2. 使用Sobel算子计算图像在x和y方向的梯度。在Python中,可以使用cv2.Sobel函数,设置参数dx=1和dy=0来计算x方向的梯度,设置参数dx=0和dy=1来计算y方向的梯度。 3. 对计算得到的梯度进行绝对值化,可以使用cv2.convertScaleAbs函数将梯度转换为绝对值类型。 4. 将x和y方向的梯度进行加权相加,可以使用cv2.addWeighted函数,设置参数alpha=0.5和beta=0.5来加权相加。 5. 得到的加权相加结果即为边缘强度EI。 值得注意的是,在计算梯度时,可能需要对图像进行预处理,例如将图像进行模糊或者增强对比度的操作,以提高边缘的清晰度和准确度。 中的代码示例展示了使用Sobel算子计算图像梯度的方法。方法1使用了cv2.Sobel函数,而方法2手动定义了Sobel算子的卷积核并使用cv2.filter2D函数进行卷积运算。无论使用哪种方法,最终得到的ixy即为边缘强度EI。 请注意,本回答仅提供了计算边缘强度EI的方法,具体的代码实现需要根据实际情况进行调整和完善。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [图像融合评估指标Python版](https://blog.csdn.net/fovever_/article/details/129332278)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [cv::边缘检测原理,Python代码实现](https://blog.csdn.net/qq_40242410/article/details/129442731)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值