高分求一個投影問題,關於極軌衛星圖像


有一幅衛星圖像,大小為2048*2048,並且我還有一個定位數組CPoint m_pos[51][51],里面存着它的每隔40個點一個位置的經緯信息(單位是經(緯)度*1000),現在我想編一個函數,名字是:lonlatToPixel(float lon,float lat,int &x,int &y){;};,也就是說,給定任意一個經緯度信息,能求出它所在的像素位置.請問應該怎樣編.

16 个解决方案

#1


這個函數我也想要啊。只是我不會寫。

#2


應該是雙線性的圓弧差值。

保存的精度和緯度都是角度數值,對角度線性插值
圖片上的位置差異應該是理解為弧長
51×51數組當中保存的點之間距離應該是弧長距離
由於經度和緯度方面的半徑不同,所以應該采用雙線性差值的方式進行

#3


學習,幾何問題!

#4


^_^,好復雜的數學....

#5


緯度和經度都看作圓弧,應該不難,有數據給我可以試一下。
mackz@sina.com。

#6


為了閱讀方便,我寫成了文本文件,
其中從第一行開始,每隔40個像素點的(緯度,經度)*10000,文本的每一行,有51個經緯度信息,也就是102個數。
在貼子上我講的有誤,其實每一條圖像數據都有一個每隔40個點的經緯信息。
我現在有一個思路,現有定位數據m_pos[51][2900],假如圖像有2900行。對於某一個經緯度信息(lon,lat),遍歷全部定位數據,
總能找到一個位置(i,j),使其滿足 m_pos[j+1][i].x < lon < m_pos[j][i].x 且 m_pos[j][i].y < lon < m_pos[j][i+1].y,
這樣通過m_pos[j][i]*40得到最近的圖像位置x,然后通過線性插值求得deltx. 最后的值是x+deltx.但這樣的速度太慢了。
   另外一種方法是通過定位信息獲取一個經緯網格數據. 

#7


該回復被版主刪除

#8


你的數據由於每行都有定位坐標,其實如果精度要求不高的話,很簡單的:
對於圖像數據Image[I][J],定位數據Pos[51][3116],在J < 3116,I < 52 * 40的情況下,對於第i,j個數據,有M = i / 40對應第M,j個定位數據Pos[M][j],M < 51時,根據Pos[M][j]和Pos[M+1][j]來內推就可以了,而M == 51時,根據Pos[M-1][j]和Pos[M][j]外推,就是從圖像坐標轉換為經緯度的線性算法,應該數誤差也不會太大;如果采用圓弧來計算,精度更高。那么給出經緯度得到像素位置的算法就是反過來了。

#9


該回復被版主刪除

#10


Mackz你好:
你的方法是xyToLonLat().
其實:lon = F(i,j,pos[i][j]).
如果反過來由於涉及到坐標下標,不是那么簡單。

#11


現在問題變成一個小的圖像數據塊,比如說40*40,現在我只知道四個角值的經緯數據和對應的像素位置,現在給定中間任意一個點的經緯坐標,如何才能求出它的像素位置.

#12


圓弧插值只有兩個端點的坐標是不可以的,因為是二次的嘛
如果是橢圓類型的,要四個點了,因此需要借助左右區域才行

如果只有兩個點,只能做線性插值
對於網格點,就是雙線性的插值了

#13


由於這是特定的經緯度,相當於半徑是已知的,可以用兩點進行圓弧插值。
另外,我上面的解答已經給出方法了,通過點到坐標可以給每個點計算出坐標(保存),從坐標到點是在點陣中找到最接近的點,就是遍歷比較。

#14


再問一問題:圓弧插值的實現

#15


該回復被版主刪除

#16


兩個四邊形坐標的映射問題,早幾年就做過了

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com