zoukankan      html  css  js  c++  java
  • 基于Qt的遥感图像处理软件设计总结

     开发工具

     VS2008+Qt4.8.0+GDAL1.9

     要点

             接口要独立,软件平台与算法模块独立,平台中各接口设计灵活,修改时容易。

             设计软件时一步步来,每个功能逐一实现,某个功能当比较独立时可以做一个测试程序,测试无误后将功能添加到工程中。此外,在软件设计过程中,自身会想到一些功能,为了测试功能方案的可行性,可以单独做一个测试示例,测试方案是否可行,这样主动地学习可以学到很多新的知识。同时也可以增强自己解决问题的能力。

     软件的主线: 

             1.打开图像后,将影像及其含有的波段数(微波图像是极化方式)以树形结构显示在界面上,采用QTreeWidget;

             2.双击某个波段或极化方式后,显示出缩略图,这里记录好波段,GDALRasterBand类指针对象。缩略图还需保存缩小的倍数,这在后面ROI区域选择时会用到。需要保存的值设为成员变量。

             3.选择缩略图的某一块区域(ROI区域),读出该区域原始图像数据,作为金字塔第一层,然后依次向上再构建四层,总共五层,将第五层图像显示在视图中,视图采用QGraphicsView框架。这里有一个重点是如何读出ROI区域代表的源图像数据,需要根据鼠标按下和鼠标释放时的坐标求出,核心就是坐标转换。构建出的金字塔每一层的图像(QImage)和数据(unsigned char*)都保存在容器中,这里容器设为成员变量。

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

  • 相关阅读:
    UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解
    POJ 1679 The Unique MST (次小生成树)题解
    POJ 2373 Dividing the Path (单调队列优化DP)题解
    BZOJ 2709 迷宫花园
    BZOJ 1270 雷涛的小猫
    BZOJ 2834 回家的路
    BZOJ 2506 calc
    BZOJ 3124 直径
    BZOJ 4416 阶乘字符串
    BZOJ 3930 选数
  • 原文地址:https://www.cnblogs.com/Romi/p/3327600.html
Copyright © 2011-2022 走看看