基于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*指向的内存空间,再把容器清空,而后用容器装新的金字塔数据和图像。

相关文章
相关标签/搜索