8.12 角点检测
问题描述
要检测图像角点的位置。
解决方案
使用OpenCV实现的Harris角点检测器(下文简称Harris检测器)cornerHarris:



讨论
Harris检测器是检测两条边缘线条的交叉点的常用方法。我们对角点感兴趣的原因与对边缘感兴趣的原因相同:角点含有大量信息。关于Harris检测器原理的完整解释可以在本节最后的“延伸阅读”中找到。简单来说,Harris检测器会寻找一个窗口(也可以叫作邻域),这个窗口的微小移动(可以想象为晃动窗口)会引发窗口内像素值的大幅变化。
cornerHarris包含3个重要的参数,可以用于控制检测到的边缘。参数block_size代表角点检测中窗口的尺寸,参数aperture代表Sobel算子的尺寸(如果你不知道什么是Sobel算子也没关系),参数free_parameter用于控制对角点检测的严格程度,这个值越大,可以识别的角点越平滑。
以下程序的输出是一张描绘了可能角点的灰度图像。


然后,使用阈值筛选出最可能的角点,或者使用Shi-Tomasi 角点检测器(goodFeaturesToTrack)确定一组固定数量的明显的角点,其工作方式与Harris检测器类似。goodFeaturesToTrack有3个主要参数:待检测角点的数量、角点的最差质量(从0到1)以及角点间的最短欧氏距离。



延伸阅读
● OpenCV的cornerHarris方法(http://bit.ly/2HQXwz6)
● OpenCV的goodFeaturesToTrack方法(http://bit.ly/2HRSVwF)



本书评论