飞道的博客

Python遥感图像处理应用篇(四):python如何使用numpy读取遥感图像光谱值

534人阅读  评论(0)

1.数据准备

1.1 影像数据选取

这里选取一景OLI8(Landsat8)数据作为测试数据,该数据已经进行过辐射定标和大气校正。该数据显示如下

数据信息:轨道号12340  时间20190817 

由于一景数据过大,处理太耗费时间,这里裁剪一个规则矩形区域作为测试区。

1.2 绘制规则矩形

在ArcCatlog里面新建shapefile图层,投影选择和影像一致(对于较新版本实际上也可以随意设置,裁剪功能会自动转换投影进行裁剪),一般选择一致,这样更好一些。

选择矩形工具进行要素采集,即绘制一个规则矩形,这里是绘制一个水平的规则矩形。具体方法可以参考:Arcgis应用(二)使用editor工具绘制水平矩形

1.3 使用clip工具裁剪影像作为测试数据

使用以下第三个工具

或者直接从工具箱找到:

设置参数并点击OK输出结果

结果如下:

默认显示颜色很暗,可以拉伸一下,将符号系统属性中的max值设置为10,

效果如下:

至此,测试数据我们就做好了,我们可以看一下这个数据的基本参数信息如下:

有行列数信息:531行,580列,波段数信息:7个波段,这里分别是对应OLI8 2-8个波段,空间分辨率信息30m以及格式等。

2. 提取影像数据光谱值为txt文件

2.1 提取方法

具体方法可以参考博文:ArcGIS应用(一)提取遥感影像各波段值

这里具体步骤就省略了。

需要说明一下的是:

计算过程中,有的版本会报这个错误,10.2的就会报错(时间上查看路径的时候数据也计算出来了,结果也和10.3一样),10.3可以直接计算出来不报错。

结果显示如下:

我们查看属性表的时候会发现要素个数为305651,这和580*531=307980不一样,要少2329个。

2.2 问题分析

产生这个问题的原因首先推测应该是nodata像元值引起的,在数据格式转换过程中,遇到nodata的时候,可能没有转换为点数据。为了确认是否是这个原因,我们可以局部放大数据查看,如下:

上图中,有些白色像元中没有点,我们打开属性查看一下:

可以看到有波段是nodata的没有转化为点要素。

有数据缺失我们后面就没法准确计算影像数据的行列号了,所以这里必须要处理好。

2.3 问题解决办法

找到问题了之后,解决办法很简单,我们在裁剪的时候,输出结果的nodata Value设置为0.然后重新计算结果。

或者直接处理裁剪好的影像数据,将nodata转化为0值。这里就先用第二种试一下:

注意区分函数的大小写,如CON  ISNULL 如果都大写会报错

正确如下:

nodata去除了,但是影像变为单波段了,应该默认只计算了一个波段数据,看来还是在裁剪的时候直接设置为0值比较好。

直到属性表中要素个数为305651,和580*531=307980一样就可以了。

3.numpy读取光谱值数据

更新中……


转载:https://blog.csdn.net/soderayer/article/details/116572325
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场