实际上,在查找单应性时可以使用线对应.
https://www.researchgate.net/publication/220845575_Combining_Line_and_Point_Correspondences_for_Homography_Estimation
几年前,我们在一个项目中实施了这种方法.在简化所有数学的过程中,我们想出了一个简单的技巧.我们将每条线a*x + b*y + c = 0
变换为点(a/c, b/c)
// *** Don't copy paste this code, read below! ***//
Point2f convertPointsToHomogeneousLine(Point2f p1, Point2f p2) {
Point3f p1h(p1.x, p1.y, 1);
Point3f p2h(p2.x, p2.y, 1);
Point3f lineHomo(p1h.y*p2h.z - p1h.z*p2h.y,
p1h.z*p2h.x - p1h.x*p2h.z,
p1h.x*p2h.y - p1h.y*p2h.x);
Point2f lineHomoNorm(lineHomo.x / lineHomo.z,
lineHomo.y / lineHomo.z);
return lineHomoNorm;
}
然后把这些点传进go .我记得我也深入研究了findHomography
的OpenCV实现,并在其中的某个地方插入这行代码来求解步骤.在OpenCV中,在通过求解步骤之前,对点应用了一些归一化.因此,对于这类点,您需要跳过这一步.
我们不在生产中使用它.用户需要通过在图像和仪表系统中提供线和点来手动校准摄像机.界面过于复杂, solidity 差.但在你的情况下,我认为它可以做得更好.如果你能自动找到行和对应关系.
P、 请注意,在本文中,他们使用了一些归一化技术.