影像快速投影變換演算法

2022-03-22 20:23:17 字數 1606 閱讀 6618

目錄對於一張柵格影像圖,需要乙個進行快速且正確的投影轉換演算法,以便能夠快速的實時多源資料疊加顯示。

因為只是用於顯示,所以無需進行整體的重投影,只需要對顯示區域範圍進行重投影即可。

什麼是地圖投影?

正常的影像進行投影變換,原理是對影像的每乙個畫素點都進行投影轉換(兩個三維座標系之間的轉換),然後輸出到新的影象對應位置(實際演算法應該是先計算出輸出柵格的大小,然後通過座標轉換公式計算輸出柵格中的畫素點與之對應的源影像中的畫素點,進行取樣輸出)。

這是比較嚴格的轉換方式,其效果也不錯,但是速度太慢。對於影象少的情況,還能夠實時瀏覽,但是當影像圖層非常多的時候,就不行了。

這裡主要說的是投影座標系的影像轉經緯度的情況。顯示範圍看做乙個方格,則只需取出這個方格範圍的畫素點即可。

直接計算輸出範圍四個角點在影象投影座標系上的座標,然後計算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值

因為透視(投影)變換就是本身也是比較複雜的,而同一矩形區域在不同座標系下的變形一般都是很小的,所以可以使用簡單仿射變換來進行轉換。

基本步驟與上面一致,只是將計算透視變換的引數改為計算仿射變換引數,然後進行畫素點的轉換即可。

柵格重投影(投影變換)

openlayers能夠在不同的座標系統中顯示來自wms wmts 靜態影象和許多其他源的柵格資料。影象的地圖重投影直接發生在web瀏覽器中。在任何proj4js支援的座標參考系統中都是可視的,並且以前不相容的圖層現在可以組合和疊加。api的使用非常簡單。只需在ol view中指定正確的投影 例如使...

python opencv投影變換增強

邊緣填充 image cv2.copymakeborder image,add width,add width,add width,add width,cv2.border replicate,0 乙個是投影變換增強,乙個是旋轉增強 coding utf 8 import cv2 import nu...

投影變換與視口變換

一些說明 0.投影變換 描述如何指定視景體 viewing volume 的形狀和方向。視口變換 解釋如何控制三維模型座標到螢幕座標的變換。1.無論是透視投影還是平行投影 正交投影 只有在視景體中的物體才可見。2.下圖為opengl預設視點位置 eyex,eyey,eyez 0.0,0.0,0.0 ...