标签: nifti

在python中从3d数组创建一个.obj文件

我的目标是使用python从一个漂亮的(.nii)格式获取.obj文件,目的是在Unity上打开它.我知道"scikit-image"软件包有一个名为"measure"的模块,它实现了Marching cube算法.我将行进立方体算法应用于我的数据,并获得我期望的结果:

verts, faces, normals, values = measure.marching_cubes_lewiner(nifty_data, 0)
Run Code Online (Sandbox Code Playgroud)

然后我可以绘制数据:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(verts[:, 0], verts[:,1], faces, verts[:, 2],
                linewidth=0.2, antialiased=True)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我已经找到了将数据(顶点,面法线,值)保存为.obj的函数,但我还没找到.因此,我决定自己建造它.

thefile = open('test.obj', 'w')
for item in verts:
  thefile.write("v {0} {1} {2}\n".format(item[0],item[1],item[2]))

for item in normals:
  thefile.write("vn {0} {1} {2}\n".format(item[0],item[1],item[2]))

for item in faces:
  thefile.write("f {0}//{0} {1}//{1} {2}//{2}\n".format(item[0],item[1],item[2]))  

thefile.close()
Run Code Online (Sandbox Code Playgroud)

但是当我将数据导入到unity时,我得到了以下结果:

在此输入图像描述

在此输入图像描述

所以我的问题如下:

  • 我在.obj制作过程中做错了什么?
  • 是否有更好的方式执行此操作的模块或功能?
  • 有可能做我想做的事吗?

谢谢.

更多例子:

蟒蛇:

在此输入图像描述

统一:

在此输入图像描述

python unity-game-engine marching-cubes .obj nifti

7
推荐指数
1
解决办法
2949
查看次数

Nibabel库中的get_data和get_fdata有什么区别?

我正在与 Nibabel 一起阅读一些 .nii 文件。我遇到了不同的示例,其中一些使用 get_data() 函数,而另一些则使用 get_fdata() 函数。我找不到他们的文档(nibabel manuel)中有什么区别。谁能解释一下吗?

提前致谢。

python nifti nibabel

7
推荐指数
1
解决办法
6047
查看次数

在 tensorflow 中输入一个晦涩的文件类型

我目前正在尝试在 MRI 扫描图像上训练神经网络模型。图像采用 NIfTI (.nii) 文件格式,我不相信 tensorflow 或 keras 具有固有的读取能力。我有一个 python 包,它允许我在 python 中读取这些文件,但是我无法弄清楚如何将这个包与 tensorflow 连接起来。我首先创建一个 tf.data.Dataset 对象,其中包含我的每个 MRI 扫描的路径,然后我尝试使用 Dataset.map() 函数读取每个文件并创建图像、标签对的数据集。我的问题是 tf.data.Dataset 对象似乎将每个文件名存储在张量而不是字符串中,但可以读取 .nii 文件类型的函数无法读取张量。有没有办法将文件路径字符串张量转换为可读字符串以允许我打开文件?如果不,

python nifti tensorflow

7
推荐指数
1
解决办法
544
查看次数

从numpy数组创建一个nifti文件

我有一个numpy数组,我想转换成一个nifti文件.通过文档,似乎PyNIfTI用于执行此操作:

image=NiftiImage(Array)               
Run Code Online (Sandbox Code Playgroud)

但是,不再支持PyNIfTI.PyNIfTI的继任者NiBabel似乎不支持这个功能.我肯定错过了什么.有谁知道如何做到这一点?

python file-format numpy nifti

6
推荐指数
2
解决办法
6979
查看次数

如何将Nifti文件转换为Numpy数组?

我在Nifti文件(.ii.gz)中有3D数组,我想将其保存为3D numpy数组.我使用Nibabel将Numpy转换为Nifti1.我可以这样做吗?

numpy nifti

5
推荐指数
2
解决办法
3912
查看次数

如何在 nibabel 中将 3D numpy 数组转换为 nifti 图像?

从这个问题如何将 Nifti 文件转换为 Numpy 数组?,我创建了一个 nifti 图像的 3D numpy 数组。我对这个数组做了一些修改,比如我通过添加零填充来改变数组的深度。现在我想将此数组转换回 nifti 图像,我该怎么做?

我试过:

imga = Image.fromarray(img, 'RGB')
imga.save("modified/volume-20.nii")
Run Code Online (Sandbox Code Playgroud)

但它不识别nii扩展名。我也试过:

nib.save(img,'modified/volume-20.nii')
Run Code Online (Sandbox Code Playgroud)

这也不起作用,因为如果我想使用功能img必须是。在上面的两个例子中都是一个 3D numpy 数组。nibabel.nifti1.Nifti1Imagenib.saveimg

python numpy nifti nibabel neuro-image

5
推荐指数
1
解决办法
5285
查看次数

通过 Nibabel 加载 Nifti 并使用形状函数

我有一个 nifti 文件1.nii.gz

在此输入图像描述

现在,我从来没有处理过 nifti 文件

所以,只要使用这个软件打开它,我就意识到 nii.gz 是一种包含3 个二维图片数组的容器。事实上,如果我滚动鼠标,我可以看到图片中标记为 1 的“方向”的 448 个 2d 图片、“方向”2 的 448 个 2d 图片和“方向”3 的 25 个 2d 图片。

之后,我打开 shell,尝试将 nii.gz 与 Nibabel 库一起使用

import nibabel as nib
img = nib.load(1.nii.gz)
Run Code Online (Sandbox Code Playgroud)

但是,如果我输入

img.shape
Run Code Online (Sandbox Code Playgroud)

我得到 (448,448,25) 结果,所以看起来这个 .nii.gz 是一个 3d 矩阵,而不是一个包含 3 个 2d 图片数组的容器。你能解释一下吗?

python neuroscience nifti mri nibabel

3
推荐指数
1
解决办法
8343
查看次数

如何计算nifti医学图像单个体素的体积?

我已经使用 nibabel 工具加载了 nifti 图像文件,并且使用了一些属性。\n但我不知道\xe2\x80\x99t 不知道如何计算单个体素的体积(以 mm\xc2\xb3 为单位)。

\n

volume medical voxel nifti nibabel

2
推荐指数
1
解决办法
6325
查看次数

使用 dicom2nifti 转换无法正常工作

我有一系列(.dcm)要转换为nii.gz文件的每位患者的 dicom 文件,但以下转换没有任何反应(甚至是错误信息)...

import dicom2nifti
dicom2nifti.settings.set_gdcmconv_path('C:/Program Files/GDCM 3.0/bin/gdcmconv.exe')
dicom2nifti.convert_directory('M0_1', 'M0_1.nii.gz')
Run Code Online (Sandbox Code Playgroud)

尝试其他方法时出现错误......

import dicom2nifti
dicom2nifti.settings.set_gdcmconv_path('C:/Program Files/GDCM 3.0/bin/gdcmconv.exe')
dicom2nifti.dicom_series_to_nifti('M0_1', 'M0_1.nii.gz')
Run Code Online (Sandbox Code Playgroud)

错误日志:

Traceback (most recent call last):
  File ".\test.py", line 5, in <module>
    dicom2nifti.dicom_series_to_nifti('M0_1', 'M0_1.nii.gz')
  File "D:\Anaconda3\envs\pydicom\lib\site-packages\dicom2nifti\convert_dicom.py", line 78, in dicom_series_to_nifti
    return dicom_array_to_nifti(dicom_input, output_file, reorient_nifti)
  File "D:\Anaconda3\envs\pydicom\lib\site-packages\dicom2nifti\convert_dicom.py", line 112, in dicom_array_to_nifti
    if not are_imaging_dicoms(dicom_list):
  File "D:\Anaconda3\envs\pydicom\lib\site-packages\dicom2nifti\convert_dicom.py", line 151, in are_imaging_dicoms
    if common.is_philips(dicom_input):
  File "D:\Anaconda3\envs\pydicom\lib\site-packages\dicom2nifti\common.py", line 102, in is_philips
    header = dicom_input[0]
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

文件结构:

M0_1 …
Run Code Online (Sandbox Code Playgroud)

python image-conversion nifti pydicom medical-imaging

2
推荐指数
1
解决办法
2761
查看次数

Nrrd 到 Nifti 文件的转换

我希望将 ~1000 个.nrrd文件转换为 Nifit ( .nii.gz) 格式。我一直在使用3DSlicerResampleScalarVectorDWIVolume命令行模块来完成这项任务。但是这个过程真的很慢。转换我系统上的每个文件大约需要 4 分钟。我想知道人们使用什么工具进行此类转换?

python nifti

0
推荐指数
1
解决办法
4030
查看次数