上面是使用 Harris 角点检测算法计算图像角点的表示。我已经实现了第 5 步,但是,在第 6 步中,我无法决定如何为计算
R = det(H) - k(trace(H))^2
时获得的值设置阈值。
此屏幕截图取自 Robert Collins 幻灯片 http://www.cse.psu.edu/~rcollins/CSE486/lecture06.pdf ,他在其中提到采取角落
并设置 -1000 for edges and 10000 for corners
的阈值。介于两者之间的值没有任何意义。
我的问题是他对他的实验和样本图像的选择是主观的,对于特定图像,
-10000 and 10000
的值有效。在现实生活中,没有办法知道期望什么样的图像,然后如何选择阈值。
P.S:我已经尝试过 Matlab 的
rice.png
,阈值偏离了。
编辑:我看过这个关于哈里斯角的问题实现哈里斯角检测器 上面写着“只收集所有像素值高于周围 5x5 邻域中所有其他像素值的像素”。我想要一些更数学的东西来实现。
谢谢。
更数学?好的,“找到过滤图像的所有局部最大值,然后选择最高的 N”怎么样,这是该问题中的响应者所推荐的。至于 N,请使用您拥有的关于场景的任何先验信息。例如,您对有 100 个角的棋盘感兴趣吗?然后设置 N=200 以确保你得到其中的大部分。
顺便说一句,一个方便的方法是在过滤后的图像和它的扩张版本中寻找不变的值,扩张是用 5x5 平面结构元素完成的。
随着Harris R值的增加O(n²),滑动窗口的面积得到了n。我使用了这个小“技巧”:
thresh = n² * 0.5; % the value 0.5 is experimental
当然总是需要一个非极大值抑制,eg:
dilateR = imdilate(R, ones[3 3]);
res = dilateR == R & R > thresh;