rpc為有理多項式係數(rational polynomial coefficient),在遙感影像預處理中用於影像畫素座標(行列號)與對應同名點物方座標(經度,緯度,高程)之間的相互計算。rpc檔案,顧名思義,就是包含有理多項式係數的文字檔案。rpc檔案通常有兩種格式:一種為圖1所示,稱為rpc格式的檔案,另一種就是圖2所示的,稱為rpb格式的檔案。
在程式處理中,需要將rpc/prb檔案中所包含的係數讀入到自定義的結構體或者gdal庫中定義的結構體gdalrpcinfo中,才能進行後續的座標計算等其他處理。gdalrpcinfo結構體定義在gdal.h標頭檔案中:
typedef struct gdalrpcinfo;
gdal庫中定義了讀取rpc/rpb檔案的api函式,分別為gdalloadrpcfile()與gdalloadrpbfile(),要想成功讀取rpc/rpb檔案內容,還需要用到gdalextractrpcinfo()函式。此三個介面函式都定義在gdal.h標頭檔案中:
char cpl_dll ** cpl_stdcall gdalloadrpbfile( const char *pszfilename,
char **papszsiblingfiles );
char cpl_dll ** cpl_stdcall gdalloadrpcfile( const char *pszfilename,
char **papszsiblingfiles );
int cpl_dll cpl_stdcall gdalextractrpcinfo( char **, gdalrpcinfo * );
使用gdal庫讀取rpc/rpb檔案內容,需要分為兩步:先使用gdalloadrpbfile()或 gdalloadrpcfile()分別從rpb檔案或rpc檔案中獲取含有rpc係數鍵值對的字串列表(char **);然後將上一步獲取的 char ** 字串列表 作為gdalextractrpcinfo()函式的第乙個引數,第二個引數傳入gdalrpcinfo結構體就可以成功獲取rpc資訊,此函式返回值為int型別,返回0代表函式執行失敗,返回1代表執行成功。
在第一步中,gdalloadrpbfile()與 gdalloadrpcfile()函式中,第乙個引數傳入rpc/rpb的檔名,第二個引數傳入null即可。需要特別注意的是,如果是rpb檔案,需要使用gdalloadrpbfile()函式,而且rpb檔案的字尾必須是.rpb或者.rpb才行,大小寫無所謂,(如 rpbfilename.rpb/.rpb);如果是rpc檔案,需要使用gdalloadrpcfile()函式,此時rpc檔案的字尾不能是 .rpc 或者 .rpc了,必須是_rpc.txt 或者 _rpc.txt才行,大小寫無所謂,(如rpcfilename_rpc.txt/_rpc.txt)。
有關gdalloadrpbfile()與 gdalloadrpcfile()函式的原始碼在gdal安裝包中可以找到,具體路徑為 gdal_package/gcore/gdal_rpcimdio.cpp檔案中,如果編譯安裝gdal時,將其編譯為gdal的debug版本(./configure --enable-debug),在除錯程式時就可以進入gdalloadrpbfile()或者 gdalloadrpcfile()函式檢視其原始碼。
使用GDAL進行RPC座標轉換
對於高解析度遙感衛星資料而言,目前幾乎都提供了有理函式模型 rfm 來進行影象校正 spot系列提供了有理函式模型之外還提供了嚴格軌道模型 對遙感影像進行校正目前最常用的就是使用有理函式模型來進行校正。有理函式模型的計算公式網上可以搜到,同時我之前的部落格中也有比較詳細的說明,可以參考這篇部落格 g...
使用GDAL讀取影像
最近在學習gdal和opencv,gdal的強大功能我就不用說了,大家上網可以查到很多關於它的資料。opencv是乙個開源的計算機視覺庫,可以去opencv中文論壇具體了解它,說下我的構思吧,opencv庫里有很多關於數字影象處理的函式,但是它卻侷限於遙感影象的讀取,而gdal卻對遙感影像的讀取支援...
使用GDAL庫中的RPC校正問題
最近將gdal庫更新至1.11版本之後,發現之前寫的rpc像方改正模型校正的結果偏差特別大 更新版本之前結果和pci處理的結果一致 所以初步判斷是gdal庫的bug,經過各個引數修改發現原來是指定的dem取樣方式導致的。當指定dem的取樣方式為最鄰近時,校正結果偏差很大,當dem取樣方式為雙線性取樣...