遥感影像究竟做什么,怎么做

  说长不长说短也不短,已经3年过去了…3年来没有闭目造车,而是发挥了那个爱玩的少年的天性…尽力的去探索一些东西…也没算白费时光,至少做到了做出了一些东西,遥感影像就是个栅格矩阵,里面有你要的物理属性信息,你所要做的就是处理它,提供给决策部门,提供决策信息.处理的时候你用软件也行,可见即所得(但是批量服务经常需要版权),用编程的方法呢,可以解决批量问题,但是上手需要很久的时间.但是软件其实就是程序封上了一层皮而已(在这篇文章里我排除硬件方面的知识,主要是我对硬件的了解得很少 )

问题

  有人问我,胖友,这个该怎么做该怎么实现…我不知道该怎么回答,在这个信息社会里,消息非常的多,但是真正有用的信息是需要通过自己的提炼然后转变成自己的知识的…其实,很多时候百度东找一个工具,西找一个工具,西看一个回答,东看一个回答,时间全部浪费了.很多时候,真正有用的信息都被藏在了别人自己开发的说明书里,可惜,遥感的软件大多数是外国公司的所以只能硬啃英文,遥感软件说多不多,说少也不少,只是很多人在学校里学习的时候就习惯了ENVI、Eardas.然后就坚定的认为,以后处理影像只能用这两个软件…殊不知,像国外的易康等,国内还有沈阳农业大学李国春教授的RSD处理GF,FY,WV等等软件,
但是其实我更想说的是,软件更多的只是一种工具,一种帮你实现你想看到的东西的一种工具,编程也一样.真正重要的是后面的数学原理

穿过问题看本质

图1. 阿猫阿狗矩阵

  上地理参考和投影信息,带上地理参考和投影信息的矩阵,如果你能把两者分解出来处理完矩阵之后再组合回去.什么ENVI、Eardas可有可无…这个矩阵里可以是飞机火车,也可以是阿狗阿猫的…演变到现在这么多的数据,只要找到适合自己的数据即可了…

图2. 高斯投影

熟悉不能再熟悉的图.但是如果我用计算机语言去寻找描述呢?

图3. 地理参考计算机表达(MATLAB)
图4. 地理参考计算机表达(python)
 
图5. 地理参考计算机表达(IDL)
前些天在阅读USGS L8 level1官方文档的时候我发现了几段特别有意思的话..
图6. NASA关于GEOTIFF表述

geotiff是我们经常处理的图像文件
而USGS 官网描述L8 Level1的时候加了那么一段话

  GeoTIFF定义了一组标记图像文件格式(TIFF)标记,这些标记描述了与地理TIFF图像相关的地图和大地测量信息。GeoTIFF是一种将光栅图像绑定到已知模型空间或地图投影并描述这些投影的方法。元数据格式提供与图像数据关联的地理信息。但是,TIFF文件结构允许元数据和图像数据编码到同一个文件中。

  这也应证了我之前的猜想,而经过许多次尝试之后我也发现确实如此,只要你能层层抽丝剥茧,抽出矩阵,抽出地理信息.那么接下来的任务就交给了计算机和数学 **所以人们说万物CS和Math是有道理的** 在上面我用MATLAB、python、IDL都抽出了地理信息..经过分离之后我只需要处理这个矩阵就行了.

以计算NDVI为例

很多人依靠ENVI 的tool NDVI去计算,甚至连用band math都不会,连band math怎么用都不知道…但是如果你有NDVI的计算公式…你会IDL,那么其实ENVI里计算NDVI就不是事情了…
N D V I = N I R − R e d N I R + R e d NDVI = \frac{NIR-Red}{NIR + Red} NDVI=NIR+RedNIR−Red​
这里两个波段不就是两个矩阵吗.做个矩阵减法和加法再做个矩阵除法就解决了问题…然后把地理信息和投影信息放回去不就ok了吗…有了这个思路,IDL,MATLAB,Python只要读+计算+写出不就好了吗~
于是我都尝试了一遍

图7. LaTeX排版的NDVI计算程序(IDL)

图8. LaTeX排版的NDVI计算程序(MATLAB)

图9. LaTeX排版的NDVI计算程序(python)

这三个代码块是我用LaTeX排出来的…我就不放代码了…挺简单的…
虽然MATLAB,IDL,Python在数据显示的精度方面会有差异,但是在ENVI里最后显示.NDVI并没有任何偏差.见下图咯!

图10.三种语言运行后的NDVI图像在ENVI中显示

  这也就是我之前所说的其实软件、语言其实并不是事情.
重要的是你懂数学原理并且把他去用计算机语言实现.

只说不做不行,只会“所见即所得、百度一下你就知道不行”,更有甚者“淘宝一键解君愁,只要我有钱问题就不是问题更不行”

简单分析下3种语言

  其实MATLAB、IDL、Python对于遥感来说MATLAB和IDL是更好的,因为它们专业就是处理矩阵的,而且从我以前写的许多程序来看,其实IDL处理问题的效率比MATLAB更高…

  MATLAB最早是用Fortran写的到了后面才有部分用cpp开始写了…毫无疑问,这是许多人会用的语言。但是它拥有太多的包,一下载盗版的就是30G左右,不尊重版权,不过现在开始有了MATLAB Oneline 可以在线编辑了. 不过确实处理矩阵方便,而且句法简单明了其次,本地的帮助文档真的很友好,plus:开源程度也不错,国内有专门的ilovematlab论坛~~

图10.MATLAB的帮助文档

  再看看IDL,IDL的内核是cpp,ENVI是用IDL写的,IDL是我觉得我学的语言里最糟心的了,没有之一了…句法混乱…如果不是要学我是真的不想用~,但是既然学了就用一用吧…帮助文档还行…其实看惯MATLAB还是看不惯233333,真的只想给差评…
最糟糕的是,它是闭源的,基本找不到一些程序,只能自己编.

图11.IDL的帮助文档

  python底层也是用cpp写的,其实原来并不应该归到遥感里面去的,但是经过学习思考之后发现其实它能在遥感领域逐渐火起来也是有原因的…

  1. 句法比较简单.就跟写英语一样!
  2. 让你彻底体会到开源的快乐!
  3. 像gdal、tensorflow等等的库的开发出来,让机器学习、深度学习有了应用.

  但是不得不说python处理矩阵依靠numpy库很大程度上会限制它的运行效率…
  其次它的帮助文档要上网站,对于离线用用户不友好,在cmd或者terminal只能看部分的文档

图12.python的帮助文档

  三者都是编译式的语言,同时都能让你体会到OOM(面对对象编程)的快感.但是编译的语言…还是没法和C++,C去相比的…
  但是其实没有必要去比较语言究竟哪个好哪个坏,只要适用自己的领域就好,就好比你不会希望用MATLAB去做网页,你不会希望用C++去做矩阵的处理…
只有适宜自己的语言,用上并且写出东西了,那才是真正有用的.

总结

  正如你之前看到的那样,用各种语言都能做出需要的东西,请不要再局限自己于用什么做…也不要问我究竟用什么做…好累~~
找到自己的擅长的使用就好了…
真正重要的是,把数学原理给抽出来加上计算机的实现…最后写出东西来…
  plus:很多时候官方的documentation比百度有用的多.
花了一天的时间在写代码和写blog…自己有很多收获,更希望人们能理性的思考问题.在信息社会中不要失去了一个人最重要的能力——思考.
  最后,放上自己玩的LaTeX笔记…祝大家汪汪汪汪汪汪汪节快乐.

从数学和编程的角度去看遥感影像和处理相关推荐

  1. 从软件开发角度去看当前的市面上的电子烟

    从事电子烟的软件开发已有一年,对电子烟也算有了一定的了解,下面从开发者的角度去介绍一下电子烟. 1.原理 传统意义上的电子烟都是通过电池供电,现在市面上的大部分使用的是18650系列的一节或者两节电池 ...

  2. Python爬取新型冠状病毒新闻进行LDA主题分析-从概率的角度去看文学

    一.主题介绍 使用 Python 爬取冠状病毒新闻 使用 jieba 分词进行词频分析 使用 LDA 主题模型提取新闻话题 通过词频分析绘制词云图 二.爬取新闻数据 目标网站:人民新闻网 导入我们需要 ...

  3. Linux内存管理宏观篇(一):不同角度去看内存(硬件)

    1.硬件角度 大家都曾经看过那个纸上打孔,记录数据的图片. 后来都知道出现了内存器,我们执行指令分为加载+运行. 最开始的程序运行时只能跑一个进程的,那就不需要复杂的内存管理,把我弄到固定的位置,然后 ...

  4. 从熵的角度去看公司变迁

    大的牛顿有第一第二和第三定律,但这是物理界的定律.其实产品也是有第一和第二第三定律.产品第一定律:起点与终点--创新创造始于价值创造,终于熵增衰亡,尽管可以通过自组织延缓.第二定律:第二定律:有我与无 ...

  5. 复制:王垠:数学和编程

    为什么80%的码农都做不了架构师?>>>    原文地址:http://blog.jobbole.com/95766/ 好些人来信问我,要成为一个好的程序员,数学基础要达到什么样的程 ...

  6. 看不到工作组的其他计算机_就这一次,从现实世界的角度去理解计算机领域的知识(给新手)...

    这篇文章的阅读对象是计算机专业在读及刚进入工作一年左右的的同学,文章措辞也许不太严谨,主要目的是为了让大家更容易理解. 01 便利店背后的"系统" "系统"这个 ...

  7. 十分钟理解线性代数的本质_数学对于编程来说到底有多重要?来看看编程大佬眼里的线性代数!...

    本文提出了一种观点:从应用的角度,我们可以把线性代数视为一门特定领域的程序语言.我们一起来看看!文章有点偏理论讨论,可能比较枯燥,对于一名程序员,你如果看下去,你将会有不一样的收获! 线性代数是什么? ...

  8. 数学对于编程来说重要吗?编程大佬眼里的线性代数

    线性代数是什么? 在大学数学学科中 线性代数是最为抽象的一门课 从初等数学到线性代数 思维跨度比微积分和概率统计要大得多 大多数小伙伴学过以后一直停留在 知其然不知其所以然的阶段 若干年之后接触图形编 ...

  9. 从现实世界的角度去理解计算机领域的知识

    ​ " 从现实世界的角度看计算机,可以帮助我们更清晰的学习计算机领域的知识. 本文试图用生活中常见的事物来解释计算机技术领域,让知识更通俗易懂 " 这篇文章的阅读对象是计算机专业在 ...

最新文章

  1. TensorFlow自编码器(AE)实战
  2. 程序控制发送文件到邮箱_Intouch邮件发送的真实案例(一),不可多得的技术尝试...
  3. iOS 15.2计划上线“数字遗产”!网友:管的真远,身后事都替我操心?
  4. html传递json中文乱码,解决后台传数据到前台中文乱码问题,使用@ResponseBody返回json 中文乱码...
  5. nexus私服搭建及maven生命周期
  6. Qt中的四种信号与槽的连接方式
  7. 使用正则把数字前面的符号替换_正则表达式(一) 基本表达式
  8. 什么是ip地址、子网掩码、网关和DNS?
  9. mysql rowid踢重_MySQL中主键与rowid的使用陷阱总结
  10. mysql 跳过一个事物_MYSQL GTID跳过指定事务
  11. if a != None:
  12. springboot整合aliyun的物流订单查询
  13. R语言检测异常值的几个案例
  14. 360抢票王验证码自动识别真的那么牛吗?
  15. 轻量级过程改进之项目计划
  16. three相机在模型上_threejs学习心得(场景的搭建+运动模型导入)
  17. Console 接口介绍及电路设计
  18. IBM X3650M3存储raid阵列瘫痪的恢复过程
  19. java实现HTTPS单向认证TLS指定加密套件(文章很详细,好文章!)
  20. 文件系统可视化与文件管理

热门文章

  1. 什么是脏读?不可重复读?幻读?如何解决?
  2. 1037u支持64位linux吗,英特尔® 赛扬® 处理器 1037U
  3. html圆形图片切换,jQuery和CSS3炫酷圆形图片切换特效
  4. 如何更新neovim以及安装指定版本
  5. 对偶理论说明(深入理解)
  6. 微信小程序实现一个表格table
  7. html5中hr是什么意思,【hr是什么意思】hr的意思_hr指的是什么_亲亲宝贝网
  8. 实现微信小程序web-view内嵌H5中的下载功能(大文件切片下载)
  9. JAVA(第六版)——期末复习2
  10. Linux-命令:ll命令报错-bash: ll: command not found