points_lepetit(Image : : Radius, CheckNeighbor, MinCheckNeighborDiff, MinScore, Subpix : Row, Column)
points_lepetit从图像中提取感兴趣的点,如角或水滴状结构。
首先用大小为3x3的中值平滑图像。
然后,对一个以兴趣点候选点(m)为半径的圆的所有灰度值进行检验。
计算了圆上两个对角相对的灰度值(m1,m2)与中心像素m的绝对差值。
其中至少有一个差异必须大于MinCheckNeighborDiff。
圆上所有对角相对的像素都必须满足这个条件。
为了抑制对曲率较小的边缘点的检测(混叠),
可以计算m1和m2的圆点邻域到中心的校验邻域的进一步差值,同时满足上述条件。
通过计算圆到圆心点的所有灰度值差,确定了一个平均灰度值差。
该值必须大于MinScore,并允许将结果限制在具有高对比度的点上。
通过计算m的所有8个邻域的得分,可以得到一个二次方程.
该方程的极大值决定了亚像素点的精确位置。
通过将参数Subpix设置为“interpolation”(默认值)或“none”,可以打开或关闭细分步骤。
结果点在 Row, Column中返回。
操作符points_lepetit特别适用于非常快速的兴趣点提取。
但是,这些结果的鲁棒性不如points_harris提取的点。
1.points_sojka(Image : : MaskSize, SigmaW, SigmaD, MinGrad, MinApparentness, MinAngle, Subpix : Row, Column)
points_sojka将角定义为两条直线的非共线灰度值边的交点。
为了确定输入图像的一个点是否为角,检查一个MaskSize x MaskSize点的邻域。
只考虑与决策相关的图像区域。
梯度大小小于MinGrad的像素从一开始就被忽略。
此外,仅使用属于构成角的两个灰度值边缘之一的其余点。
为此,计算了所谓的可见性,这是一个指标的概率,被检查的点实际上是一个角点。
本质上,它是由相关点的数量及其梯度决定的。
只有当一个点的明确性至少是MinApparentness时,它才可以被接受为一个角。
典型的 MinApparentness 应在MinGrad数倍的范围内。
为了计算掩模点的可见性,每个掩模点根据两个准则进行加权:
首先,根据掩模点与可能的角点之间的距离,用一个大小为SigmaW的高斯函数对掩模点的影响进行加权。
SigmaW应该大致是掩模大小的四分之一到二分之一,以获得一个合理比例的大小权重函数对掩模大小的影响。
其次,估计出该点与(假设的)理想灰度值边缘的距离,并根据该距离用一个SigmaD大小的高斯函数对该点进行加权。
即。,距离理想灰度值边缘较远的像素(由于输入图像的离散化)对结果的影响小于距离较小的像素。
通常,不需要修改SigmaD的默认值0.75。
作为进一步的判据,计算了角值边缘在角点处改变方向的角度。
一个点只有当这个角大于MinAngle时才能被接受为角。
检测到的角点的位置在(Row, Column)中返回。如果子pix为“true”,则行和列以亚像素精度计算。
只有当Subpix为“false”时,才以像素精度计算它们。
例程:
read_image (Image, 'fabrik')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, [500,800], [400,800], WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
*
Radius := 3
CheckNeighbor := 0
MinCheckNeighborDiff := 20
MinScore := 25
Subpix := 'none'
points_lepetit (Image, Radius, CheckNeighbor, MinCheckNeighborDiff, MinScore, Subpix, Row, Column)
points_sojka (Image, 9, 2.5, 0.75, 30, 90, 0.5, 'false', Row1, Column1)
gen_cross_contour_xld (Cross, Row, Column, 6, rad(45))
gen_cross_contour_xld (Cross1, Row1, Column1, 6, rad(45))
dev_display (Image)
dev_set_color ('green')
dev_display (Cross)
dev_set_color ('red')
dev_display (Cross1)
|