ENVI下根据需要生成特定类型、大小、规律的随机数据


本文源自一个客户的需求:“我想对影像的纬度求余弦值,但是坐标值不是存在像素值中,这个该如何做”。

1.生成方法

ENVI中可以根据需要生成特定类型、大小、规律的随机数据,在toolbox中,选择/Raster Management/Generate Test Data,弹出界面如下

图:Generate Image Parameters面板

 

  • 其中第一项中列出可以生成如固定值、水平渐变值、垂直渐变值、均匀分布、正态分布和高斯发散规律。
  • Value部分则根据不同类型可设置相应的参数。
  • 第二项设置输出文件的大小、行列号和数据类型
  • 第三项则设置输出文件或内存中。

2.应用

1)用户需求分析

对一影像来讲,ENVI中只显示了影像的数据值,而经纬度信息是根据头文件内容中的左上角点坐标和分辨率随时计算的,并不单独存为一波段或文件,故无法直接对纬度求余弦值。

2) 解决方法

问题可分为生成纬度数据和纬度求余弦两步。以ENVI自带的WorldDem(C:\Program Files\Harris\ENVI56\classic\data)文件为例,操作如下:

a)查看文件的基本信息

  在图层列表中,右键打开 view matedata

图:Edit ENVI Header

 

可得知,该图像左上角经纬度为[-180,90],大小为3600*1800,分辨率为[0.1°,0.1°]。

对应纬度图像应该为大小为3600*1800,分辨率为0.1°竖向渐变的图像。

b)生成纬度数据

利用数据生成工具,对应参数设置如下:

图:Generate Image Parameters参数设置

 

生成图像显示效果如下

图:初步纬度图像结果

得到的结果是最小值在左上角,从上到下值依次增大,最大值在左下角,而我们所需的纬度数据应该是从上到下依次减小,最大值在左上角,相当于把图像沿着第一行向上做个翻转,所以需要根据数据值做一个运算,得到我们需要的图像。在本例中,只需将值的符号进行反转即可,故在波段运算的表达式为-b1,b1为我们上一步生成的随机图像。

图:bandmath表达式

 

波段运算后图像为预期得到的纬度数据分布图。

图:修正后纬度图像结果

c)余弦求解

直接波段运算求解。但要注意,cos函数的输入要求必须是弧度,而咱们的数据是角度,故需要转换下,最终波段运算表达式为COS(b1*!pi/180)或COS(b1*!dtor)。b1为上一步运算得到的纬度图像。