我有一个以波段交错像素 (BIP) 格式存储的多波段卫星图像以及一个单独的头文件。头文件提供了图像中的行数和列数,以及波段数(可以超过标准3)等详细信息。
图像本身是这样存储的(假设一个 5 波段图像):
[B1][B2][B3][B4][B5][B1][B2][B3][B4][B5] ... 等等(基本上 5 个字节 - 每个波段一个 - 每个像素开始从图像的左上角)。
我需要在 Python 3.2(在 Windows 7 64 位上)中将这些波段中的每一个分离为 PIL 图像,目前我认为我正在错误地解决问题。我目前的代码如下:
def OpenBIPImage(file, width, height, numberOfBands):
"""
Opens a raw image file in the BIP format and returns a list
comprising each band as a separate PIL image.
"""
bandArrays = []
with open(file, 'rb') as imageFile:
data = imageFile.read()
currentPosition = 0
for i in range(height * width):
for j in range(numberOfBands):
if i == 0:
bandArrays.append(bytearray(data[currentPosition : currentPosition + 1]))
else:
bandArrays[j].extend(data[currentPosition : currentPosition + 1])
currentPosition += 1
bands = [Image.frombytes('L', (width, height), bytes(bandArray)) for bandArray in bandArrays]
return bands
这段代码打开 BIP 文件的时间太长了,肯定有更好的方法来做到这一点。我也有 numpy 和 scipy 库,但我不确定如何使用它们,或者它们是否会以任何方式提供帮助。
由于图像中的波段数量也是可变的,我发现很难找到一种快速读取文件并将图像分成其组成波段的方法。
只是为了记录,我尝试在循环中弄乱列表方法(使用切片,不使用切片,仅使用追加,仅使用扩展等),它并没有特别重要,因为主要时间丢失了,因为涉及的迭代次数 - (width * height * numberOfBands)。
任何建议或建议都会非常有帮助。谢谢。