论文解读—— 基于边缘梯度方向插值和 Zernike 矩的亚像素边缘检测

论文:《 Subpixel edge detection based on edge gradient directional interpolation and Zernike moment》
地址: http://www.dpi-proceedings.com/index.php/dtcse/article/view/24488

摘要

在本文中,我们提出了一种基于边缘梯度方向插值和 Zernike 正交矩的新型亚像素边缘检测方法。由于对边缘邻域进行插值,所提出的方法能够丰富边缘信息,并确保矩模板内只有一个边缘。边缘信息的丰富不仅增加了基于矩的方法的检测精度,还增加了检测到的亚像素边缘点的数量。实验结果表明,该方法可以极大地提高边缘检测的准确性,并且在图像中存在复杂边缘时能够避免边缘干扰的问题。

一、引言

边缘检测是图像处理中的基本任务。传统基于梯度的边缘检测方法只能定位到像素级别的边缘。一般来说,通过增加采样频率可以提高边缘检测的准确性。然而,最大采样率受到物理设备条件的限制,无法无限增加。此外,在实际的工业应用中,成本也是一个重要的不可避免的考虑因素。这一问题导致了亚像素边缘检测算法的诞生。亚像素边缘检测可以理解为一种通过图像处理算法,在不改变摄像机系统硬件条件的情况下使边缘精度小于一个像素的方法。
早期的边缘检测算法是基于梯度的,通过计算局部梯度或导数的最大值来定位边缘点。其中最典型的算子包括 Sobel、Prewitt 和 Robert 算子。后来,Canny 综合了以前的工作,提出了一种基于非极大值抑制和形态连通操作的方法来寻找最优边缘。这种方法取得了良好的结果,并且在今天被广泛使用。其他的边缘检测算法包括 Malik 的边缘检测方法,这种方法很出色,但也比较复杂。其他像素级边缘检测算法可以在文献[6-8]中找到。对于亚像素边缘检测,目前流行的方法包括基于拟合的方法、基于矩的方法和基于插值的方法。拟合方法是通过拟合假设边缘模型的灰度值来解决亚像素边缘位置的方法,通常是基于高斯函数的边缘模型。插值方法的核心思想是通过插值像素的灰度值或灰度值的导数来增加边缘信息。二次插值算法简单且易于实现。特别是当光学系统的扩散函数是对称的时,插值边缘的检测精度很高。然而,其缺点是容易受到噪声的干扰。基于矩的方法的核心思想是利用图像的矩信息来解决边缘参数。矩有很多种,例如空间矩、Zernike 矩等。Ghosal 首先使用的 Zernike 矩方法只需要计算3个模板。计算量比空间矩小,精度也高。后来,Qu 提出了一个改进算法,通过增加 Zernike 矩的阶数或增加模板的大小来提高亚像素定位的准确性。
目前,通过矩方法检测亚像素已被证明是一种简单而准确的方法。即便如此,在实际应用中,并没有一种普遍适用的方法,精度仍有很大提升空间。基于矩的建模是基于图像边缘是理想的阶跃边缘的假设。为了提高检测精度,一个有效且简单的方法是增加矩的模板大小。然而,当模板内部存在复杂的边缘时,这些边缘可能会相互干扰,导致边缘定位错误。由于很难确保模板内只有一个边缘,如果模板内存在多个边缘,那么就需要重新对边缘进行建模。然而,经过分析,普遍重新对边缘进行建模不仅困难,而且很难获得准确的分析解决方案。通过严格的边缘参数重新建模图像边缘也很难找到尽可能多的亚像素边缘点。此外,基于严格的边缘参数重新建模后的阈值进行后续边缘过滤也非常复杂。随着硬件计算的快速加速,更精确的方法也随之而来。
通过总结亚像素边缘检测算法的优缺点,本文提出了一种改进方法。首先,基于像素级别获得边缘的粗略位置,并追踪边缘点的邻域。为了提高边缘的准确性,同时避免上述问题,本文提出通过在边缘邻域进行梯度方向的插值来丰富边缘信息。由于对边缘邻域进行了插值,扩大了矩模板进行卷积的区域。因此,能够确保模板内只有一个边缘,从而有效地避免了边缘之间的干扰。同时,丰富的边缘信息不仅增加了基于矩方法的检测准确性,还增加了检测到的亚像素边缘点的数量。此外,如果在插值后对邻域进行Canny像素级边缘定位操作,则可以检测到双边缘,这意味着可以获得具有厚度特性的亚像素边缘。最后,采用大规模掩模Zernike矩方法来检测邻域边缘并推导出亚像素级别的边缘参数。
本文的结构如下所述。第3节简要介绍了Zernike矩的原理。在第4节中,讨论了基于7*7掩模的Zernike矩的亚像素边缘检测,并给出了理论推导。第5节讨论了在边缘点邻域内的梯度插值方法。在第6节中,设计了两个实验来验证边缘亚像素定位的准确性以及复杂边缘定位的能力。最后,在第7节中给出了一些结论。

二、Zernike图像矩

在连续域中,可以证明一个函数可以用单位圆内的多项式的组合来描述,即 x 2 + y 2 ≤ 1 x^2 + y^2\le1 x2+y21。Zernike 多项式是一种正交完备的多项式,因此函数可以无冗余地描述。对于一幅图像 f ( x , y ) f(x,y) f(x,y) 的阶数为 n n n 且重复次数为 m m m的 Zernike 矩被定义为 [17]:
Z n m = n  ⁣ +  ⁣ 1 π ∬ x 2 + y 2 ≤ 1 f ( x , y ) V n m ∗ ( ρ , θ ) d x d y ( 1 ) Z_{n m}=\frac{n\!+\!1}{\pi}\iint_{x^{2}+y^{2}\le1}f(x,y)V_{n m}^{\ast}(\rho,\theta)d x d y \qquad(1) Znm=πn+1x2+y21f(x,y)Vnm(ρ,θ)dxdy(1)
在离散图像中,当 x 2 + y 2 ≤ 1 x^2 + y^2 \le 1 x2+y21 时, Z ( n m ) Z_(nm) Z(nm)可以如下表示,其中 n n n m m m 是非负整数。
Z n m = Σ x Σ y f ( x , y ) , V n m ∗ ( ρ , θ ) ( 2 ) Z_{n m}=\Sigma_x \Sigma_y f(x,y),V_{n m}^{\ast}(\rho,\theta) \qquad(2) Znm=ΣxΣyf(x,y),Vnm(ρ,θ)(2)
Zernike多项式 V n m V_{nm} Vnm可以表示为:
V n m = R n m ( ρ ) e i m θ , ∣ ρ ∣ ≤ 1 ( 3 ) V_{nm}=R_{nm}(\rho)e^{i m\theta},|\rho|\leq1 \qquad(3) Vnm=Rnm(ρ)eimθ,ρ1(3)

其中 R n m ( ρ ) R_{nm}(\rho) Rnm(ρ)是径向函数,当 n − m n-m nm是奇数时, R n m ( ρ ) = 0 R_{nm}(\rho)=0 Rnm(ρ)=0。当 n − m n-m nm是偶数时, R n m ( ρ ) R_{nm}(\rho) Rnm(ρ)可以表示为:
R n m ( ρ ) = Σ k = 0 ( n − ∣ m ∣ ) / 2 ( − 1 ) k ( n − k ) ! k ! ( n + ∣ m ∣ 2 − k ) ! ( n − ∣ m ∣ 2 − k ) ! ρ n − 2 k ( 4 ) R_{n m}(\rho)=\Sigma_{k=0}^{(n-|{\bf m}|)/2}\frac{(-1)^{k}(n-k)!}{k!(\frac{n+|{\bf m}|}{2}-k)!(\frac{n-|{\bf m}|}{2}-k)!}\rho^{n-2k} \qquad(4) Rnm(ρ)=Σk=0(nm)/2k!(2n+mk)!(2nmk)!(1)k(nk)!ρn2k(4)

结合方程 (2) 和 (3) 计算 Zernike 多项式。因此,我们可以通过查表来找到 Zernike 多项式 V n m V_{nm} Vnm。根据方程 (2),我们可以轻松地计算图像 f ( x , y ) f(x,y) f(x,y)的 Zernike 矩。此外,Zernike 矩具有一个重要的特性,即旋转不变性,即:

Z n m ′ = Z n m e − i m ϕ ( 5 ) Z_{n m}^{\prime}=Z_{n m e}^{}-i m\phi \qquad(5) Znm=Znmeimϕ(5)

其中 Z n m ′ Z_{nm}^{\prime} Znm 是旋转后图像的 Zernike 矩, Z n m Z_{nm} Znm是原始图像的 Zernike 矩。方程 (5) 显示了图像旋转后 Zernike 矩的变化,即旋转后图像的 Zernike 矩的大小,而原始图像的 Zernike 矩不会改变。

基于Zernike Moment的边缘检测

为了定位亚像素边缘位置,建立一个2-D单位圆模型,其中有一个理想的阶跃边缘。正如图1所示, k k k是阶跃的高度, h ℎ h是背景的高度, l l l是边缘与单位圆中心之间的距离。当理想的边缘线旋转时,它将垂直于 x x x轴。接下来,我们将使用Zernike矩来计算这组边缘位置参数,即 h 、 k 、 l ℎ、k、l hkl

在这里插入图片描述

图1. 亚像素边缘检测的理想模型。

在这里插入图片描述
图2. Zernike 7*7掩码模型。

现在假设这个模型是 f ( x , y ) f(x,y) f(x,y),根据方程(2)和方程(5)计算其旋转的 Zernike 矩 7。解方程得到$ ℎ,k,l$ 的值
k = 3 Z ′ 2 ( 1 − l 2 2 ) 3 / 2 ( 6 ) k={\frac{3Z^{\prime}}{2(1-l_{2}^{2})^{3/2}}} \qquad(6) k=2(1l22)3/23Z(6)
h = 1 π [ Z 00 − k π 2 + k a r c s i n ( l 2 ) + k l 2 1 − l 2 2 ] ( 7 ) h=\frac{1}{\pi}\Big[Z_{00}-\frac{k\pi}{2}+k a r c s i n(l_{2})+k l_{2}\sqrt{1-l_{2}^{2}}\Big]\qquad(7) h=π1[Z002+karcsin(l2)+kl21l22 ](7)
l = l 1 + l 2 2 = 1 2 [ 5 Z 40 ′ + 3 Z 20 ′ 8 Z 20 ′ + 5 Z 11 ′ + Z 11 ′ 6 Z 11 ′ ] ( 8 ) l=\frac{l_{1}+l_{2}}{2}=\frac{1}{2}\Biggl[\sqrt{\frac{5Z_{40}^{\prime}+3Z_{20}^{\prime}}{8Z_{20}^{\prime}}}+\sqrt{\frac{5Z_{11}^{\prime}+Z_{11}^{\prime}}{6Z_{11}^{\prime}}}\Biggr]\qquad(8) l=2l1+l2=21[8Z205Z40+3Z20 +6Z115Z11+Z11 ](8)
ϕ = arctan ⁡ [ I m [ Z n 1 ] R e [ Z n 1 ] ] ( 9 ) \phi=\arctan\left[\frac{I m[Z_{n1}]}{R e[Z_{n1}]}\right]\qquad(9) ϕ=arctan[Re[Zn1]Im[Zn1]](9)

如上所述,我们推导出边缘参数 h , k , l h,k,l h,k,l ϕ \phi ϕ。因此,边缘在单位圆内的亚像素位置可以标记为
[ x s y s ] = [ x + l cos ⁡ ( ϕ ) y + l sin ⁡ ( ϕ ) ] ( 10 ) \left[{\begin{array}{c}{x_{s}}\\ {y_{s}}\end{array}}\right]={\left[\begin{array}{c}{x+l\cos(\phi)}\\ {y+l\sin(\phi)}\end{array}\right]}\qquad(10) [xsys]=[x+lcos(ϕ)y+lsin(ϕ)](10)

然而, ( x , y ) (x,y) (x,y)在实际的离散图像中,我们使用 N ∗ N N*N NN像素范围来近似单位圆,如图2所示。单位圆被划分为 7 ∗ 7 7*7 77个区域。上述计算结果基于单位圆内的 7 ∗ 7 7*7 77区域。我们将实际图像上每个点的像素值放入单位圆的 7 ∗ 7 7*7 77区域中,以计算亚像素边缘参数。但实际上,将一个像素划分为 7 ∗ 7 7*7 77个邻域是不可能的。因此,从单位圆导出的边缘位置参数 l l l最终要乘以缩放因子 N / 2 N/2 N/2。只有这样,才能检测到图像边缘的亚像素位置。
S u b p i x e l = [ y s X s ] = = [ x + l N 2 cos ⁡ ( ϕ ) y + l N 2 sin ⁡ ( ϕ ) ] ( 11 ) Subpixel=\left[_{y_{s}}^{X_{s}}\right]=={\left[\begin{array}{l}{x+{\frac{l N}{2}}\cos(\phi)}\\ {y+{\frac{l N}{2}}\sin(\phi)}\end{array}\right]}\qquad(11) Subpixel=[ysXs]==[x+2lNcos(ϕ)y+2lNsin(ϕ)](11)

从以上讨论可以得知,通过推导图像的 M n 1 M_{n1} Mn1阶矩,可以使用方程(9)计算;然后,我们推导出图像的其他Zernike矩,并得到旋转后的图像Zernike矩。最后,我们通过方程(7)、(6)、(8)获得边缘参数 h , k , l h,k,l h,k,l。因此,在图像的 N ∗ N N*N NN区域内计算Zernike矩非常重要,这将决定整个检测的准确性。
为了近似图像的Zernike矩,我们构建了一系列的掩模,可以通过下面公式来导出:
M n m ( i , j ) = ∬ Ω i , j = C ∩ S i , j V n m ∗ ( ρ , θ )   d x   d y ( 12 ) M_{n m}(i,j)=\textstyle\iint_{\Omega_{i,j}=C\cap S_{i,j}}V_{n m}^{*}(\rho,\theta)\,dx\,dy\qquad(12) Mnm(i,j)=Ωi,j=CSi,jVnm(ρ,θ)dxdy(12)

Zernike多项式是通过查找方程式(3)获得的,用于计算图像Zernike矩的掩模是通过Matlab计算获得的。将图像的每个点的N*N区域与这些掩模进行卷积,得到M

最后,通过将M
代入方程(6)(8)(7)(9)中,我们可以得到边缘的参数 h , k , l ℎ,k,l h,k,l的和。通过设置特征阈值 l T , k T l_T,k_T lT,kT(如方程(13)(14)所示),我们可以过滤出特定的边缘位置或确保检测准确性。
l ≤ l T ( 13 ) l\leq l_{T}\qquad(13) llT(13)
k ≥ k T ( 14 ) k\geq k_{T}\qquad(14) kkT(14)

基于方向插值的亚像素边缘检测

与连续域中的讨论不同,由于图像的离散性,亚像素边缘的检测必然会存在误差。使用 Zernike 矩来定位边缘的亚像素,主要误差的原因是 M n m M_{nm} Mnmmask 的大小。如果图像只有简单且稀疏的边缘,大尺寸的 mask 可以带来高精度。然而,正如在第1节中提到的,如果图像中存在彼此相邻的复杂边缘,边缘检测中将会出现误差。
A c c u r a c y ∝ N ( 15 ) Accuracy\propto N \qquad(15) AccuracyN(15)
此外,当掩模覆盖区域内的边缘信息较少时,描绘细节的能力也较差。

为了克服这一限制,本文提出了一种改进的亚像素边缘检测算法。其原理是根据边缘的梯度方向进行插值,丰富其位置信息,使得大尺寸的 Zernike 矩掩模可以发挥其准确的边缘定位能力。

Canny 算法被应用于近似边缘点。边缘点的梯度 f ( x , y ) f(x,y) f(x,y)可以表示为:
g r a d f ( x , y ) = ∇ f ( x , y ) = { ∂ f ( x , y ) ∂ x , ∂ f ( x , y ) ∂ y } ( 16 ) gradf(x,y)=\nabla f(x,y)=\left\{\frac{\partial f(x,y)}{\partial x},\frac{\partial f(x,y)}{\partial y}\right\}\qquad(16) gradf(x,y)=f(x,y)={xf(x,y),yf(x,y)}(16)

边缘点场的梯度方向插值可以表示为
x t = ⌊ C t ∂ f ( x , y ) ∂ x ⌋ , y t = ⌊ C t ∂ f ( x , y ) ∂ y ⌋ ( 17 ) x_{t}=\left\lfloor C_{t}{\frac{\partial f(x,y)}{\partial x}}\right\rfloor,y_{t}=\left\lfloor C_{t}{\frac{\partial f(x,y)}{\partial y}}\right\rfloor\qquad(17) xt=Ctxf(x,y),yt=Ctyf(x,y)(17)

在公式17中, x t , y t x_t,y_t xt,yt表示边缘点在 N ∗ N N*N NN域中在x方向和y方向上的扩展次数, C t C_t Ct是一个常数, ⌊ ⌋ ⌊⌋ 符号表示向上取整。
应用图3中显示的双线性插值方法对边缘点进行扩展。如图4所示,如果插值后的图像经过Canny检测,则可以获得双边缘信息。通过与原始边缘的映射信息,可以找到原始边缘的双边缘信息。这将进一步增加边缘亚像素的检测深度,并获得原始边缘更丰富的亚像素信息。
S u b p i x e l = [ x s y s ] = [ x / x t + l N 2 x t cos ⁡ ( ϕ ) y / y t + l N 2 y t sin ⁡ ( ϕ ) ] ( 18 ) Subpixel=\left[{\begin{array}{l}{x_{s}}\\ {y_{s}}\end{array}}\right]=\left[{\begin{array}{c}{x/x_{t}+{\frac{l N}{2x_{t}}}\cos(\phi)}\\ {y/y_{t}+{\frac{l N}{2y_{t}}}\sin(\phi)}\end{array}}\right]\qquad(18) Subpixel=[xsys]=[x/xt+2xtlNcos(ϕ)y/yt+2ytlNsin(ϕ)](18)
如图4所示,如果经过插值处理的图像经过Canny边缘检测,就可以获得双边缘信息。通过与原始边缘的映射信息,可以找到原始边缘的双边缘信息。这将进一步增加边缘亚像素的检测深度,并获得原始边缘更丰富的亚像素信息。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/471863.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

D2587A高压大电流DC-DC,采用TO220T-5L或TO263-5L封装形式

1、概述 D2587A稳压器是专为反激式、升压和正向转换器应用而设计的单片集成电路。该器件提供四种不同的输出电压版本:3.3V、5V、12V 和可调节电压。这些稳压器需要的外部元器件很少,因此具有成本效益,并且易于使用。该电源开关是一款5A NPN器…

介绍5款 世界范围内比较广的 5款 mysql Database Management Tool

介绍5款 世界范围内比较广的 5款 Mysql Database Management Tool 文章目录 介绍5款 世界范围内比较广的 5款 Mysql Database Management Tool前言MySQL Workbench:Navicat Premium:DBeaver Community:HeidiSQL:SQLyog&#xff1a…

每日学习笔记:C++ STL 的无序容器(unordered_set、unordered_map)

定义 特性 能够快速查找元素 操作函数 负载系数 元素个数 / bucket个数 提供哈希函数 提供等价准则 方法一:重写元素的操作符 方法二:自定义函数对象

点云配准:从二维到三维的艺术

点云配准:从二维到三维的艺术 在计算机视觉和机器学习的领域中,配准是一个至关重要的步骤,它涉及到将不同视角或时间点捕获的数据集对齐到同一个坐标系统中。这一过程不仅对二维图像至关重要,而且在三维世界的理解中也发挥着关键作…

Apipost IDEA插件新升级,Apipost Helper上架IDEA插件市场

大家好!今天向大家介绍一个非常方便的IDEA插件——Apipost Helper!相信很多使用过Apipost的朋友在开发过程中都希望能够直接将编写好的API同步至Apipost,而无需手动填写。前段时间,Apipost推出了Apipost IDEA插件的内测版&#xf…

YOLOv4学习

YOLOv4学习 什么是 parameter aggregation?什么是 Skip-connections?正是梯度的反向传播才使得损失函数得以在训练过程中不断优化,以使得模型逐渐学习到“正确的”知识,对吗?什么是Bag-of-Freebies?什么是B…

LLM—Transformer作用及信息流

一、Transformer的作用 Transformer架构的精髓在于其创新性地采用了编码器与解码器的堆叠设计,这一设计巧妙地融合了多头自注意力机制(Multi-Head Attention)和位置前馈网络(Position-wise Feed Forward Network)两大核…

LeetCode:2312. 卖木头块(DP Java)

目录 2312. 卖木头块 题目描述: 实现代码与解析: dp 原理思路: 2312. 卖木头块 题目描述: 给你两个整数 m 和 n ,分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices ,其中 prices[…

LLM之RAG实战(三十二)| 使用RAGAs和LlamaIndex评估RAG

在之前的文章中,我们介绍了RAG的基本流程和各种优化方法(query重写,语义分块策略以及重排序等)。那么,如果发现现有的RAG不够有效,该如何评估RAG系统的有效性呢? 在本文中,我们将介绍…

OJ_汉诺塔问题

有三根柱子和一些大小不同的圆盘,开始时所有的圆盘都按照从小到大的顺序堆叠在柱子A上,要求把所有的圆盘移动到柱子C上,但是移动过程中要满足以下规则: 每次只能移动一个圆盘。不能将一个较大的圆盘放在较小的圆盘上面。 #incl…

【工具】Docker 入门及常用指令

SueWakeup 个人主页:SueWakeup 系列专栏:为祖国的科技进步添砖Java 个性签名:保留赤子之心也许是种幸运吧 目录 1. 什么是 Docker ? 2. Docker 安装 3. Docker 镜像 4. Docker 容器 4.1 运行容器 4.2 查看正在运行的容器 4…

leetcode 714

leetcode 714 题目 例子 思路1 使用dp[n][2] 存储最佳利润值,动态规划的思路,重要的是转移方程。 代码1 class Solution { public: int maxProfit(vector& prices, int fee) { int n prices.size(); //dp[i][0] 前i天手里没有股票的最大利润 //…

Spring Bean的生命周期流程

前言 Java 中的公共类称之为Java Bean,而 Spring 中的 Bean 指的是将对象的生命周期,交给Spring IoC 容器来管理的对象。所以 Spring 中的 Bean 对象在使用时,无需通过 new 来创建对象,只需要通过 DI(依赖注入&#x…

使用光标精灵更换电脑鼠标光标样式,一键安装使用

想要让自己在使用电脑时更具个性化,让工作和娱乐更加愉快,改变你的电脑指针光标皮肤可能是一个简单而有效的方法。很多人或许并不清楚如何轻松地调整电脑光标样式,下面我就来分享一种简单的方法。 电脑光标在系统里通常只有几种默认图案&…

一次性支持 200 万字无损上下文!Kimi智能助手玩了个大的——月之暗面「登月」最新进展!

让大模型一次性无损地「吃下」一本书已经不是什么稀奇的事了,但如果我告诉你是下面👇🏻这样一本近百万字的书呢? 没错,这么疯狂的事竟然真的发生了——就在昨天月之暗面(Moonshot AI)召集了一次…

mysql 更新时,旧值与新值相同会怎么做?

文章目录 1 问题描述2 验证2.1 验证猜想12.2 验证猜想2 3 结论4 mysql 为什么这么设计呢? 1 问题描述 创建一张表t,插入一行数据 mysql> CREATE TABLE t ( id int(11) NOT NULL primary key auto_increment, a int(11) DEFAULT NULL ) ENGINEInnoDB…

9.登入页面

登入页面 在pages中新建页面login 修改代码 <template><view></view> </template><script setup></script><style lang"scss"></style>添加头像组件 官网 https://vkuviewdoc.fsq.pub/components/avatar.html …

vue:功能【xlsx】动态行内合并

场景&#xff1a;纯前端导出excel数据&#xff0c;涉及到列合并、行合并。 注&#xff09;当前数据表头固定&#xff0c;行内数据不固定。以第一列WM为判断条件&#xff0c;相同名字的那几行数据合并单元格。合并的那几行数据&#xff0c;后面的列按需求进行合并。 注&#x…

github 如何关闭 2FA

一开始按照各种教程都找不到&#xff0c;新版的太小了&#xff0c; https://github.com/settings/security

HTML实现卷轴动画完整源码附注释

动画效果截图 页面的html结构代码 <!DOCTYPE html> <html> <head lang=