Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用numpy从卷中提取并保存切片_Python_Numpy_Imaging_Medical - Fatal编程技术网

Python 使用numpy从卷中提取并保存切片

Python 使用numpy从卷中提取并保存切片,python,numpy,imaging,medical,Python,Numpy,Imaging,Medical,我正在尝试使用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.t

我正在尝试使用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()
代码干净地完成了,但是当我用外部程序打开切片时,它不是切片数据,而是垃圾

我做错了什么


谢谢

你的第一个问题是你的轴错了。假设要使用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中的一个内置名称,如果用其他东西来隐藏它,您可能会遇到麻烦。

您的第一个问题是您的轴错误。假设要使用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中的一个内置名称,如果用其他东西来隐藏它,您可能会遇到麻烦。

什么外部程序可以打开numpy数组文件?它们是原始文件,我使用MANGO,它是一个DICOM查看器,也可以打开原始数据。我认为要保存为numpy数组,必须使用load()和save()。如果我错了,请纠正我。
numpy.load()
numpy.save()
仅适用于基本上包含pickle数组对象的numpy特定文件格式。什么外部程序打开numpy数组文件?它们是原始文件,我使用MANGO,它是一个DICOM查看器,也可以打开原始数据。我认为要保存为numpy数组,必须使用load()和save()。如果我错了,请纠正我。
numpy.load()
numpy.save()
仅适用于基本上包含pickle数组对象的特定于numpy的文件格式。感谢您的回答,我应用了您的建议,但问题仍然存在。将Numpy视图写入文件可能会有问题吗?不,不会有问题。如果不知道更多关于数据应该是什么样子或者它是如何形成的,我认为没有更好的答案。您确定正在读取的文件只包含原始数据吗?如果是的话,它是按C顺序写的吗?我确信它只包含原始数据。如果我将原始数组写入文件,它与原始输入文件相同。我确信它是按C顺序排列的。我正在上传一个示例。您是否安装了matplotlib?如果是,那么如果您将matplotlib.pyplot导入为plt,它会显示什么;plt.imshow(slice)?我无法上传图像,新用户。但你可以看到这里和。matplotlib也有同样的问题。谢谢你的回答,我应用了你的建议,但问题仍然存在。将Numpy视图写入文件可能会有问题吗?不,不会有问题。如果不知道更多关于数据应该是什么样子或者它是如何形成的,我认为没有更好的答案。您确定正在读取的文件只包含原始数据吗?如果是的话,它是按C顺序写的吗?我确信它只包含原始数据。如果我将原始数组写入文件,它与原始输入文件相同。我确信它是按C顺序排列的。我正在上传一个示例。您是否安装了matplotlib?如果是,那么如果您将matplotlib.pyplot导入为plt,它会显示什么;plt.imshow(slice)?我无法上传图像,新用户。但你可以看到这里和。matplotlib也有同样的问题。