RSD高分卫星数据处理能力提升——日正射处理数千景高分数据集

news2024/11/16 0:32:13

李国春

通常认为,能够单日处理几百景高分辨率对地观测卫星数据的系统就已经是非常优秀的卫星数据处理系统了。RSD此次优化将其处理能力提升超过了一个数量级,达到了单日正射处理数千景高分辨率卫星数据集的水平。

不仅如此,RSD达到如此高的处理能力是在成本万元以内的消费级个人电脑上实现的,而且还是单CPU的独立机器。感兴趣的读者可以试验一下把这些数据集从一块硬盘拷贝到另一块硬盘所需要的时间,就能比较出RSD的处理速度多么恐怖。如果你有价值几万几十万元的高档工作站,处理速度会更快。

多搞几台这种消费级的计算单元,组建一个计算机集群,将这个脚本程序改成多机并行的,花很少的钱就可以挑战任何先进的对地观测卫星数据处理系统了。你要是感兴趣就联系我。

上一帖《一个高效的通用光学卫星数据正射校正程序》里面各种数据集正射都是几秒的时间,有同学反馈说我是不是把分钟错当成秒了。不是的,就是这个速度。RSD处理速度快主要得益于算法先进,其次是数据处理优化准确。RSD绝大多数处理模块都没有优化,这部分正射优化了是因为今年病了住院做不了其它推进性工作,我就整理下思路优化了一下。核心函数我把它改成 Sw7WristbandsBuffer,7Wristbands不是什么7个波段而是医院的腕带,用来纪念我2022年大难不死。:)

跑题了,言归正传。算法就不说了,我们自己独有的,和任何流行算法都不一样。在工程实现上也进行了精准的优化。顺便说一句,有人认为使用了高效的编程工具理所当然的就快,其实不然。工具不是决定因素,就像建筑工程的质量根本不取决于你使用了多么先进的装备一样。

下面进行详细介绍。

一、数据来源

本次试验使用的是高分2号卫星的多光谱和全色数据共1454景L1A级原始数据集。将这些数据集名称收集写入到一个文本文件,再输入到本试验脚本程序。脚本逐个读取文件名,在对应位置找到该数据集,进行处理。文本文件是通过运行代码 通配符查找文件.c 自动生成的。详见《搜索本地文件》。

运行通配符查找文件.c程序代码,在本地计算机一共搜索到(MSS和PAN各)1454个数据集。MSS和PAN各自结果分别保存在一个文本文件中。

结果见图1。

图1 本机搜索到的1455个GF2 MSS L1A文件

图1中的GF2.txt文件只列出了搜索到的TIFF文件,正射校正还需要一个RPC参数文件,通常RPC参数文件与TIFF文件有一样的主文件名,可以在程序里自动搜索,这里无需列出。

与MSS类似的还有一个PAN文件。需要重新搜索一次,并单独保存为一个文本文件,结果参见图1。

二、处理过程

在RSD的脚本窗口打开程序演示批量正射校正.c 。代码如下:

main(){
	STRING name;
	name = OpenFileDialog(TRUE);//name 返回待处理数据文件名的文本文件。参数TRUE 表示打开文件,FALSE 表示保存文件
	if(name == ""){
		Print("已退出主程序");
		return FALSE;
	}
	int nID1 = Open(name,TRUE);	//参数TRUE表示文本。
	STRING outPath;
	BrowseFolder(outPath);//选择一个结果文件的输出路径
	Print("开始生成中国区 SRTM 90m DEM 数据...");
	DWORD tc = GetTickCount();
	//创建 DEM 数据,正射校正用///
	double		demGeoBox[4];	//排列依次为:最小纬度、最小经度、最大纬度和最大经度
	longlong	demHeight = 30000;
	longlong	demWidth = 42000;
	short		demBuffer[demHeight][demWidth];
	double		dbOrgLat = 46.0;	//设置左上角位置的经纬度
	double		dbOrgLon = 95.0;
	short		defaltElv = 0.0;	
	double		demPixsize = 5.0/6000.0;	//SRTM90m = 0.0008333。ASTGTM2、3 DEM 为 0.00027778度/像元.demPixsize = 1.0/3600.0;
	DemSrtm90Buffer(demBuffer,dbOrgLat,dbOrgLon,demHeight,demWidth,defaltElv,demGeoBox);
	double dmtm = (GetTickCount() - tc) / 1000.0;
	Print("生成中国区 SRTM 90m DEM 数据用时 %f 秒。",dmtm);
	STRING mainName,outName,tifName,rpcName,outName,projStr;
	double box[4];	//地理位置4角坐标,排列依次为:最小N、最小E、最大N和最大E
	double pixsize = 0.8;//GF2 MSS 3.2m, GF2 PAN 0.8m
	longlong	width,height;
	int			bands,datatype,rank,boo,n;;
	double datasetTime,outpuTime,totalTime;
	int dims[16];
	int count = 0;
	DWORD bgntc = GetTickCount();
	do{
		//读来一行文件名,并查找对应的 RPC 文件///
		tifName = "";
		n = Read(nID1,tifName);
		if(!PathFileExists(tifName))
		{
			continue;
		}
		rpcName = tifName - '.';
		rpcName = rpcName + ".rpb";
		if(!PathFileExists(rpcName))
		{
			rpcName = tifName - '.';
			rpcName = rpcName + "_rpc.txt";
			if(!PathFileExists(rpcName))
			{
				continue;
			}
		}
		Print("开始对%s进行正射校正...",tifName);//开始进行正射校正
		tc = GetTickCount();
		projStr = NULL;//投影参数串,指定 projStr=NULL; 时,自动探测带号,WGS84大地基准
		Alloc(WORD retBuffer[1][1][1] = {0};); //哑数组,接收处理结果。用 Alloc为每个文件单独申请和删除(每个文件大小不同)
		int boo = Sw7WristbandsBuffer(tifName,rpcName,retBuffer,box,demBuffer,demGeoBox,demPixsize,projStr,TRUE,CC,pixsize);
		datasetTime = (GetTickCount() - tc) / 1000.0;
		//正射校正结果导出为TIFF数据格式文件。
		mainName = FileNameMain(tifName);
		outName = outPath + mainName + ".tif"; //输出文件(.tif),输出路径 + 输入文件的主文件名+ 扩展名 .TIFF
		tc = GetTickCount();
		InqVariable(retBuffer,rank,dims,datatype);//读正射校正后PAN数据的数据范围、维数和数据类型信息
		height = dims[0];
		width = dims[1];
		bands = dims[2];		GdSaveTiffFile(outName,retBuffer,height,width,bands,datatype,BIP,projStr,box,pixsize);
		Free(retBuffer);
		outpuTime = (GetTickCount() - tc) / 1000.0;

		//处理计数、计时
		totalTime = (GetTickCount() - bgntc) / 1000.0;
		count++;
		Print("正射校正用时 %f 秒,导出结果用时 %f 秒。共处理了 %d 个数据集,累积用时 %f 分钟。",datasetTime,outpuTime,count,totalTime/60);
	}while(n);
	Close(nID1);
	Print("主程序结束");
	return TRUE;
}

(一)处理GF2 MSS 多光谱数据

将第27行代码 double pixsize = 0.8改为3.2,点击工具条上的小三角开始运行,输入上一步查找的文本文件并指定一个输出目录。运行后结果见图2。

图2 GF2 MSS正射校正后结果

1455数据集处理成功1454个,其中有一个处理失败。总计用时251.8分钟。平均每处理1个用时0.173分钟。每分钟处理5.77个,一天可以处理8315个GF2 多光谱数据集。

在输出目录中可以找到本次输出的1454个结果文件。见图3。

图3 GF2 MSS数据处理结果

可以在RSD中加载其中任意一个TIFF文件查看处理效果(略)。

(二)处理GF2 PAN 全色数据

将第27行代码 double pixsize = 3.2改改回0.8,点击工具条上的小三角开始运行,输入PAN文件名的文本文件并指定一个输出目录。运行后结果见图4。

图4  GF2 PAN数据处理结果

由于全部1455个数据集处理时间较长,这里只处理了50个数据集。50个数据集处理用时接近50分钟,基本上1分钟处理一个。一天可以处理1440个GF2 全色数据集。

如果按照处理一个多光谱和一个全色数据集为一景数据,则处理一景GF2数据需要1.173分钟,日处理1227景数据

三、讨论

1. 随着高分辨率对地观测卫星的发射越来越多,实现对地动态监测越来越现实。数据的快速处理越来与重要,尤其是对一些时间敏感的监测项目。

2. 通过99编程可实现更方便灵活的精准处理。

3. 各系列卫星属性各异,下一步研究如何快速自动提取卫星属性数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/175325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot+Vue项目(学生信息管理系统)搭建运行

项目地址:学生信息管理系统 前端部分(Vue) 首先以管理员身份运行终端 不然运行命令时有些会报错 1.首先下载node.js 2.打开并安装node.js 3.安装完成,打开控制台,输入node -v查看是否安装完成,如果显示…

MongoDB学习笔记【part2】数据库、文档、集合与常用命令

一、MongoDB 概念 Mongo 与 SQL 的术语区别如下: SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据表 – 集合rowdocument记录 – 文档columnfield字段 – 域indexindex索引table joins表连接,MongoDB不支持primary k…

分享121个PHP源码,总有一款适合您

PHP源码 分享121个PHP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 121个PHP源码下载链接:https://pan.baidu.com/s/1--fhiwI0gwB1a2ouivPw7g?pwdd61x 提取码&#x…

监控指标解读和JVM 分析调优

1、中间件指标  当前正在运行的线程数不能超过设定的最大值。一般情况下系统性能较好的情况下,线 程数最小值设置 50 和最大值设置 200 比较合适。  当前运行的 JDBC 连接数不能超过设定的最大值。一般情况下系统性能较好的情况下, JDBC 最小值设置 …

Transformers学习笔记4

Tokenizernlp任务的输入都是raw text,model的输入需要是inputs id,所以tokenzier将句子转换成inputs id,怎么转换呢,有3种方式:word-basedsplit the text:按照空格来区分按照标点来区分我们会得到一个非常大…

Element-UI的dialog对话组件内的tinymce弹窗被遮挡的解决办法及其它相关注意事项

问题一&#xff1a;tinymce的弹窗被遮挡 问题截图 解决办法 修改层级 注意要写在 <style></style> 中&#xff0c;我当时没注意&#xff0c;写在了 <style scoped></style> 中&#xff0c;死活没反应。 <style> /* 在el-dialog中tinymce z-ind…

C进阶_指针和数组试题解析

农历新年即将到来&#xff0c;我在这里给大家拜年了&#xff01;祝大家新的一年心想事成&#xff0c;皆得所愿。新的一年&#xff0c;新的征程&#xff0c;愿各位继续怀揣梦想和远方&#xff0c;奔赴每一场山海。我们一起砥砺前行&#xff0c;“卯定乾坤”&#xff01; 老老少…

Spring Boot操作数据库学习之整合JDBC

文章目录一 Spring Data简介二 Spring Boot集成JDBC2.1 项目创建步骤2.2 测试的SQL脚本2.3 编写yaml配置文件连接数据库2.4 IDEA连接数据库步骤【非必要的步骤】2.5 测试2.6 运行结果2.7 对运行结果的探究2.8 遇到的错误2.8.1 问题1&#xff1a;jdk编译版本2.8.2 解决方法2.8.3…

低成本搭建一台 Unraid 家庭存储服务器:中篇

虎年最后一篇文章&#xff0c;接着上一篇内容&#xff0c;聊聊如何提升硬件的易用性问题。 写在前面 如果你的诉求非常简单、明确&#xff0c;不需要界面&#xff0c;上一篇内容中的 Ubuntu Server 应该已经能够完成你的诉求了。 但是&#xff0c;如果你和我一样&#xff0c…

【Java数据结构与算法】day4-稀疏数组和队列(环形队列)

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;Java数据结构与算法 &#x1f9…

第五届字节跳动青训营 前端进阶学习笔记(七)HTTP协议入门

文章目录前言HTTP协议概述1.输入网址到页面加载完成中间发生了什么2.HTTP协议3.HTTP协议的发展历程4.HTTP报文结构&#xff08;1&#xff09;HTTP请求报文&#xff08;2&#xff09;HTTP响应报文5.请求方法&#xff08;1&#xff09;安全的方法&#xff08;2&#xff09;幂等6.…

表单标签的学习

表单标签的学习 textarea textarea标签来表示多行文本框&#xff0c;又叫做文本域。与其它 标签不同&#xff0c; textarea标签是单闭合标签&#xff0c;它包含起始标签和结束标签&#xff0c;文本内容需要写在两个标签中间。 input input type“text” 表示文本框 &#xff…

CSS入门学习笔记+案例

目录 一、 CSS的基础 1、快速了解 2、CSS应用方式 ①在标签上 ②在head标签中写style标签 ③写到文件中 二、CSS的选择器 1、ID选择器 2、类选择器 3、标签选择器 4、属性选择器 5、后代选择器 三、样式覆盖 四、CSS的样式 1、高度和宽度 2、块级和行内标签 3、字体…

七大排序---详细介绍

插入排序从第二个数&#xff0c;往前面进行插入&#xff0c;默认第一个数字有序&#xff0c;插入第二个&#xff0c;则前两个都有序了&#xff0c;一个一个往后选择数字&#xff0c;不断向前进行插入直接插入排序时间复杂度&#xff1a;最好情况&#xff1a;全部有序&#xff0…

决策树应用

使用Python中的sklearn中自带的决策树分类器DecisionTreeClassifier import sklearn clf sklearn.tree.DecisionTreeClassifier(criterionentropy)sklearn中只实现了ID3与CART决策树&#xff0c;所以我们暂时只能使用这两种决策树&#xff0c;在构造DecisionTreeClassifier类…

计算机视觉OpenCv学习系列:第六部分、图像操作-2

第六部分、图像操作-2第一节、图像几何形状绘制1.几何形状2.填充、绘制与着色3.代码练习与测试第二节、多边形填充与绘制1.多边形绘制函数2.绘制与填充3.代码练习与测试第三节、图像像素类型转换与归一化1.归一化方法与支持2.归一化函数3.代码练习与测试第四节、图像几何变换1.…

小智学长嵌入式入门学习路线_1 C语言基础

原课程链接&#xff1a; 嵌入式开发系统学习路线 从基础到项目 精品教程 单片机工程师必备课程 物联网开发 c语言 2022追更 前言 在学习过程中&#xff0c;老师提到了一个很重要的思想&#xff1a;主要从学习嵌入式的角度学习各项技能。比如c语言&#xff0c;语法有很多&…

【Java|golang】1807. 替换字符串中的括号内容

给你一个字符串 s &#xff0c;它包含一些括号对&#xff0c;每个括号中包含一个 非空 的键。 比方说&#xff0c;字符串 “(name)is(age)yearsold” 中&#xff0c;有 两个 括号对&#xff0c;分别包含键 “name” 和 “age” 。 你知道许多键对应的值&#xff0c;这些关系由…

Linux基本功系列之chmod命令实战

文章目录一. chmod命令介绍二. 语法格式及常用选项三. 参考案例3.1 对全部用户增加写的权限3.2 所有用户减去读的权限3.3 给文件的所有者和所有组加上读写权限3.4 设置所有用户为读写执行的权限3.5 文件拥有着为rwx&#xff0c;所属组为rw&#xff0c;其它为r3.6 去掉所有者的r…

高级Spring之ApplicationContext功能

第一步&#xff0c;我们先来看这个接口的内部结构&#xff0c;了解别人的内部&#xff0c;知己知彼&#xff0c;百战不殆&#xff1a; 这个接口的扩展功能主要体现在它继承的四个接口上&#xff1a; MessageSource&#xff1a;国际化功能 ResourcePatternResolver: 资源访问功…