旋转后查找图像上某点的原始位置

时间:2013-06-18 11:31:48

标签: geometry image-rotation

我将旋转图像上的点的x,y坐标按特定角度。我想在原始的非旋转图像中找到同一点的坐标。

请检查第一张更简单的图片:

更新的图片,已简化: Simplified description

旧图片 enter image description here

2 个答案:

答案 0 :(得分:0)

假设第一个点是A,第二个点是B,最后一个是C.我假设你有旋转矩阵R(如果没有,请参见维基百科Rotation Matrix)和翻译向量t,因此B = R * A和C = B + t。 它来自C = R * A + t,因此A = R ^ 1 *(C-t)。

编辑:如果您只需要非旋转的新点,只需执行 D = R ^ -1 * C.

答案 1 :(得分:0)

首先要做的是定义参考系统(“每个图像的点位置”将如何转换为数字)。我想你想依靠一个基本的二维参考系统,由一个点(几个X / Y值)给出。例如:左/下角(最小X和最小Y)。

该算法非常简单:

  1. 获取与之关联的新定义参考点             旋转形状(最小X和最小Y),即确定RefX_new和             RefY_new。

  2. 在参考系统之间应用基本转换:
                X_old = X_new +(RefX_new - RefX_old)
                Y_old = Y_new +(RefY_new -             RefY_old)

  3. -----------------更新公式与新车PIC相关

    RefX_old = min旋转前CarFrame的X值。

    RefY_old =旋转前CarFrame的最大Y值。

    RefX_new = min旋转后CarFrame的X值。

    RefY_new =旋转后CarFrame的最大Y值。

    X_new =旋转后相对于CarFrame的点的X.例如:如果相对于绝对帧(0,0)的RefX_new = 5并且相对于该绝对帧的点的X是8,则X_new将是3.

    Y_new =旋转后相对于CarFrame的点的Y(等效于上面的点)


    X_old_C = X_new_C(相对于CarFrame)+(RefX_new(CarFrame_C) - RefX_old(CarFrame_A))

    Y_old_C = Y_new_C(相对于CarFrame)+(RefY_new(CarFrame_C) - RefY_old(CarFrame_A))


    这些坐标是相对于CarFrame的,因此您可能必须根据绝对帧(0,0,我猜)更新它们,如上所述,即:

    X_old_D_absolute_frame = X_old_C +(RefX_new(CarFrame_C)+ RefX_global(即0))

    Y_old_D_absolute_frame = Y_old_C +(RefY_new(CarFrame_C)+ RefY_global(即0))

    (尽管你应该在CarFrame相对于全局帧处于其“确定位置”时这样做,即在图片D上(该点与图片C和D中的CarFrame具有相同的坐标) ,但就全球框架而言是不同的。)

    以这种方式看似有点复杂;但它真的很简单。您只需要仔细考虑一个案例并创建执行所有操作的算法。这个想法非常简单:如果我在8岁以内的东西,从5开始;我对容器的态度是3。

    ------------方法学更新

    如评论中所述,这些最后的图片证明了最初提出的参考计算(最大Y / min.X)是不对的:它不应该是最大/最小。 carFrame的值,但距离较近边的最小距离(=从左/下侧到点的垂直线)。

    ------------特殊例子的三角科学

    建议的算法是您应该在任何情况下应用的算法。虽然在这种特定情况下,最困难的部分不是从一个参考系统移动到另一个参考系统,而是在旋转系统中定义参考点。完成此操作后,立即对非旋转案例的申请。

    这里有一些计算来执行此操作(我已经很快完成了,因此最好将其作为一个方向并由您自己完成);我也只考虑了图片中的情况,即左/下点的旋转:

    X_rotated = dx * Cos(alpha)

    其中dx = X_orig - (max_Y_CarFrame - Y_Orig)* Tan(alpha)

    Y_rotated = dy * Cos(alpha)

    其中dy = Y_orig - X_orig * Tan(alpha)

    注意:dx中的(max_Y_CarFrame - Y_Orig)和dy中的X_orig期望基本参考系统为0,0(最小X和最小Y)。如果不是这种情况,则必须更改此变量。

    X_rotated和Y_rotated给出从点到汽车框架最近侧(分别为左侧和底侧)的垂直距离。通过应用这些公式(我坚持:仔细分析它们),你得到X_old_D_absolute_frame / Y_old_D_absolute_frame,你只需要添加carFrame中的lef / bottom值(如果它位于0,0,那么这将是最终的值)。