我希望通过使用霍夫变换来检测手的指尖点和谷点。简单来说,问题是什么是[H,theta,rho] = hough(BW)对于提取这些点是好的。
图片在这里: https://www.dropbox.com/sh/n1lz7b5eedzbui7/AADwy5O1l7sWf5aOx7KWAmhOa?dl=0
TNX
答案 0 :(得分:1)
标准霍夫变换仅用于检测直线。不多也不少。 Matlab函数hough
(请参阅here)返回所谓的霍夫空间H
,这是一个参数空间,用于查找这些行以及每行的参数表示:{{ 1}}。
您必须做更多的事情来检测您想要的点数。由于你的手指通常不会由直线组成,我认为无论如何你应该想到别的东西,例如:如果你可以假设像你图像中那样完美的曲线,this对你来说很有意思。
答案 1 :(得分:0)
您可以考虑的另一种简单技术是比较手线上两点之间的直线距离与沿周界的两点之间的距离(测地距离)。为此,您需要沿周边有序的点列表。
沿着高曲率区域,两点之间的直线距离将小于沿周界的这两点之间的像素数。
例如,您可以检查周长像素分开10个像素。也就是说,您将搜索列表并比较索引N处的点和点索引N + 10。 (当你接近结束时,你需要循环回到列表的开头。)如果这两个点之间的直线距离也接近10个像素,那么你知道这些点位于直线部分的直线部分上。周长。如果直线距离远小于10,则您可以在这些点之间以某种方式知道周长曲线。是否检查列表中5,10,20或30个项目的像素将取决于图像的分辨率和您要查找的曲线。
这种技术很有用,因为它实现起来简单快捷。也许它能够很好地满足您的需求。
另一种方法:将轮廓简化为小线段,然后可以计算相邻线段之间的线条角度。为了简化曲线,实现Ramer-Douglas-Puecker算法。一些实验将揭示哪些参数设置适用于您的应用程序。
https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm
最后,您可以查看分段曲线拟合:曲线将适合轮廓的小部分。这可能变得非常复杂,研究人员继续寻找将复杂数字分解为有限数量的更基本形状或曲线的方法。我建议尝试最简单的技术,然后只在需要时添加复杂性。