边缘辐射处理部分,默认为非并行处理。要加快处理速度,采用OpenMP并行处理,提高效率。OpenMP是一个支持共享存储并行设计的库,特别适宜多核CPU上的并行程序设计。
OpenMP并行执行的程序要全部结束后才能执行后面的非并行部分的代码,这就是标准的并行模式fork/join式并行模式,共享存储式并行程序就是使用fork/join式并行的。标准并行模式执行代码的基本思想是,程序开始时只有一个主线程,程序中的串行部分都由主线程执行,并行的部分是通过派生其他线程来执行,但是如果并行部分没有结束时是不会执行串行部分的。
在C/C++中,OpenMP指令使用的格式为
#pragma omp 指令 [子句[子句]…]
OpenMP的指令有以下一些:
parallel,用在一个代码段之前,表示这段代码将被多个线程并行执行
for,用于for循环之前,将循环分配到多个线程中并行执行,必须保证每次循环之间无相关性。
parallel for, parallel 和 for语句的结合,也是用在一个for循环之前,表示for循环的代码将被多个线程并行执行。
for指令则是用来将一个for循环分配到多个线程中执行。for指令一般可以和parallel指令合起来形成parallel for指令使用,也可以单独用在parallel语句的并行块中。
#pragma omp [parallel] for [子句]
for循环语句
4 基于矩匹配的边缘校正系统实现与性能分析
进行高光谱图像边缘辐射校正的整体思路为:首先,要打开本地已存在的高光谱图像文件,然后,在校正前进行相关选项的设定,然后在进行矩匹配校正,最后储存校正后图像,可查看校正后结果。
主程序界面如图4-1所示:
图4-1 主程序界面
校正处理总体流程如图4-2所示:
图4-2 整体流程
4.1 数据读取显示模块的设计与实现
数据读取显示模块完成对原始数据的打开、查看等操作。每次打开程序都要先从打开菜单中选取本地高光谱遥感图像,才能进行后续相应的功能操作。
打开后文件波段信息,如图4-3所示:
图4-3 打开文件后显示波段信息
打开数据文件
对高光谱遥感图像进行操作时,先要执行打开操作。点击打开按钮,在本地路径中选择正确的高光谱遥感图像格式。
首先获取本地高光谱遥感图像的文件路径,然后进行文件的合法性检查,判断文件格式是否合法,最后判断波段窗口是否已打开。若已打开,则增加路径,若未打开,则新建路径。
打开数据文件流程如图4-4所示
图4-4 文件打开流程
主要实现代码:
// 打开文件
if (fileDlg.DoModal() == IDOK)
{
// 获取文件路径
strFilePath = fileDlg.GetPathName();
strFileTitle = fileDlg.GetFileTitle();
strFileExt = fileDlg.GetFileExt();
// 检查是否为相应的高光谱数据
CAlgorithm algorithm;
if (algorithm.CheckFile(strFilePath, strFileExt) == FALSE) return;
// 删除已经打开波段的对话框
if (m_pHRCBand != NULL)
{
m_pHRCBand->ShowWindow(SW_SHOW); 机载高光谱图像边缘辐射校正并行处理系统设计(8):http://www.youerw.com/jisuanji/lunwen_3683.html