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

  • 相关阅读:
    对称加密算法在C#中的踩坑日常
    php与Git下基于webhook的自动化部署
    1024程序员节阿里谜题解析
    一次ajax请求导致status为canceled的原因小记
    LigerUI下拉选择列表LigerComboBox中tree的节点初始化默认选中的问题
    linux环境下安装PHP扩展swoole
    Memcache PHP 使用笔记
    VS生成事件执行XCOPY时出现Invalid num of parameters的解决方案
    mysql表的完整性约束
    mysql支持的数据类型
  • 原文地址:https://www.cnblogs.com/Romi/p/3327600.html
Copyright © 2011-2022 走看看