Я пытаюсь зарегистрировать два 3d тома.Попытка это может найти здесь .Сначала код генерирует два разных тома, каждый из которых содержит ровно одну сферу радиуса 4. Затем я пытаюсь выровнять их, используя карту параметров перевода по умолчанию.Однако, как видно из последней строки (и из графиков при локальном запуске), результирующий том вообще не выровнен с фиксированным объемом.При попытке выполнить ту же процедуру, в этот раз в 2d полученное изображение выглядит правильно выровненным с фиксированным изображением, как видно здесь .Я неправильно использую SimpleElastix API?Я просмотрел репозиторий Github в SimpleElastix, но не смог найти никаких примеров регистрации 3D-изображений (по крайней мере, не используя тома, сгенерированные в Python, а затем преобразовав их в изображения ITK).
Код из примера 3d:
vol1 = np.zeros((50, 50, 50))
for x in range(vol.shape[0]):
for y in range(vol.shape[1]):
for z in range(vol.shape[2]):
vol1[x, y, z] = np.linalg.norm(np.subtract([x, y, z], [5, 3, 2])) < 4
vol2 = np.zeros((50, 50, 50))
for x in range(vol.shape[0]):
for y in range(vol.shape[1]):
for z in range(vol.shape[2]):
vol1[x, y, z] = np.linalg.norm(np.subtract([x, y, z], [20, 30, 10])) < 4
img_a = sitk.GetImageFromArray(vol1)
img_b = sitk.GetImageFromArray(vol2)
parameterMap = sitk.GetDefaultParameterMap('translation')
itk_filter = sitk.ElastixImageFilter()
itk_filter.LogToConsoleOn()
itk_filter.SetFixedImage(img_a)
itk_filter.SetMovingImage(img_b)
itk_filter.SetParameterMap(parameterMap)
itk_filter.Execute()
result_vol = sitk.GetArrayFromImage(itk_filter.GetResultImage())
np.max(np.abs(vol1 - result_vol))
Код из примера 2d:
vol1 = np.zeros((50, 50))
for x in range(vol1.shape[0]):
for y in range(vol1.shape[1]):
vol1[x, y] = np.linalg.norm(np.subtract([x, y], [20, 20])) < 4
vol2 = np.zeros((50, 50))
for x in range(vol2.shape[0]):
for y in range(vol2.shape[1]):
vol2[x, y] = np.linalg.norm(np.subtract([x, y], [4, 5])) < 4
img_a = sitk.GetImageFromArray(vol1)
img_b = sitk.GetImageFromArray(vol2)
parameterMap = sitk.GetDefaultParameterMap('translation')
itk_filter = sitk.ElastixImageFilter()
itk_filter.LogToConsoleOn()
itk_filter.SetFixedImage(img_a)
itk_filter.SetMovingImage(img_b)
itk_filter.SetParameterMap(parameterMap)
itk_filter.Execute()
result_vol = sitk.GetArrayFromImage(itk_filter.GetResultImage())
np.max(np.abs(vol1 - result_vol))