正在读取Python中的*.his(图像)文件



我正在尝试读取*.his格式的图像文件。老实说,我对这种格式了解不多,在谷歌上花了一些时间后,我发现它是一种二进制格式,可以在ImageJ软件中作为原始格式导入读取。在进一步的询问中,我发现了*.his文件的以下细节:

  • 图像类型=16位无符号
  • 矩阵尺寸(像素)=w1024 x h1024
  • 跳过标头信息=100字节(图像数据的第一个字节之前的文件中的字节数)
  • 小字节顺序

有了这些信息,我开始。。。


只是想一个接一个地打印值,只是为了查看输出:

f = open("file.his", 'rb')
f.seek(100) 
try:
byte = f.read(2)
while byte != "":
byte = f.read(2)
print unpack('<H', byte) 
finally:
f.close()

它打印出一些数字,然后显示错误消息:。。。。。(64846,)(64846,)(64830,)

追踪(最近一次通话):打印解包('

有人能建议我如何阅读这种文件吗。我仍然认为"开箱"是正确的功能,但如果有人有类似的经历,任何回应都将不胜感激。

Rky。

我用*.inr图像文件做了一个非常类似的任务,也许逻辑可以帮助你,这里是你可以应用的:

1-读取文件

首先你需要读取文件。

file = open(hisfile, 'r')
inp = file.readlines()

2-获取标头

在我的情况下,我做了一个for循环,直到字符数为256,在你的情况下你需要计算比特数,这样你就可以逐行"打印",以确定何时需要停止或尝试使用它来计算比特数:

import sys
sys.getsizeof(line) #returns the size of the object

3-数据

当您已经知道以下几行是原始数据时,您需要将它们放在一个带有for循环的变量中:

for line in inp:
raw_data += line

4-转换数据

要将字符串转换为numpy数组,可以执行以下操作:

data = fromstring(raw_data, dtype='uint16')

然后应用形状数据:

data = data.reshape((1024,1024)).transpose() #You need to see if the transpose part its relevant,because in my case was fundamental.

也许如果你有一个文件的例子,我可以试着阅读它,并为你提供更多帮助。当然,您可以使用if在1 for循环中完成所有过程。

最近我们需要处理HIS文件。我从这里得到了帮助。这是我们读取HIS文件的代码:

f = open(myfile, 'rb')
f.seek(100)
data=[]
try:
byte=f.read(2)
while byte!='':
a=unpack('<H', byte)
b=list(a)
data.append(list(a)[0])
byte=f.read(2)
if len(byte)!=2:
break
finally:
f.close()
nF=20 # 20 frames stored in our HIS file. Sum the 20 frames to get an image.
dataArray=np.array(data)
dataRe=np.array_split(dataArray,nF)
dataReArray=np.array(dataRe)
dataSum=dataReArray.sum(axis=0)

最新更新