Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将图像交织更改为BIL_Python_Image_Image Processing - Fatal编程技术网

Python 将图像交织更改为BIL

Python 将图像交织更改为BIL,python,image,image-processing,Python,Image,Image Processing,我正在使用的是一个BIP交织器,或者是像素交织的频带。我想将数据类型转换为BIL(按行交错的频带)。在图像处理语言IDL中,您可以使用函数来实现这一点,但它使用专有软件。是否有任何python库具有执行此任务的功能?我对AVIRIS数据及其处理完全不熟悉,因此可能有更简单或更好的访问方法,我不知道。然而,我从链接的网站上找到并下载了一个小样本,如下所示: import numpy as np from PIL import Image # Define datafile parameters

我正在使用的是一个BIP交织器,或者是像素交织的频带。我想将数据类型转换为BIL(按行交错的频带)。在图像处理语言IDL中,您可以使用函数来实现这一点,但它使用专有软件。是否有任何python库具有执行此任务的功能?

我对AVIRIS数据及其处理完全不熟悉,因此可能有更简单或更好的访问方法,我不知道。然而,我从链接的网站上找到并下载了一个小样本,如下所示:

import numpy as np
from PIL import Image

# Define datafile parameters
channels, samples, lines = 224, 735, 2017

# Load file and reshape
im = np.fromfile('f090710t01p00r11rdn_b_ort_img', dtype=np.int16).reshape(lines,samples,channels)

通过阅读
.hdr
文件(幸运的是,该文件是ASCII),我能够计算出数据是有符号的16位整数,由224个频带的像素进行频带交错,以及735个采样/行和2017行。因此,我可以加载图像并使用
Numpy
对其进行如下处理:

import numpy as np
from PIL import Image

# Define datafile parameters
channels, samples, lines = 224, 735, 2017

# Load file and reshape
im = np.fromfile('f090710t01p00r11rdn_b_ort_img', dtype=np.int16).reshape(lines,samples,channels)
数据是-32768…+32767范围内的有符号整数,因此,如果我们将32768相加,数据将为0..65536,然后乘以255/65535,我们应该得到一个可视但不辐射正确的图像,以证明从文件读取:

# That's kind of all - just do crude scaling to show we have it correctly
a = (im.astype(np.float)+32768.0)*255.0/65535.0
现在选择波段0并保存(使用PIL,但我们可以使用OpenCV或
tifffile
):

假设您现在可以使用
Numpy
按您喜欢的方式排列数据,因为我们已经成功地读取了它。所以,假设你想要第4波段的第7行,你可以使用:

a[7,:,4]
或第0行,所有标注栏:

a[0,:,:]

如果您想从224个色带中的3个色带制作假彩色合成,您可以像这样使用
np.dstack()
——我的色带是随机选择的:

FalseColour = np.dstack((a[...,37], a[...,164], a[...,200])).astype(np.uint8)

Image.fromarray(FalseColour).save('result.png')


关键词:Python、AVIRIS、高光谱图像处理、超光谱、按像素、按直线、平面、隔行交错的波段。

请问什么软件需要BIL数据?大多数当前的软件倾向于使用BIP“像素波段交错”或平面数据,即“平面波段交错”。我需要BIL作为我同事编写的算法。其中一个依赖项需要BIL。感谢您的帮助!使用您的工作流程,我能够将数据转换为所需的格式。然后我使用光谱库以BIL格式保存图像。太好了!请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。也可能会投票表决。非常感谢。祝你的项目好运!