<p>我有一个多波段卫星图像存储在波段交错像素(BIP)格式以及一个单独的头文件。头文件提供了详细信息,如图像中的行数和列数,以及带区的数量(可以超过标准的3)。在</p>
<p>图像本身是这样存储的(假设是5波段图像):</p>
<p>[B1][B2][B3][B4][B5][B1][B2][B3][B4][B5]。。。以此类推(基本上是5个字节-每个频带一个字节-从图像左上角开始的每个像素)。在</p>
<p>我需要在python3.2(windows7 64位)中将这些带分开作为PIL图像,目前我认为我处理问题的方式不正确。我目前的代码如下:</p>
<pre><code>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.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(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
</code></pre>
<p>这段代码花了太长的时间来打开一个BIP文件,肯定有更好的方法来实现这一点。我也有numpy和scipy库,但我不确定如何使用它们,或者它们是否能提供任何帮助。在</p>
<p>由于图像中的条带数量也是可变的,我发现很难找到一种方法来快速读取文件并将图像分割成各个部分。在</p>
<p>我曾经尝试过在循环中搞乱list方法(使用slices,不使用slices,只使用append,只使用extend等),这并没有特别大的影响,因为所涉及的迭代次数(width*height*numberOfBands)会损失主要时间。在</p>
<p>任何建议或建议都会很有帮助。谢谢。在</p>