基於Qt的遙感圖像處理軟件設計總結

 開發工具web

 VS2008+Qt4.8.0+GDAL1.9算法

 要點框架

         接口要獨立,軟件平臺與算法模塊獨立,平臺中各接口設計靈活,修改時容易。函數

         設計軟件時一步步來,每一個功能逐一實現,某個功能當比較獨立時能夠作一個測試程序,測試無誤後將功能添加到工程中。此外,在軟件設計過程當中,自身會想到一些功能,爲了測試功能方案的可行性,能夠單獨作一個測試示例,測試方案是否可行,這樣主動地學習能夠學到不少新的知識。同時也能夠加強本身解決問題的能力。工具

 軟件的主線: 學習

         1.打開圖像後,將影像及其含有的波段數(微波圖像是極化方式)以樹形結構顯示在界面上,採用QTreeWidget;開發工具

         2.雙擊某個波段或極化方式後,顯示出縮略圖,這裏記錄好波段,GDALRasterBand類指針對象。縮略圖還需保存縮小的倍數,這在後面ROI區域選擇時會用到。須要保存的值設爲成員變量。測試

         3.選擇縮略圖的某一塊區域(ROI區域),讀出該區域原始圖像數據,做爲金字塔第一層,而後依次向上再構建四層,總共五層,將第五層圖像顯示在視圖中,視圖採用QGraphicsView框架。這裏有一個重點是如何讀出ROI區域表明的源圖像數據,須要根據鼠標按下和鼠標釋放時的座標求出,核心就是座標轉換。構建出的金字塔每一層的圖像(QImage)和數據(unsigned char*)都保存在容器中,這裏容器設爲成員變量。spa

         4.在視圖縮放時就是調用不一樣的金字塔層。設計

         5.實現視圖中圖像拖拽的關鍵就在於重寫QGraphicsView類的鼠標移動事件,在主程序中設置一個定時器,定時跟蹤鼠標的變化,而後根據移動的位移設置滑動條。如此就實現了拖拽。

         6.作算法處理時,要注意是對ROI區域源圖像數據的處理,而非保存在金字塔中的圖像數據,由於源圖像數據不必定是字節類型,而金字塔中的數據類型均爲字節類型,作顯示用嘛。處理完後,以處理完後的數據爲金字塔第一層,再進行構建,保存。

 函數接口

         這裏最關鍵的就是數據的接口,由於軟件大部分都是從涉及圖像數據的輸入輸出,還有數據的保存。

         1.設計採樣讀源圖像的接口,相似於RasterIO,這裏面原理就是利用RasterIO這個接口。

template<class T>  
void getImgData(GDALRasterBand* poBand,T* data,int x_off,int y_off,int x_size,int y_size,int width,int height);

      2.建立高斯金字塔的接口

void createGaussImages(unsigned char *data,int width,int height);  

由於使用Qt顯示圖形是採用的是RGB888的格式,所以data不是第一層圖像數據,但第一層圖像數據經過data得到,第一層的寬爲width,高爲height

        3.顯示視圖的接口

        顯示的視圖是從金字塔中調出來的

void showImage(QImage *image); 

 

特別注意

        圖像操做中均是指針的操做,所以要特別留意指針的使用。在指針從新只想一塊地址區時都要先進性判斷,以下

if (data) { delete []data; data=NULL; } data=new unsigned char[width*height];  

此外,對於保存金字塔圖像和數據的容器,在每次金字塔構建前都要進行判斷,不爲空則釋放掉容器中全部的數據和QImage*指向的內存空間,再把容器清空,而後用容器裝新的金字塔數據和圖像。

相關文章
相關標籤/搜索