逆透视变换?

4

我正在尝试从给定的图像中找到鸟瞰图像。我还有所需的旋转和平移(以及内部矩阵),以将其转换为鸟瞰平面。我的目标是找到一个逆单应矩阵(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)进行设置。

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
6

首先,您需要了解一个前提条件:您的鸟瞰图只对图像中特定平面正确。因为单应性只能将平面映射到另一个平面(包括无穷远点所在的平面,对应于相机的纯旋转)。

其次,如果您能够在第一张图像中识别出一个四边形,该四边形是世界中一个矩形的投影,那么您就可以直接计算将该四边形映射到该矩形的单应性(即该四边形的“鸟瞰图”),并使用它来扭曲图像,设置比例使图像扭曲到所需大小,无需使用相机内部参数。例如:您有一个建筑物的图像,其中有长方形窗户,并且您知道这些窗户在现实世界中的宽高比。

有时您可能找不到矩形,但是您的相机已经校准好了,这时您就需要进行描述的问题。让我们来做个数学推导:假设您观察的平面在给定图像中的世界坐标系下的深度值是Z=0。设K表示3×3内参矩阵,[R, t]表示相机在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的第三列仅乘以零,因此我们可以忽略它。然后,如果我们用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]”吗? - user1589759
澄清了答案。 - Francesco Callari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,