问题描述
我有一张这样的照片。
这是图片上的点数。我希望点号即使颠倒过来也能保持不变。此旋转可以是任何角度值。
例如
抬头
颠倒
90 度
45 度
我尝试了一些方法,例如 Opencv 相机校准和姿势估计,但我无法修复点数。
解决方法
我不认为这是一个编程问题,而是一个基本的几何问题。
您在该配置中有 7 个点,并且您想找到一些对旋转具有鲁棒性的几何属性。我能想到的第一件事是距离。
- 计算所有点之间的平方距离 (SD),然后找到使所有其他点的平方距离总和 (SSD) 最大化的那个。那个点是P7。
- 找到 P7 中 SD 最大的那个。那个点是 P1。
- 从 P7 中找出 SD 最低的那个。那一点是P6。
- 从 P7 中找到具有第二个最小 SD 的那个。那个点是 P5。
- 从 P1 中找出 SD 最小的那个。那个点是 P2。
为了找到 P3 和 P4,您需要检测相对于方向的一侧(左/右)。让我们称 Q 和 R 为两个未知点和一个我们已经确定的方向,例如从 1 到 7 的那个。您现在可以查看从 P1 到 P7 的向量与从 P1 到 P1 的向量之间的叉积的符号问:如果它在右边,则值为正。所以我们能够找到它的身份。
if ( (Q.x - P1.x) * (P2.y - P1.x) - (Q.y - P1.y) * (P2.x - P1.x) > 0) {
P3 = Q;
P4 = R;
}
else {
P3 = R;
P4 = Q;
}