matlab Harris角点检测算法中阈值的选取

bvhaajcl  于 2023-05-18  发布在  Matlab
关注(0)|答案(2)|浏览(143)


以上是使用Harris角点检测算法计算图像中的角点的表示。我已经实现了第5步,但是,在第6步中,我无法决定如何为计算R = det(H) - k(trace(H))^2中获得的值设置阈值。这个屏幕截图取自Robert柯林斯的幻灯片http://www.cse.psu.edu/~rcollins/CSE486/lecture06.pdf,其中他提到了取角并设置-1000 for edges and 10000 for corners的阈值。介于两者之间的值没有任何意义。
我的问题是他对他的实验和样本图像的选择是主观的,对于一个特定的图像,-10000 and 10000的值是有效的。在真实的生活中,没有办法知道期望什么样的图像,然后如何选择阈值。
P.S:我用Matlab的rice.png试过了,阈值差得很远。
编辑:我已经看过这个关于Harris Corner Implementing a Harris corner detector的问题,上面写着“只要收集所有像素,这些像素的值比周围5x5邻域中的所有其他像素都要高”。我想要一些更数学的东西来实现。
谢谢。

puruo6ea

puruo6ea1#

更多的数学?好吧,“定位过滤图像的所有局部最大值,然后选择最高的N”怎么样,这是那个问题中的回答者推荐的。至于N,使用你对场景的任何先验信息。例如,你对一个有100个角的棋盘感兴趣吗?然后设置N=200,以确保您获得其中的大部分。
顺便说一句,一个方便的方法是在过滤后的图像和它的扩张版本中寻找未改变的值,扩张是用5x5平面结构元素完成的。

2skhul33

2skhul332#

由于角落周围的Harris R值以多项式方式增加(作为窗口大小的函数),我使用这个小“技巧”来找到角落的“全局”阈值:

thresh = n² * 100;

变量 n 表示Harris窗口的面积。值100是实验性的...但如果图像均衡,它就能工作。
然后,有必要应用非最大抑制和阈值:

dilateR = imdilate(R, ones[3 3]);
RESULT = dilateR == R & R > thresh; % non-maximal suppression and thresholding

赖斯图像和哈里斯角使用几个窗口大小:

相关问题