對於一張柵格影像圖,須要一個進行快速且正確的投影轉換算法,以便可以快速的實時多源數據疊加顯示。
由於只是用於顯示,因此無需進行總體的重投影,只須要對顯示區域範圍進行重投影便可。ide
什麼是地圖投影?ui
正常的影像進行投影變換,原理是對影像的每個像素點都進行投影轉換(兩個三維座標系之間的轉換),而後輸出到新的圖像對應位置(實際算法應該是先計算出輸出柵格的大小,而後經過座標轉換公式計算輸出柵格中的像素點與之對應的源影像中的像素點,進行採樣輸出)。
這是比較嚴格的轉換方式,其效果也不錯,可是速度太慢。對於圖像少的狀況,還可以實時瀏覽,可是當影像圖層很是多的時候,就不行了。code
這裏主要說的是投影座標系的影像轉經緯度的狀況。顯示範圍看作一個方格,則只需取出這個方格範圍的像素點便可。htm
直接計算輸出範圍四個角點在圖像投影座標系上的座標,而後計算UV進行透視(投影)變換。
快速一點的方法就是隻對四個角點進行轉換,以四個角點爲基準,計算四點UV值,進行透視變換後獲得新圖像。
即以四個角點計算輸出的行列範圍(外包框,即臨時取圖範圍),四個角點的行列座標值與整個取出臨時圖像的角點的行列座標值計算UV進行座標轉換。blog
一、計算方格四個角點(經緯度)在影像地理座標系(投影)上對應的角點座標pts1 二、計算pts1的外包矩形框rectbox1 三、計算pts1在rectbox1中相對位置關係,就是計算UV值 四、計算rectbox1在影像中的行列座標範圍,讀取對應像素數據 五、對取出來的數據進行透視變換,獲得數據就是要用來顯示的數據
若是輸出圖像是經緯度的,且輸入圖像在輸出圖像中佔的位置範圍很是小
,或者反過來,這時候就要使用不一樣的策略了。
考慮到投影變形(跨帶問題),則須要計算圖像的經緯度範圍的四個角點在圖像所在投影座標系的座標範圍內的四點座標(或者以圖像四個角點座標和其角點經緯度座標造成點對),而後經過多項式公共點校訂算法獲得輸出範圍四個角點在投影座標系的座標,這時候的座標不是正常的座標轉換獲得的,但採用這種方式獲得的四個角點座標後,計算UV進行透視變換後獲得的新圖像是正確的。get
一、計算影像的地理座標(投影)角點座標 pts2 在顯示範圍座標系(經緯度)中對應的座標 pts1 二、以pts1和pts2組成點對,獲取GCP校訂參數(pts1-->pts2) 三、使用GCP校訂參數,計算顯示範圍角點在在影像地理範圍內的座標 pts3 (投影座標,可能也能夠超出投影座標系有效範圍) 四、計算 pts3 在影像地理範圍內(是個矩形)相對位置,也就是UV值,這個UV值應該超出0~1的範圍 五、對圖像數據進行透視變換,使用的參數就是第四步計算出來的UV值
由於透視(投影)變換就是自己也是比較複雜的,而同一矩形區域在不一樣座標系下的變形通常都是很小的,因此可使用簡單仿射變換來進行轉換。
基本步驟與上面一致,只是將計算透視變換的參數改成計算仿射變換參數,而後進行像素點的轉換便可。it