还原被摄像机透视的纹理
有人问如何还原被透视纹理?给你一张照片,还原照片上四个点所组成的平面的纹理该怎么做?我们可以从数学上推导一下,为了和三维图形的透视纹理映射对照,我们称照片上四个点在照片上的位置为“屏幕坐标”,那么可以发现:
空间中,三维坐标(x,y,z)和纹理坐标(u, v)承线性关系。根据该问题描述,可以理解为已知四个点的屏幕投影坐标(xi,yi),和对应纹理坐标(u,v),求整个纹理坐标系到屏幕坐标系的反向映射过程,即根据(u,v)求解(xi,yi)。
1. 按照纹理隐射的原理,同平面纹理坐标与空间坐标存在线性关系,设 a1-a12为常数,有:
a1 * x + a2 * y + a3 * z + a4 = u ... 线性关系
a5 * x + a6 * y + a7 * z + a8 = v ... 线性关系
a9 * x + a10 * y + a11 * z + a12 = 0 ... 平面方程
2. 求解上面的方程组,可以得到类似下面的关系,其中b1-b9为常数:
x = b1 * u + b2 * v + b3
y = b4 * u + b5 * v + b6
z = b7 * u + b8 * v + b9
常数 b1-b9如果展开,就是9个关于a1-a12的等式,太长了,这里不展开,有兴趣可以自己求解。
3. 屏幕上投影坐标一般是:
x
xi = D1 * --- + C1
z
x
yi = D2 * --- + C2
z
因为同样一个透视投影矩阵下,能隐射成屏幕上同样形状纹理的平面,在空间中存在无穷多个,而且还存在不同透视投影矩阵下,同样屏幕投影的平面存在更多无穷多个。这里我们不用去求解每个平面,直接设置 D1 = D2 = 1 且 C1 = C2 = 0 有:
x
xi = ---
z
x
yi = ---
z
Recent Comments