【问题标题】:Inverse Perspective Transform?逆透视变换?
【发布时间】:2019-01-20 11:24:14
【问题描述】:

我正在尝试从给定图像中找到鸟瞰图。我还具有将其转换为鸟瞰平面所需的旋转和平移(也是固有矩阵)。我的目标是找到一个逆单应矩阵(3x3)。

rotation_x = np.asarray([[1,0,0,0],
                        [0,np.cos(R_x),-np.sin(R_x),0],
                        [0,np.sin(R_x),np.cos(R_x),0],
                        [0,0,0,1]],np.float32)

translation = np.asarray([[1, 0, 0, 0],
                         [0, 1, 0, 0 ],
                         [0, 0, 1, -t_y/(dp_y * np.sin(R_x))],
                         [0, 0, 0, 1]],np.float32)

intrinsic = np.asarray([[s_x * f / (dp_x  ),0, 0, 0],
                       [0, 1 * f / (dp_y ) ,0, 0 ],
                       [0,0,1,0]],np.float32)

#The Projection matrix to convert the image coordinates to 3-D domain from (x,y,1) to (x,y,0,1); Not sure if this is the right approach
projection = np.asarray([[1, 0, 0],
                        [0, 1, 0],
                        [0, 0, 0],
                        [0, 0, 1]], np.float32)

homography_matrix =  intrinsic @  translation @ rotation  @ projection

inv = cv2.warpPerspective(source_image, homography_matrix,(w,h),flags = cv2.INTER_CUBIC  | cv2.WARP_INVERSE_MAP)

我的问题是,这是正确的方法吗,因为我可以手动设置一个合适的ty,rx,但不适用于提供的(ty,rx)

【问题讨论】:

    标签: opencv computer-vision projection homography


    【解决方案1】:

    第一个前提:您的鸟瞰图仅对图像中的一个特定平面是正确的,因为单应性只能映射平面(包括无限远的平面,对应于纯相机旋转)。

    第二个前提:如果你能在第一张图像中识别出一个四边形,它是一个矩形在世界上的投影,你就可以直接计算将这个四边形映射到矩形的单应性(即“鸟瞰图”)四边形),并用它扭曲图像,设置比例,使图像扭曲到所需的大小。无需使用相机内在函数。示例:您有一个带有矩形窗户的建筑物的图像,并且您知道这些窗户在世界上的宽高比。

    有时您找不到矩形,但您的相机已校准,因此您描述的问题出现了。让我们算一下。假设您在给定图像中观察的平面在世界坐标中是Z=0。令K 为 3x3 固有相机矩阵,[R, t] 为 3x4 矩阵,表示 XYZ 世界坐标系中的相机位姿,因此如果PcPw 分别表示相机和世界坐标中的同一个 3D 点,则为Pc = R*Pw + t = [R, t] * [Pw.T, 1].T,其中 .T 表示转置。然后你可以把相机投影写成:

    s * p = K * [R, t] * [Pw.T, 1].T
    

    其中s 是任意比例因子,pPw 投影到的像素。但是如果Pw=[X, Y, Z].TZ=0 平面上,R 的第 3 列只会乘以零,所以我们可以忽略它。如果我们再用r1r2表示R的前两列,我们可以将上面的等式改写为:

    s * p = K * [r1, r2, t] * [X, Y, 1].T
    

    但是K * [r1, r2, t]是一个3x3矩阵,将3D平面上的点转换为相机平面上的点,所以它是一个单应性。

    如果平面不是Z=0,可以重复同样的参数,将[R, t]替换为[R, t] * inv([Rp, tp]),其中[Rp, tp]是坐标变换它将平面上的框架(平面法线为 Z 轴)映射到世界框架。

    最后,要获得鸟瞰图,选择一个旋转 R,其第三列(相机框架中世界 Z 轴的分量)与平面法线相反。

    【讨论】:

    • 谢谢,但请您解释一下最后一条语句“旋转R,其第三列(相机帧中世界Z轴的分量)为[0,0,-1]”?跨度>
    • 澄清了答案
    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多