Python 将图像交织更改为BIL
我正在使用的是一个BIP交织器,或者是像素交织的频带。我想将数据类型转换为BIL(按行交错的频带)。在图像处理语言IDL中,您可以使用函数来实现这一点,但它使用专有软件。是否有任何python库具有执行此任务的功能?我对AVIRIS数据及其处理完全不熟悉,因此可能有更简单或更好的访问方法,我不知道。然而,我从链接的网站上找到并下载了一个小样本,如下所示: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
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格式保存图像。太好了!请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。也可能会投票表决。非常感谢。祝你的项目好运!