1

我正在尝试使用 numpy 从卷中提取切片。体积是 512x512x132,我想要切片号 66。每个体素都是一个无符号的 16 位整数。

我的代码是:

import numpy

original = numpy.fromfile(filepath, dtype=numpy.uint16)
original = numpy.reshape(original, (512,512,132))

slice = original[:,:,66]

f = open('test.rawl', 'w')
slice.tofile(f)
f.close()

代码很干净,但是当我用外部程序打开切片时,它不是切片数据而是垃圾。

我做错了什么?

谢谢

4

1 回答 1

1

你的第一个问题是你的轴错了。假设您要使用 132 层 512x512 图像:

original = numpy.fromfile(filepath, dtype=numpy.uint16).reshape((132, 512, 512))

然后对于切片:

slc = original[66]

此外,像 Numpy 数组这样的二进制数据使用:

f = open('test.raw', 'wb')

模式中的“b”用于二进制。否则,Python 将假定您正在尝试编写文本并执行诸如将换行符转换为系统的适当格式等操作。

顺便说一句,该ndarray.tofile()方法还需要一个文件名,因此除非您有特殊原因,否则没有必要首先创建文件句柄。你可以使用

arr.tofile('test.raw')

最后一点:尽量不要slice用作变量。这是 Python 中的一个内置名称,你可能会因为用其他东西遮蔽它而遇到麻烦。

于 2012-11-09T15:45:04.587 回答