matlab中的平面同音字

matlab中的平面同音字,matlab,image-processing,computer-vision,computer-science,Matlab,Image Processing,Computer Vision,Computer Science,我已经拍摄了一个高度为2米的地面作为原始图像,我想模拟另一个图像在50厘米的地面从现场 相机的焦距为3.7毫米(f=3.7) 我在MATLAB中对原始图像中的每个平面使用了平面单应H=k'(眼睛(3)-(tn')/d))*inv(k),其中在相机坐标系中,x轴垂直于地面右侧的建筑物,y轴平行于地面,因此z轴向上垂直于地面。原点是原始图像中的相机位置,k是3x3相机校准矩阵[f 0;0 f 0;0 0 1],t是转移矩阵[0 0-1.5],n是平面法向量,d是到原点的平面距离,眼睛(3)是相机旋转

我已经拍摄了一个高度为2米的地面作为原始图像,我想模拟另一个图像在50厘米的地面从现场

相机的焦距为3.7毫米(f=3.7)

我在MATLAB中对原始图像中的每个平面使用了平面单应H=k'(眼睛(3)-(tn')/d))*inv(k),其中在相机坐标系中,x轴垂直于地面右侧的建筑物,y轴平行于地面,因此z轴向上垂直于地面。原点是原始图像中的相机位置,k是3x3相机校准矩阵[f 0;0 f 0;0 0 1],t是转移矩阵[0 0-1.5],n是平面法向量,d是到原点的平面距离,眼睛(3)是相机旋转

例如,地面平面具有n=[0 1]和d=2。对吧?

请指导我其他平面(天空、建筑物)在matlab中的实现


我的图像是。

你不能只用一次转换就完成它。 但是,如果您知道三个平面(即地面、左墙和右墙)相对于摄影机位置的精确方程式,以及摄影机方向,则可以通过在三个平面上应用三个不同且单独的同形文字,从任意给定点模拟场景

为此,首先需要从图像中提取三个平面中的每一个(例如,img1=提取的地面,img2=提取的左墙,img3=提取的右墙)。 然后根据以下公式对每一个单应性应用一个单独的单应性:

H=K*R*inv(K) - 1/d * K*t*n'/K
您将有三个对应于三个平面的同音字(H1、H2和H3)

请注意,对于每个平面,必须根据该平面设置n和d(该平面定义为n'*x=d,x=[x1,x2,x3]'和n=[a,b,c]')。还应考虑到t(=平移)和R(=旋转矩阵)是根据相机在当前场景中的相对位置和方向以及相机在期望(待模拟)状态下的相对位置和方向进行调整的

最后,可以通过将每个平面(img1、img2和img3)变换为其自身的H(分别为H1、H2和H3),然后附加三个图像来渲染新图像

你可以看看我在下面问题中的答案。它解释了如何在两个平面之间实现上述单应:


请在DSP论坛上查看此答案: