基于曲线曲度或类曲度的角点检测方法总结原创
tostq
主要介绍了基于曲线曲度的角点检测方法，不仅介绍了早期的曲度计算方法，还包括了CSS方法、CPDA方法、样条曲线参数估计曲度方法、协方差矩阵估计曲度方法等，最后还给出了针对这些方法最新的一些改进，如基于小波、基于多尺度乘积、自适应角度阈值、动态迭代ROS等等。
一旦我们知道边缘每点的曲度，那么我们就能非常好的区分角点。
通过计算曲线曲度或者可以衡量曲度的其它量，自然而然成为我们检测角点的一种方法。
传统的基于曲线的角点检测方法一般操作在二值边缘图中，这些边缘图都是由前期边缘检测获得。
所以这类方法一般都包含了五个步骤:边缘提取、曲线平滑、曲度估计、找到角点、及角点追踪(从粗尺度到细尺度)。
曲线平滑及曲度估计这是这个方法非常关键的步骤，平滑曲线可以减少量化噪声(高斯滤波器最为常用)，而曲度估计则关系到检测角点的正确于否。
基于曲线曲度估计的角点检测方法的一般性步骤如下:
(1)首先通过边缘提取算法(如Canny等)获得二值边缘图
(2)然后根据连接相邻的边缘获得轮廓，并检测出T-连接
(3)接下来，我们考虑一组边缘序列:
这些点在边缘上相邻排列，然后我们可能会为每点建立一个支撑区域ROS(region of support)作为计算该点曲度的区域(基于ROS的方法)，然后我们在该区域下应用曲度计算。
(4)考虑那些局部最大值作为角点候选(在这里一般会设置曲度阈值，曲度绝对值要大于其才会被认为是角点候选)
(5)提高角点位置精度(一般如CSS，可采用更高尺度下到较低尺度下追踪角点)
(6)增加曲度估计无法识别的角点(如比较T-连接和其它角点，移除两个接近角点的一个)
下面我们重点介绍下曲线曲度估计的方法
早期曲度估计方式是直接将点同其相邻两点的夹角余弦作为曲度的衡量，不过这样方式非常容易受到噪声的影响，所以很快就提出将同相邻两点的夹角，改成同其ROS区域最远端的两点夹角，如下公式:
为了提高鲁棒性，也进一步消除噪声的影响，RW75方法提出了使用的平均k余弦值，其公式改进如下:
另一种用的更多的方法，是直接通过正切值来计算实际的角度，如FD77方法。
由于ROS区域确定很容易平滑小细节，而且需要预先计算，这个方法并不需要预先计算ROS，这个方法是基于角点或曲度非常大的地方，其曲度变化较大，由此其提出了曲度增长定义:
然后，某点位置的曲度增加计算为:
以上指的是前后两边，作为最大的空间可以保持曲度增长不变(在 之间)，这里指:
最后如果Sik超过某个阈值，就可以认为其是角点候选
另外，BT87方法对FD77方法进行了一些改进，其对t增加了一些限制，使其不要太大。
另外这个累积角度增长也可以用平均值来代替:
还有一种更为直接方法:将曲线上的每一点都可以内切成一个三角形:
由此我们可以计算角度，这里两点P-和P+不能太大也不能太小:
二、曲线参数估计方法
一旦我们知道边缘曲线的参数形势，那么我们要知道每点的曲度就不再困难了，比较常见的就是通过样条曲线来插值边缘点，通过估计曲线参数，然后要每点的曲度计算就简单了:
下面我们简要介绍下B样条曲线的方法:
曲度的计算，就可以直接套用公式了。
除此之外，还可以通过分段线性函数来近似，然后找到函数的分段点及为角点。
三、使用协方差矩阵的来估计曲度
边缘序列中某点，其同其相邻的点梯度变化关系必然是相关的，由此我们可以通过计算其在ROS区域的协方差矩阵来确定曲度，ROS区域定义:
上面的cx和cy是曲线的几何中心
然后计算上述矩阵的两个特征值如下:
这两个特征值可以用来提取曲线形状信息:
(2)如果S的区域是椭圆，则一大一小，并恰好反映长短轴的大小
(3)如果S的区域是圆，则特征值相等
因此最小的特征值大小将区分每一个边缘点的其在曲线分割区域的形状。
如果其大于一个特定的阈值，那么我们可以接着进行下面的判定。
计算协方差特征值向量:
由此我们可以计算出该点曲度
该点的角度如下计算
支撑区域ROS的大小k值对于结果有较大影响。
如果k值越大，那么点间的相互影响就越大，起到了平滑的作用，容易造成小的特征点被误删除。
如果k值越小，那么对于噪声点的敏感程度就越高。
四、CSS方法
CSS方法主要是基于如下曲度计算公式的:
这里的指卷积一阶高斯梯度模板，而指卷积二阶高斯梯度模板
考虑那些局部最大值作为角点候选(其曲度绝对值一般高于t，且两倍大于其邻域的局部最小值)，然后再从更高尺度下到较低尺度下追踪角点，提高角点位置精度。
最后比较T-连接和其它角点，移除两个接近的角点(或T-连接)中一个。
在这个算法里面，检测过程只用了一个尺度，而多个尺度只是在提高精度位置时使用，正如所提到的，如果尺度特别大，可以检测不出真实的角点，而尺度太小，又容易检测出噪声，另外一个问题就是固定的阈值t，容易造成错误检测。
五、CPDA方法
CPDA方法并没有直接计算曲线的曲度，因为直接计算曲度一方面计算大，另一方面容易造成误差，所以CPDA通过计算点同弦的距离来模拟曲度，从而确定角点，其是一种类曲度的检测方法。
其方法具体如下:
并将所有距离叠加，具体公式如下:
CPDA方法相比于CSS方法，有这么几个优点:第一其不需要通过高斯平滑，部分细节。
因为弦长对于检测特征点的影响特别大，而单一的L很难检测多个不同类型的特征。
所以在每点计算三个不同弦长度L的CPDA，并计算每个点三个归一化的曲度，相乘获得曲度乘积项。
之后找到曲度乘积项的局部最大值作为角点候选，并同设置的曲度阈值比较，删除弱角点
然后我们还需要计算每个角点的角度(方法同CSS方法一致)，并同一个角度阈值比较，删除错误角点。
最后将T形角点同其它角点比较(方法也同CSS方法一样)。
六、自适应的角度阈值同自适应的ROS区域
角度(或曲度)阈值和ROS区域对基于曲线曲度的检测方法非常重要，这类几乎每个方法都用到这两个因子。
(1)自适应局部角度阈值t
角度阈值通常是不稳定的，对于角点候选来说，虽然其因为局部最大而被提取出来，但是其同其邻域的点的曲度差别通常比较小，这是圆角点的例子，如果差别太大的话，有可能是噪声点。
由此，我们定义一个新的自适应局部阈值，如果局部最大曲度绝对值小于这个阈值，将这个点移除:
上面L1到L2区域为ROS(region of support)(其定义为从一个邻域局部最小值到另一个领域局部曲度最小，在这个区域内曲度直接从候选点到两端减少)。
(2)动态ROS区域
要计算曲线曲度，我们通常都利用一个合适ROS区域，而这个区域的大小将极大的影响我们如何分辨角点。
当特征的大小没有预先知道，那么找到合适的角点将成会一个问题。
通过这样一种迭代的动态ROS方法，我们最终收敛到合适的角点位置。
判断角度:
因为角点候选在这个过程中可能会发生改变，随着迭代的进行，其会慢慢收敛，通过这个方法，一些孤立的角点候选会被移除，而一些主要的角点区域将会保留
一般情况下，如果，我们可以认为这是一个错误的角点，并将其排除在下次迭代角点候选外。
七、选择出合适的角点
选择出合适的角点的方法一般是采用非极大值抑制，不过，这里还值得一提的就是，基于小波的角点检测方法，其主要是通过上面计算边缘上每点和其对应的角度，将其张成一维曲线，然后对这个曲线进行小波变换，通过比较小波系数来确定角点位置。