Присвоение индексированных изображений в SimpleITK - PullRequest
1 голос
/ 22 апреля 2020

Каков наилучший способ назначения значений или срезов индексированным массивам в SimpleITK?

Пример (1) : присвоение 2D-сечения индексированному 2D-срезу в 3D-томе

В NumPy мы можем сделать следующее присвоение индексным массивам:

import numpy as np
nda = np.ones((64, 256,256))
nda[0,:,:] = 2*nda[0,:,:]

Та же операция в SimpleITK,

 import SimpleITK as sitk
 image = sitk.GetImageFromArray(nda)
 image[:,:,0] = 2*image[:,:,0]

дает следующую ошибку :

IndexError                                Traceback (most recent call last)
<ipython-input-18-4649e90a4ea5> in <module>
----> 1 image[:,:,0] = 2*image[:,:,0]

~/anaconda3/lib/python3.7/site-packages/SimpleITK/SimpleITK.py in __setitem__(self, idx, value)
 4690 
 4691     # the index parameter was an invalid set of objects
-> 4692         raise IndexError("invalid index")
 4693 
 4694 

IndexError: invalid index

Пример (2) : Присвоение значения индексированному 2D-срезу в 3D-томе Следующая операция в NumPy,

  nda[0,:,:] = 2

n SimpleITK,

 image[:,:,0] = 2

дает ту же ошибку индекса, что и в примере (1).

1 Ответ

1 голос
/ 22 апреля 2020

К сожалению, вы не можете выполнять такие операции в SimpleITK. Левая часть оператора присваивания должна быть одним пикселем. Это не может быть срез.

Чтобы выполнить эти типы операций, необходимо извлечь срез из тома, выполнить операцию с срезом, а затем использовать функцию вставки, чтобы вставить срез обратно в громкость.

Вы можете увидеть пример функции Вставить в предыдущем ответе, который я разместил: { ссылка }

...