目录
- 1. 折线转成光滑曲线
- 2. 求拐点
- 3. paper
- 3.1 基于图像轮廓曲线的拐点检测算法
- 摘要
- 0. 引言
- 1. APTD 拐点检测算法
- 1.1 算法原理
- 1.2 拐点判别函数的推导
- 3.2 基于轮廓曲率的多边形角点检测算法
- 参考资料
1. 折线转成光滑曲线
[1] 将折线图转换成光滑的曲线 2021.4;
[2] python 数据、曲线平滑处理 2022.4;
2. 求拐点
3. paper
3.1 基于图像轮廓曲线的拐点检测算法
摘要
拐点是图像很重要的特征,包含图像的主要结构信息,拐点检测对图像配准、目标识别和三维重建
等任务的处理都有着非常重要的作用。
从研究轮廓上点的曲率出发,针对传统基于轮廓的拐点检测算法对噪声和局部变化敏感而造成检测结果不稳定的问题,提出一种间接反映轮廓曲率特性的方法,记为 APTD( Accumulation of Point to Tangent Distance) 。
使用高斯函数对轮廓曲线进行平滑处理,轮廓上点的曲率越大则该点附近的点到该点处切线的距离也越大,根据这一思想,将轮廓上点附近支撑域内的点到该点所对应切线相对距离的累加和作为拐点的判别函数,从而实现轮廓拐点的检测。
经由数学推导表明所提出的算法具有合理性和可行性,对比实验分析表明该算法精度高、运算量小、定位准确。
0. 引言
拐点检测( Corner Detection) 是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维建模和目标识别等领域。目前的拐点检测算法可分为两类: 基于灰度图像的拐点检测算法和基于轮廓曲线的拐点检测算法
。
基于灰度图像的拐点检测算法主要是通过计算像素点各个方向上的灰度变化来检测拐点。这类方法主要有 Moravec 算法、Harris 算法和 Shi-Tomasi 算法。Moravec 算法[1]将拐点定义为自相关性非常低的点,其基本思想是: 在图像中设计一个局部检测窗口,当该窗口沿各个方向做微小移动时,观察窗口的平均能量变化,当该能量变化值超过设定的阈值时,就将窗口的中心像素点提取为拐点。但此方法存在一定的缺陷,例如由于位置点的坐标限制只能最多考虑到 8 个方向的移动变化。
Harris 算法[2]在 Moravec 算法的基础上进行了一定改进,通过自相关矩阵( Harris 矩阵) 变换和偏微分操作,有效解决了 Moravec 算法只能检测 8个方向上基本变化的缺陷。Shi-Tomasi 算法[3]首先假设图像中每个像素的函数值都是稳定且光滑的,然后简化了 Harris 算法中分别求解 Harris 矩阵两个特征值进行判断的方法,直接计算两个特征值中的最小值作为判断依据,并从理论上和实验上证明了这种改进的优势。
基于轮廓曲线的拐点检测算法
[4]主要是利用轮廓上点的曲率信息和几何位置信息来衡量该点的弯曲程度,从而判定该点是否为拐点。其中,最经典的是Mokhtarian 等[5]于 1998 年提出的 CSS( Curvature ScaleSpace) 算法,根据轮廓上每个像素点的曲率值衡量拐点响应程度。该算法首次引入曲率尺度空间的概念,在不同的尺度下检测拐点和定位拐点。由此衍生出了一系列的改进算法,从不同角度对 CSS 算法进行了一定程度的改进,如 ACSS[6]、ARCSS[7]、MSCP[8]等。然而,由于在基于曲率尺度空间的算法中涉及曲率的计算会导致拐点检测的不稳定性和不精确性,并且对噪声比较敏感,于是 Awrangjeb 等[9]于 2008 年提出了CPDA( Chord-to-Point Distance Accumulation) 算法,在详细分析了基于曲率尺度空间的算法的局限性之后,提出一种从侧面反映曲率的方法,利用轮廓曲线上的点到弦的距离累加和作为拐点判别函数,从而实现拐点的检测。
本博文针对在高压输电线的视觉测量过程中出现的,由于图像分割不完全,使提取到的输电线轮廓边缘有大量连通域的问题,研究了图像轮廓曲线的拐点检测算法,并提出一种新的反映曲率特性的拐点检测方案,从曲线轮廓上点的切线出发,利用该点周围的点,到该点切线的相对距离的累加和作为拐点判别函数,从而实现拐点的检测,避免了使用一阶和二阶导数,因此拐点判别函数对噪声和局部细节的鲁棒性较好,为解决图像轮廓曲线的连通域去除问题做了铺垫。
1. APTD 拐点检测算法
1.1 算法原理
如图 1 所示,以两条开口向上的抛物线 和 为例,黑色粗线表示两条曲线的切线并且切点是原点。对于切线上以原点为切点的附近一点,从该点出发作一条垂线与两条曲线分别交于 、 。从而可知 ,,有 。
所以可以得出结论,对于曲线上某一点来说,曲线开口越小( 曲率越大) ,该点附近的点,到以该点为切点的切线的距离越大。通过这一思想,下面给出拐点判别函数的推导。
1.2 拐点判别函数的推导
假设轮廓上 位置上的点为 ,那么半径为 的支持域内的点集可以表示为 ,不妨令 时该位置弧长 。具体推导步骤如下。
( 1) 弧长参数化方程。
由弧长参数化方程可得,支持域内的点集可使用弧长作为参数,从而转化为关于 、的两个坐标点列和。
因而构造弧长关于 , 的函数:
为了计算的方便和算法的简洁,使用不超过二次的函数来构造弧长关于 ,
假设:
x( S) = λ0 + λ1 S + λ2 S2
{y( S) = μ0 + μ1 S + μ2 S2
其中,${ ( S_{m + 1},x_{m + 1} ) } Ll = - L,分别为 x( S) ,y( S) 上的点,则系数 和 是满足 x ( Sm ) 和
y( Sm ) = ym 最小二乘意义下的解,由 Sm = 0 可得:
3.2 基于轮廓曲率的多边形角点检测算法
角点 是二维图像中亮度变化剧烈的点,或者是目标轮廓上曲率变化
的局部极大值点。角点包含重要的图像信息,角点在目标跟踪、三维重建、图像融合、图像配准、全景图像拼接等方面都扮演着重要角色。
目前的角点检测算法可以归纳为以下四类:基于灰度图像的角点检测;基于数学形态学的角点检测算法;基于二值图像的角点检测;基于轮廓曲率的角点检测。
而基于图像的角点检测算法容易受到图像噪声的影响而出现伪角点的现象。本文研究了一种基于轮廓曲率的角点检测算法,算法具有较高的计算效率和稳定性,实现了对任意多边形轮廓角点的检测实验,并得到了可靠的轮廓角点。
参考资料
[] 基于轮廓曲率的多边形角点检测算法 [J] 2019.10;
[2] python 数据、曲线平滑处理 2022.4