仿射引數與矩陣的轉換

2021-09-21 14:17:06 字數 2517 閱讀 5660

**: 

關於gdal計算影象座標的幾個問題

使用gdal處理地理影象時,不可避免的會遇到乙個問題,影象的地理座標問題,因為有了這個地理座標,地理影象才和普通影象有了最本質的區別,那麼在使用gdal時,如何處理與地理座標相關的資訊呢?下面進行簡單的說明。

1:如何使用行列號計算影象的地理座標?或者如何通過地理座標來定位在影象的某個位置?

2:如何獲取影象的四至範圍?或者如果通過指定的地理範圍計算影象的所在區域?

要解決上面三個問題,首先需要知道和了解gdal的資料模型,其中裡面有個非常重要的就是投影和六引數。這兩個可以使用gdaldataset類中的geotransform()函式和getprojectionref()函式來進行獲取。

第乙個引數獲取的是影象的六引數(我自己起的名字,是乙個仿射變化的引數),第二個是影象的投影(也就是空間參考系統)。

下面先說說第乙個六引數,六引數其實是影象行列號座標和地理座標轉換的一組轉換係數。下面是用gt來表示六引數,影象行列號與影象的地理座標之間的數學關係式如下:

xgeo = gt(0) + xpixel*gt(1) + yline*gt(2)

ygeo = gt(3) + xpixel*gt(4) + yline*gt(5)

上式中,xgeo和ygeo表示的影象的地理座標,xpixel表示影象的列號,yline表示影象的行號,gt(i)就是上面所說的六引數,一共是六個值。

這六個值大致可以分為三組:

gt(0)和gt(3)是第一組,表示影象左上角的地理座標;

gt(1)和gt(5)是第二組,表示影象橫向和縱向的解析度(一般這兩者的值相等,符號相反,橫向解析度為正數,縱向解析度為負數);

gt(2)和gt(4)是第三組,表示影象旋轉係數,對於一般影象來說,這兩個值都為0。

為什麼說影象的gt(0)和gt(3)表示影象左上角的座標,對於影象行列號座標系統來說,座標的原點在左上角,所以左上角的行列號是(0,0),將座標帶入上式,可以得到:

xgeo = gt(0)

ygeo = gt(3)

所以說gt(0)和gt(3)表示影象左上角的座標。

gt(1)和gt(5)表示影象橫向和縱向的解析度。影象的解析度就是影象每個畫素所能表示的面積,一般都是正方形的格網,所以也就是沒兩個相鄰像元座標的差值。

基於這個原理,使用兩個座標進行驗證。假設當前點行列號座標為a(i,j),相鄰的右側點座標為b(i+1,j)。分別計算a和b的橫向地理座標,並計算差值,即:

dx  = xgeob - xgeoa

= [gt(0) + (i+1)*gt(1) + j*gt(2)] - [gt(0) + i*gt(1) + j*gt(2)]

=  gt(0) -gt(0) + (i+1)*gt(1) - i*gt(1) + j*gt(2) - j*gt(2) 

=  (i+1)*gt(1) - i*gt(1)

= gt(1)

同理可以得到 dy= gt(5)。

對於乙個普通的標準影象來說(這裡的標準影象是指gt(2)和gt(4)都為0),如圖1所示,影象的行列號座標為xoy,每個網格代表乙個影象畫素區域,i表示列號,j表示行號,淡藍色右下角的行列座標為(i,j),

圖中紅色方塊縱向長度為dy,橫向長度為dx,分別為影象的解析度;圖中o點的地理座標就是(gt(0),gt(3))。                   

圖1 乙個標準的影象行列號座標及其地理座標說明

有了上面的說明,那麼就可以很簡單的來進行影象的行列號與地理座標進行相互轉換,具體的**如下,共有兩個,乙個正算,乙個反算。

bool projection2imagerowcol(double *adfgeotransform, double dprojx, double dprojy, int &icol, int &irow)

catch

(...)

bool imagerowcol2projection(double *adfgeotransform, int icol, int irow, double &dprojx, double &dprojy)

catch

(...)

現在我們再回到之前開頭的兩個問題。

對於第乙個問題,實際就是影象行列號座標與地理座標的相互轉換,上面的**就可以用來解決。對於第二個問題,可以轉換為第乙個問題,第二個問題其實就是兩個點的座標轉換,分別是左上角點和右下角點。

比如第乙個,如何計算影象的四至範圍,影象的四至範圍從圖1中可以看出,影象的四至其實就是影象左上角座標和右下角的座標為起來的矩形區域,那麼就分別將左上角和右下角的行列號按照上面的公式進行轉換即可得到四至範圍;對與第二問就是將這個座標進行反算得到。

關於地理影象的座標問題就說到這裡,關於上面的投影資訊(空間參考資訊),需要說明一下,這個六引數裡面的座標範圍是和空間參考是一一對應的,

比如空間參考是乙個wgs84橢球體,那麼這個六引數一般的單位就是度,如果是北京54等分帶投影,那麼六引數的單位就是公尺。

OpenCV與仿射變換

拉伸 收縮 扭曲 旋轉是影象的幾何變換,在三維視覺技術中大量應用到這些變換,又分為仿射變換和透視變換。由圖可以看出,仿射變換是透視變換的子集。仿射變換包括平移,旋轉,縮放。由三對點計算仿射變換 src 輸入影象的三角形頂點座標。dst 輸出影象的相應的三角形頂點座標。返回乙個2x3的變換矩陣。2.w...

Silverlight的旋轉之仿射矩陣變換的解釋

silverlight的旋轉動畫需要用到 matrixtransform屬性的變化,這個是仿射矩陣變換的函式,它可以讓產生視覺的旋轉。他的原理並不是真正讓的位置變化,而是變化平面x,y的座標系,間接地讓的座標發生轉變,而如何讓座標系的旋轉精確地控制的旋轉,這個就是仿射變換矩陣的作用 仿射變換 aff...

仿射變換與透視變換

仿射變換與透視變換是機器視覺中繞不開的幾何知識之一.我以前在做相機標定的時候研究了一下,現在寫出來,免得以後忘記.1.透視變化 透視變換與透視投影密切相關.我們先來理解一下什麼是透視投影,所謂透視投影,通俗地講就是 遠小近大 前段時間,一張在網上流行.如果你明白了透視原理,就不會出現 道理我都懂,可...