需求簡述
對於一張柵格影像圖,需要一個進行快速且正確的投影轉換算法,以便能夠快速的實時多源數據疊加顯示。
因為只是用於顯示,所以無需進行整體的重投影,只需要對顯示區域范圍進行重投影即可。
逐點采樣投影換算
正常的影像進行投影變換,原理是對影像的每一個像素點都進行投影轉換(兩個三維坐標系之間的轉換),然后輸出到新的圖像對應位置(實際算法應該是先計算出輸出柵格的大小,然后通過坐標轉換公式計算輸出柵格中的像素點與之對應的源影像中的像素點,進行采樣輸出)。
這是比較嚴格的轉換方式,其效果也不錯,但是速度太慢。對於圖像少的情況,還能夠實時瀏覽,但是當影像圖層非常多的時候,就不行了。
快速投影
這里主要說的是投影坐標系的影像轉經緯度的情況。顯示范圍看做一個方格,則只需取出這個方格范圍的像素點即可。
狀況一
直接計算輸出范圍四個角點在圖像投影坐標系上的坐標,然后計算UV進行透視(投影)變換。
快速一點的方法就是只對四個角點進行轉換,以四個角點為基准,計算四點UV值,進行透視變換后得到新圖像。
即以四個角點計算輸出的行列范圍(外包框,即臨時取圖范圍),四個角點的行列坐標值與整個取出臨時圖像的角點的行列坐標值計算UV進行坐標轉換。
1、計算方格四個角點(經緯度)在影像地理坐標系(投影)上對應的角點坐標pts1
2、計算pts1的外包矩形框rectbox1
3、計算pts1在rectbox1中相對位置關系,就是計算UV值
4、計算rectbox1在影像中的行列坐標范圍,讀取對應像素數據
5、對取出來的數據進行透視變換,得到數據就是要用來顯示的數據
狀況二
如果輸出圖像是經緯度的,且輸入圖像在輸出圖像中占的位置范圍非常小
,或者反過來,這時候就要使用不同的策略了。
考慮到投影變形(跨帶問題),則需要計算圖像的經緯度范圍的四個角點在圖像所在投影坐標系的坐標范圍內的四點坐標(或者以圖像四個角點坐標和其角點經緯度坐標形成點對),然后通過多項式公共點校正算法得到輸出范圍四個角點在投影坐標系的坐標,這時候的坐標不是正常的坐標轉換得到的,但采用這種方式得到的四個角點坐標后,計算UV進行透視變換后得到的新圖像是正確的。
1、計算影像的地理坐標(投影)角點坐標 pts2 在顯示范圍坐標系(經緯度)中對應的坐標 pts1
2、以pts1和pts2組成點對,獲取GCP校正參數(pts1-->pts2)
3、使用GCP校正參數,計算顯示范圍角點在在影像地理范圍內的坐標 pts3 (投影坐標,可能也可以超出投影坐標系有效范圍)
4、計算 pts3 在影像地理范圍內(是個矩形)相對位置,也就是UV值,這個UV值應該超出0~1的范圍
5、對圖像數據進行透視變換,使用的參數就是第四步計算出來的UV值
方法二
因為透視(投影)變換就是本身也是比較復雜的,而同一矩形區域在不同坐標系下的變形一般都是很小的,所以可以使用簡單仿射變換來進行轉換。
基本步驟與上面一致,只是將計算透視變換的參數改為計算仿射變換參數,然后進行像素點的轉換即可。