逆透视变换?

use*_*759 2 opencv projection computer-vision homography

我试图从给定的图像中找到鸟瞰图像.我也有旋转和翻译(也是内在矩阵)将它转换成鸟瞰平面.我的目标是找到逆单应矩阵(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)
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*ari 5

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

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

有时您找不到矩形,但您的相机已经过校准,因此您描述的问题就会发挥作用.我们来做数学吧.假设您在给定图像中观察的平面是Z=0世界坐标.让K是3×3固有照相机矩阵和[R, t]表示所述相机3×4矩阵构成在XYZ世界坐标系,因此,如果PcPw在照相机分别表示相同的3D点和世界坐标,它是Pc = R*Pw + t = [R, t] * [Pw.T, 1].T,在这里.T装置换位.然后你可以把相机投影写成:

s * p = K * [R, t] * [Pw.T, 1].T
Run Code Online (Sandbox Code Playgroud)

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

s * p = K * [r1, r2, t] * [X, Y, 1].T
Run Code Online (Sandbox Code Playgroud)

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

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

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