gpt4 book ai didi

python - python 中 ROI 的质心

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:02 24 4
gpt4 key购买 nike

我有一个 ROI 的 Nifti 文件,它是一个 192 x 192 x 12 阵列,我希望能够找到整个事物以及 12 个切片中每个切片的质心。我正在使用

cm = join(dname, 'cardiac_roi.nii')
roi_img = nib.load(cm)
roi_data = roi_img.get_data()
CM = ndimage.measurements.center_of_mass(roi_data)

我得到错误:

TypeError: 'numpy.float64' object is not iterable

当我也只尝试一片时,同样的事情发生了

CM = ndimage.measurements.center_of_mass(roi_data[:,:,1])

我该如何解决这个问题?

最佳答案

您可以通过替换行来修复它:

CM = ndimage.measurements.center_of_mass(roi_data)

用线条:

import numpy  # Unnecessary if you've already done this.
CM = ndimage.measurements.center_of_mass(numpy.array(roi_data))

说明:根据您的评论,roi_data 是一个 NumPy memory-mapped array . ndimage.measurements.center_of_mass 函数需要一个常规的 NumPy 数组;即 ndarray 的一个实例。理论上,由于内存映射数组的类型为 memmap,而 memmapndarray 的子类,因此您的原始代码应该可以工作;实际上它失败了(正如您所发现的),解决方法是将内存映射数组显式转换为普通 NumPy 数组。您的代码不起作用这一事实代表违反了 Liskov substitution principle , 并指示 NumPy 或 SciPy(很可能是前者)中的错误。

查看 ndimage 源代码,我追踪了行为上的差异,直到对于内存映射数组 xx 的结果。 sum() 是另一个(零维)数组,而对于常规 NumPy ndarray xx.sum()< 的结果 是标量(例如 numpy.float64 的实例)。这个 NumPy bug report看起来很相关。

关于python - python 中 ROI 的质心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25369982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com