如何检测场景中对象的位置,比例和旋转?

时间:2014-03-08 14:56:10

标签: visual-c++ opencv image-processing

我想检测场景中对象的位置,比例和旋转。我使用cvMatchTemplate函数来检测对象并且它有效。如何检测该对象的位置,比例和旋转?

2 个答案:

答案 0 :(得分:0)

cvMatchTemplate只会找到翻译。如果你想找到比例和旋转,我建议你使用Features2D + Homography

答案 1 :(得分:0)

位置,比例和平面内旋转听起来像相似变换。与Homography(更通用且涉及非线性操作 - 除法)不同,相似性变换可以以封闭形式求解,因此不需要非线性优化。

首先,您需要手动选择对应的点,或者通过某种描述符(缩放/旋转不变)来选择相应的点;

使用A和B矩阵列中的坐标选择min 2对应关系后,使用这些公式查找所需的参数:

旋转:R = VU T 其中,BA T 的SVD = ULV T
scale:s = sum [(a i - mean_a) T R (b i - mean_b)] / sum [(b i - mean_b) T (b i - mean_b)]
翻译:T = sum(a i - s * R * b i )/ N,其中N是对应的数量

如果您的数据中有异常值,则必须使用RANSAC来使计算更加稳健。 当你有很多明确定义的点时,鳍匹配的替代方法是geometric hashing。它不需要描述符或已知匹配(对应)。