我仍然在为增强现实应用程序实现透视投影。我已经问过一些关于视口计算和其他相机内容的问题,这可以从this thread中的Aldream中解释
但是,我目前没有得到任何有用的值,我认为这取决于我对笛卡尔坐标空间的计算。
我有一些不同的方法将纬度,经度和海拔高度转换为笛卡尔坐标空间,但它们似乎没有任何正常工作。目前我正在使用ECEF(以地球为中心),但我也尝试了不同的计算,例如半正式公式和三角函数的组合(从距离和两点之间的方位计算x和y)。
所以我的问题是:
笛卡尔坐标空间如何影响我的透视投影?我在哪里“补偿”我的单位?(当我使用米或厘米时)?
假设我使用的是ECEF,而不是以米为单位的值,所以例如,我的相机位于(0,0,2米高),我的点位于(10,10,0)。现在我可以轻松地使用维基百科上提到的功能,然后使用我的其他线程(如上所述)中解释的dx,dy,dz的转换。我仍然没有得到:这个投影如何“知道”我的坐标系中的单位是什么?我认为这是我目前正在做的错误。我不处理我的坐标系的单位,因此,无法从我的投影中获得任何好的价值。
当我使用以厘米为单位的坐标系时,我的透视投影中的所有值都在增加。我在哪里“解决”这个单位问题?我是否必须将相机宽度和相机高度“转换”为像素到米?我是否必须将坐标系转换为像素?应该使用哪种坐标系来处理这种情况?我希望你能理解我的问题。
编辑:我自己解决了。 我已经将我的坐标系从ecef改为自己的系统(使用hasrsine和bearing,然后计算x,y,z),现在我得到了很好的价值! :)
答案 0 :(得分:4)
我会尝试另一种方式来解释它。 :)
简短的回答是:笛卡尔位置的单位无关紧要,只要你保持同质,即,只要你将这个单位应用到你的场景和你的相机。
对于更长的答案,让我们回到您使用的公式......
使用:
d
相对笛卡尔坐标s
可打印表面的大小r
“传感器”/录音表面的大小(即r_x
和r_y
传感器的大小和r_z
其焦距)b
您可打印面上的位置..并进行伪维分析。我们有:
[PIXEL] = (([LENGTH] x [PIXEL]) / ([LENGTH] * [LENGTH])) * [LENGTH]
无论你使用LENGTH
作为单位,它都会被同质化,即只保留比例。
例如:
[PIXEL] = (([MilliM] x [PIXEL]) / ([MilliMeter] * [MilliMeter])) * [MilliMeter]
= (([Meter/1000] x [PIXEL]) / ([Meter/1000] * [Meter/1000])) * [Meter/1000]
= 1000 * 1000 / 1000 /1000 * (([Meter] x [PIXEL]) / ([Meter] * [Meter])) * [Meter]
= (([Meter] x [PIXEL]) / ([Meter] * [Meter])) * [Meter]
回到我对你的另一个主题的解释:
如果我们使用这些符号来表达b_x
:
b_x = (d_x * s_x) / (d_z * r_x) * r_z
= (d_x * w) / (d_z * 2 * f * tan(α)) * f
= (d_x * w) / (d_z * 2 * tan(α)) // with w in px
当您使用(d_x, d_y, d_z) = (X,Y,Z)
或(d_x, d_y, d_z) = (1000*X,1000*Y,1000*Z)
时,比率d_x / d_z
不会改变。
现在问题背后的原因,您应该检查是否将正确的装置应用到相机的位置/它到场景的距离。还要检查你的α或焦距单位,具体取决于你使用的那个。
如果认为后来的建议是最有可能的。很容易忘记将正确的单元应用于相机的特性。