全自动Landsat影像温度反演软件开发
许久没有更新遥感类软件开发了,都有点生疏了,这一次我带来了一个老的算法,新的东西, 为什么这么说呢,我们知道Landat8、Landsat5等影像,单个影像去做温度反演,并没有什么太大的难度,
但是呢,如果遇到大批量、多源的数据怎么办呢,如果一景景去调参、去设计模型,那就是在太浪费时间了,我看过市面上面所有的同类温度反演软件,几乎没有人做到全自动Landat系列的温度反演,
但是规划类的业务应用需求,往往需要大尺度范围的高精度温度反演结果,这就有点尴尬了,源于这个需求,我开发了市面上第一个全自动批量化Landsat8温度反演软件,在此抛砖引玉,相信山外有山,
定有其他高手能做出更优秀的全自动温度反演软件,如需交流,qq:1044625113,下面我讲一下开发流程与算法模型基础:
1.算法模型基础
算法层面,我不讲太多,大家可以参考一些覃志豪老师、国外的一些Professor写的经典论文,归根到底就是两类:单通道和多通道。其中针对Landsat8数据源,覃志豪老师已经明确了,单通道更为合适,这是由于该
数据源有一个热红外通道出现了问题(不知道这样表述是否明确)。我这里全自动的温度反演算法,就是采用经典的覃志豪单通道算法,为了提高自动化程度,一些大气参数,我采用了NASA开发的网站进行查询获取,比如大气
向上辐射参数、大气透过率等。这里我采用了一个技巧,大气参数需要手动获取,我采用爬虫技术自动获取大气参数,这里就“曲线救国”的方式得到了自动化的大气参数,这样算法层面就可以自动化了,如果大家有其他算法,需要大气参数的,
当然可以参考我的思路。
对于完整的温度反演,我这里核心部分采用c++实现,部分代码如下:
#include "mex.h"
#include <cmath> using namespace std; /*地表温度反演
* t: 大气参数
* Lu: 大气参数
* Ld: 大气参数
* aima: 地表比辐射率
* band10_rad: 辐射定标后第10波段
*/
void LST_Landsat8(double t, double Lu, double Ld, double *aima, double *band10_rad, int imglength, double *LST) {
// double *LST = new double[imglength];
double *BlaRad = new double[imglength]; mexPrintf("大气透过率参数: %f\n",t);
mexPrintf("大气向上透过率参数: %f\n",Lu);
mexPrintf("大气向下透过率参数: %f\n",Ld);
mexPrintf("图像大小为: %d\n",imglength); for (int i = ; i < imglength; i++)
{
BlaRad[i] = (band10_rad[i] - Lu - t*( - aima[i]) * Ld) / (t*aima[i]);
LST[i] = 1321.08 / log(774.89 / BlaRad[i] + ) - ; //mexPrintf("%f\n",BlaRad[i]);
// mexPrintf("%f\n",LST[i]);
}
delete[] BlaRad; //释放内存
//delete[] aima;
//delete[] band10_rad;
// return LST;
} // c++入口主函数
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) //编译代码
{
// 检查输入变量数量是否正确,否则报错
if (nrhs != )
mexErrMsgTxt("变量个数应当为5个...\n"); // 检查输出变量数量是否正确,否则报错
if (nlhs > )
mexErrMsgTxt("输出变量个数不能超过1个...\n"); #define t prhs[0] // matlab传过来的参数列表
#define Lu prhs[1]
#define Ld prhs[2]
#define aima prhs[3]
#define b10_rad prhs[4] // #define LST_band plhs[0] // 传回matlab的反演温度波段 int M = mxGetM(aima);
int N = mxGetN(aima);
int imglength = M*N; //printf("%d", imglength); plhs[] = mxCreateDoubleMatrix(M, N, mxREAL); double *t1; // 得到输入参数指针变量
double *Lu1;
double *Ld1;
double *aima1;
double *b10_rad1; double *lst_band; t1 = mxGetPr(t); // 得到输入参数指针变量
Lu1 = mxGetPr(Lu);
Ld1 = mxGetPr(Ld);
aima1 = mxGetPr(aima);
b10_rad1 = mxGetPr(b10_rad); /*mexPrintf("%f", *t1);
mexPrintf("%f", *Lu1);
mexPrintf("%f", *Ld1);*/ // lst_band = mxGetPr(LST_band);
lst_band = mxGetPr(plhs[]); // 执行c++温度反演主函数
// 特别注意一下,c++混合编程时,输出变量应当作为函数的输入
// lst_band = LST_Landsat8(t1[0], Lu1[0], Ld1[0], aima1, b10_rad1, imglength, lst_band); LST_Landsat8(t1[], Lu1[], Ld1[], aima1, b10_rad1, imglength, lst_band);
}
上面是黑体辐射部分,之所以采用c++实现,是c++效率比较高,比matlab大概要快3倍左右。
全自动反演软件:
2.实验结果
实验算法,我采用湖南省、重庆市夏季、冬季等L8影像,部分反演结果如下所示:
这是渲染后的结果,可以看到结果还是比较好的。
3.继续改进
这里面我采用爬虫技术曲线救国实现自动化批量温度反演,后面我会继续采用全自动的爬虫技术获取遥感影像,免去数据下载的痛苦,实现真正的一键大尺度温度反演。交流qq:1044625113
全自动Landsat影像温度反演软件开发的更多相关文章
- 基于Google Earth Engine的全国地表温度反演
国内研究landsat8温度反演的人员很多,但是现有算法一般都是一景为例子,进行开展. 这有一个局限性,当研究的尺度很大时,就需要比较大的运算量了,例如全省温度,全国温度,全球温度,当然大家可能会说, ...
- R型思维模式对软件开发的影响(草稿)
The pragmatic programmers 一直在工作之余读些书,之前主要是纯英文版的计算机相关的算法,编译器,数学等,想通过读这些书来提高自己每日工作效能,结果收效甚微.一是,因为纯英文的书 ...
- 从Windows角度看Mac OS X上的软件开发
如果原来从事Windows软件开发,想跨足或转换至Mac OS X环境,需要知道那些东西?有什么知识技能可以快速运用在Mac OS X环境上的?这两个问题应该是Windows开发者进入Mac OS X ...
- java 软件开发面试宝典
一. Java 基础部分........................................................................................ ...
- nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞
第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...
- 敏捷软件开发VS传统软件工程
敏捷软件开发:又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新兴软件开发方法,是一种应对快速变化的需求的一种软件开发能力. 与传统软件工程相比,它们的具体名称.理念.过程.术语都不尽相同 ...
- Atitit.软件开发的三层结构isv金字塔模型
Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...
- BZOJ 1221: [HNOI2001] 软件开发
1221: [HNOI2001] 软件开发 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1428 Solved: 791[Submit][Stat ...
- Code Complete 笔记—— 第二章 用隐喻来更充分理解软件开发
在这章里面,提到的隐喻,类同于比喻(建模)的方法的去理解软件开发. 隐喻的优点在于其可预期的效果能被所有人所理解.不必要的沟通和误解也因此大为减低,学习与教授更为快速,实际上,隐喻是对概念进行内在化和 ...
随机推荐
- C++中的模板编程
一,函数模板 1.函数模板的概念 C++中提供了函数模板,所谓函数模板,实际上是建立一个通用函数,其函数的返回值类型和函数的参数类型不具体指定,用一个虚拟的类型来表示.这个通用函数就被称为函数的模板. ...
- QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用
FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QL ...
- Tinyhttpd - 超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client(Qt也有很多第三方HTTP类)
- 2. Tinyhttpd tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Htt ...
- 如何将任意文件固定在 Win10 的开始屏幕中
虽然Wox和Launchy是我日常启动程序的主力方式,不过开始屏幕的图标方便归类,这是快速启动工具所不能提供的,因此我也会将最常用的程序在开始屏幕上分类固定. 最近需要将一个常用的批处理文件(*.ba ...
- VUE线上通过nginx反向代理实现跨域
1.NGINX反向代理实现跨域 VUE代码中配置参考上一篇文章 nginx配置,红色框线内: 代码: location /list { proxy_set_header X-Real-IP $remo ...
- 【 D3.js 入门系列 --- 6 】 如何使移动图表
我的个人博客是: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. [5.1]节中制作了一个比較完好的图表.但它是静态的.想做出它的动 ...
- C#开发奇技淫巧一:调试windows系统服务
原文:C#开发奇技淫巧一:调试windows系统服务 windows系统服务不能直接运行,只能在安装完服务之后启动.暂停.继续.停止服务,导致服务的调试不能使用一般的断点调试. 要调试系统服务,可以采 ...
- Win8 Metro(C#)数字图像处理--2.50图像运动模糊
原文:Win8 Metro(C#)数字图像处理--2.50图像运动模糊 [函数名称] 图像运动模糊算法 MotionblurProcess(WriteableBitmap src,int ...
- 微信小程序把玩(二十三)modal组件
原文:微信小程序把玩(二十三)modal组件 modal弹出框常用在提示一些信息比如:退出应用,清楚缓存,修改资料提交时一些提示等等. 常用属性: wxml <!--监听button点击事件-- ...
- asp.net core2.0中网站发布的时候,视图文件不被打包成dll
项目csproj文件里面加 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <Target ...