我仍在为增强现实应用程序实施透视投影。我已经问过一些有关视口计算和其他摄影机问题的问题,Aldream在此主题中对此进行了解释
但是,我目前没有任何有用的值,我认为这取决于我对笛卡尔坐标空间的计算。
我有几种不同的方法可以将纬度,经度和海拔高度转换为笛卡尔坐标空间,但是似乎没有一种可以正常工作。目前,我正在使用ECEF(以地球为中心),但是我还尝试了不同的计算,例如将hasrsine公式和三角函数结合使用(根据两点之间的距离和方位角来计算x和y)。
所以我的问题是:
笛卡尔坐标空间如何影响我的透视投影?我必须在哪里"补偿"我的单位?(例如,当我使用米或厘米时)?
可以说我正在使用ECEF,而不是获得以米为单位的值,因此,例如,我的相机位于(0,0,2m高度),我的点位于(10,10,0)。现在,我可以轻松使用Wikipedia上提到的功能,然后再使用在我的其他线程(如上所述)中介绍的dx,dy,dz转换。我仍然没有得到什么:此投影如何"知道"我在坐标系中的单位是什么?我认为这是我目前正在犯的错误。我不处理坐标系的单位,因此无法从投影中获得任何好的价值。
当我使用以厘米为单位的坐标系时,透视投影的所有值都在增加。我在哪里必须"解决"这个单位问题?我是否必须将摄像机的宽度和摄像机的高度从像素"转换"为米?我是否必须将坐标系转换为像素?应该使用哪个坐标系来处理这种情况?希望你能理解我的问题。
编辑:我自己解决了。
我已经将坐标系统从ecef更改为自己的系统(使用Haversine和方位角,然后计算x,y,z),现在我得到了很好的值! :)
然后,我将尝试另一种方式来解释它。 :)
简短的答案是:笛卡尔位置的单位无关紧要,只要保持均匀即可,即只要您将此单位同时应用于场景和相机即可。
对于更长的答案,让我们回到您使用的公式...
带有:
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不会改变。
现在,由于问题背后的原因,您也许应该检查是否对摄像机的位置/距场景的距离也应用了正确的单位。还要检查您的α或焦距的单位,具体取决于您使用的那一个。
如果认为以后的建议是最有可能的。容易忘记也将正确的单位应用于相机的特性。
嘿。再次感谢您的回复!我很确定,错误出在我的相机上,但我不知道如何解决。我可以使用alpha(这是我的垂直或水平视角),也可以使用android提供的焦距(以毫米为单位)(它们不相等...我得到两个不同的值来计算焦距或使用焦距由android提供)。将正确的单位应用于我的相机特性到底意味着什么?非常感谢!
您写道:"只要您将此单元同时应用于场景和相机。" -我不太确定我是否可以将其应用于相机...该在哪里做?
例如,如果使用焦距,则将其单位转换为所选的焦距。但是也许您应该过去包含相机设置和投影的代码,以便一起查看。
嘿,我已经添加了一些有关我的代码的代码片段。如您所见,相机设置很多。您只是在前面的文章中提到过;)
嘿,在您查看之前,让我在外部进行测试;)我已经更改了一些值,现在在内部获得了良好的价值(相同的gps)-我正在外面再次进行测试;)非常感谢!也许有效:)
大!祝你今天愉快。