在我看来,我目前正面临一个相当普遍的问题,这个问题应该很容易解决,但到目前为止,我的所有接触都失败了所以我转向你寻求帮助。
我认为这个问题最好用一些插图来解释。我有一些这样的模式:
我也有一个像(可能更好,因为这张照片来自光线很差的照片):
(注意模板是如何缩放的,以适应图像的大小)
最终目标是确定用户是否显示拇指向上/向下拇指手势以及两者之间的某些角度的工具。因此,我希望将图案与图像进行匹配,并查看哪一个与图片最相似(或者更准确地说,是手所呈现的角度)。我知道拇指在图案中显示的方向,所以如果我发现看起来相同的图案我也有角度。
我正在使用OpenCV(使用Python Bindings)并且已经尝试过cvMatchTemplate和MatchShapes但是到目前为止它还没有真正可靠地工作。
我只能猜到为什么MatchTemplate会失败,但我认为较小的白色较小的图案完全适合图片的白色区域,因此创造了最佳的匹配因素,尽管很明显它们看起来并不相同。
OpenCV中是否隐藏了一些我尚未发现的方法,或者我是否应该重新实现这类问题的已知算法?
新年快乐。
答案 0 :(得分:6)
一些简单的技术可以起作用:
找到关键点(强方向变化的区域)的技术比较棘手。最简单的方法是,你也可以使用角落探测器,然后检查从一个角落到另一个角落的距离,以确定拇指内缘与拳头相遇的位置。
对于更复杂的方法,请查看Kimia,Siddiqi和Xiaofing Mi等作者关于形状分解的论文。
答案 1 :(得分:1)
MatchTemplate似乎非常适合您描述的问题。它以什么方式失败了?如果您实际上正如您在样本图像中所显示的那样对拇指竖起/竖起大拇指/竖起大拇指进行掩饰,那么您已经完成了最困难的部分。
MatchTemplate在搜索空间中不包括旋转和缩放,因此您应该在要检测的所有旋转中从参考图像生成更多模板,并且应该缩放模板以匹配找到的拇指的一般大小向上/向下竖起标志。
[编辑] MatchTemplate的结果数组包含一个整数值,用于指定图像中模板在该位置的拟合程度。如果使用CV_TM_SQDIFF,则结果数组中的最小值是最适合的位置,如果使用CV_TM_CCORR或CV_TM_CCOEFF,则它是最高值。如果缩放和旋转的模板图像都具有相同数量的白色像素,则可以比较您为所有不同模板图像找到的最佳拟合值,并且总体上最适合的模板图像是您要选择的模板图像。
有大量的旋转/缩放独立检测功能可以帮助您,但将问题规范化以使用MatchTemplate是最简单的。
有关更高级的内容,请查看SIFT,Haar feature based classifiers或one of the others available in OpenCV
答案 2 :(得分:1)
如果您只计算最远路径最短的两个点,我认为您可以获得出色的效果。拇指指向的方向只是连接两点的线的方向。
您可以通过在白色区域采样点并使用Floyd-Warshall轻松完成此操作。