Equirectangular Projection

一般要將3D球形表面投影到2D平面上,要找出經緯座標與平面直角坐標之間的關係式。在建立球面與平面之間的對應函數關係時並不能保持球面上的長度、面積與角度的原形,然而投影方式有很多種,最常見的方法就是Equirectangular Projection,利用極地角度(Polar Angles)表示水平座標與垂直座標。下圖為一個地球的Equirectangular Projection。

earth

Cubic Images to Equirectangular


HUMUS網頁上的Earth例子來說明,以六張cubic影像,但彼此之間seam已經是縫合好的情況下作為輸入,如下圖:

未命名

這六張影像分別在cube的相應位置為Top、Down、Front、Back、Left和Right。

未命名

Equirectangular Projection是將影像投影到水平座標(經度)為-\pi\pi之間,垂直座標(緯度)為-\frac { \pi }{ 2 } \frac { \pi }{ 2 } 之間。假設cube是在\left[ -1,1 \right]之間,2*2*2大小的立方體。w,h為Equirectangular影像的長和寬。

x=2.0*i/w-1.0

y=2.0*j/h-1.0

\theta=x*\pi

 \varphi=y*\frac { \pi }{ 2 }

 

藉由下面公式轉換,由經度與緯度計算單位向量。x向量朝向前方,y向量向下方,z向量指向右方

x=\cos { \varphi *\cos { \theta}}

y=\sin { \varphi}

z=\cos { \varphi *\sin { \theta}}

算出[x,y,z]大小後,向量裡元素數值最大的即為指向的面向,將另外兩個向量元素正規化後即可得到該面上的座標位置。例如算出來的[x,y,z]=[0.2099, -0.7289, 0.6516],數值最大為y且為負號,所以該面指向TOP Image,再將座標正規化後可以得到在TOP Image上相應的單位向量[x,z]=[0.2879, 0.8939 ]


所以只要利用上面的步驟就可以得到以經度(Longitude)和緯度(Latitude)為座標的Equirectangular影像。

out

 

 

 

 


reference :

http://www.wenyanan.com/cube2cyl/

http://stackoverflow.com/questions/11504584/

Image from : http://www.humus.name/index.php?page=Cubemap&item=Lycksele3

3 thoughts on “Equirectangular Projection”

  1. May you interpret this code in more detail:
    x = 2.0 * i / w - 1.0;
    y = 2.0 * i / h - 1.0;
    theta = x * pi;
    phi = y * pi / 2.0;

    1. sorry, I have a typo.
      y = 2.0 * j / h - 1.0; (the variable is j not i)

      Now you have a equirectangular map(w*h) and (i,j) is your map vector,and then you need to calculate the theta and phi to get the longitude and latitude.

Leave a Reply

Your email address will not be published. Required fields are marked *