在 python 中读取没有 header 的 .img 医学图像

Read .img medical image without header in python

我有一张没有 header 文件的放射照片 .img 文件。但是,发布该文件的研究人员提供了有关它的信息

High resolution (2048 × 2048 matrix size, 0.175mm pixel size)
Wide density range (12-bit, 4096 gray scale)
Universal image format (no header, big-endian raw data)

我正在尝试使用 Python 打开文件,但无法打开。有人可以建议任何读取此图像文件的方法吗?

我通过下载 JSRT database 找到了一些射线照片图像,就像你的一样。我已经在该数据库的第一张图片上测试了以下代码:JPCLN001.IMG.

import matplotlib.pyplot as plt
import numpy as np

# Parameters.
input_filename = "JPCLN001.IMG"
shape = (2048, 2048) # matrix size
dtype = np.dtype('>u2') # big-endian unsigned integer (16bit)
output_filename = "JPCLN001.PNG"

# Reading.
fid = open(input_filename, 'rb')
data = np.fromfile(fid, dtype)
image = data.reshape(shape)

# Display.
plt.imshow(image, cmap = "gray")
plt.savefig(output_filename)
plt.show()

它生成一个输出文件 JPCLN001.PNG,如下所示:

希望我已经回答了你的问题。 编码愉快!

以防万一其他人正在查看这些图像并想要批量转换它们,或者在 Python 之外并且不需要任何编程知识...您可以在命令行中轻松转换它们在带有 ImageMagick 的终端中(安装在大多数 Linux 发行版上,并且可用于 OS X 和 Windows),如下所示:

convert -size 2048x2048 -depth 16 -endian MSB -normalize gray:JPCLN130.IMG -compress lzw result.tif

这使得它们成为可以在任何应用程序中查看的压缩 16 位 TIF 文件。由于我指定了 LZW 压缩,因此它们还会占用磁盘上 space 的一半而不会降低质量。

同样,如果您想要 16 位 PNG 文件,您可以使用:

convert -size 2048x2048 -depth 16 -endian MSB -normalize gray:JPCLN130.IMG result.png