Простая проблема ITK при сохранении поля деформации: поле деформации пусто
Мне нужна помощь с simpleITK, я работаю с файлами NII, чтобы вычислить поле деформации. Я использую Python и simpleITK (simpleitk 1.2.0rc2.dev1167+gd4cf2). Я могу легко зарегистрировать свои изображения или объемы, но не могу получить поле деформации! Когда я печатаю его в консоли, simpleITK сообщает мне, что вектор является изображением, как и было предсказано, но когда я пытаюсь сохранить его с помощью "WriteImage", который является функцией-членом ситка, записанное изображение заполнено нулевыми значениями.
код, используемый для этого:
def RegistrationGel(pathImage1,pathImage2):
elastixImageFilter = sitk.ElastixImageFilter()
elastixImageFilter.SetFixedImage(sitk.ReadImage(pathImage1))
elastixImageFilter.SetMovingImage(sitk.ReadImage(pathImage2))
parameterMapVector = sitk.VectorOfParameterMap()
parameterMapVector.append(sitk.GetDefaultParameterMap("affine"))
#parameterMapVector.append(sitk.GetDefaultParameterMap("bspline"))
elastixImageFilter.SetParameterMap(parameterMapVector)
elastixImageFilter.Execute()
sitk.WriteImage(elastixImageFilter.GetResultImage(),"C:/Users/Armand/Desktop/RecalageGel/Output/resultImageGel.nii")
transformixImageFilter = sitk.TransformixImageFilter()
transformixImageFilter.SetMovingImage(sitk.ReadImage(pathImage2))
transformixImageFilter.ComputeDeformationFieldOn()
#transformixImageFilter.SetOutputDirectory("C:/Users/Armand/Desktop/RecalageGel/Output/DeformationFIELD.nii")
transformixImageFilter.SetTransformParameterMap(elastixImageFilter.GetTransformParameterMap())
transformixImageFilter.Execute()
sitk.WriteImage(transformixImageFilter.GetDeformationField(),"C:/Users/Armand/Desktop/RecalageGel/Output/OutputDef.nii")
Я также попытался установить выходной каталог transformixImageFilter, но безуспешно. Я правда не понимаю, что тут происходит... У кого-нибудь есть решение или такая же проблема? Я прочитал несколько реальных тем, но безуспешно. Заранее спасибо:)
1 ответ
У меня была та же проблема, но, как ни странно, теперь она, похоже, сработала ... вот мой код:
moving = sitk.ReadImage("path_to_my_moving_image")
fixed = sitk.ReadImage("path_to_my_fixed_image")
elastixImageFilter = sitk.ElastixImageFilter()
parameterMapVector = sitk.VectorOfParameterMap()
elastixImageFilter.SetFixedImage(fixed)
elastixImageFilter.SetMovingImage(moving)
parameterMapVector = sitk.VectorOfParameterMap()
parameterMapVector.append(sitk.GetDefaultParameterMap("rigid"))
parameterMapVector.append(sitk.GetDefaultParameterMap("affine"))
parameterMapVector.append(sitk.GetDefaultParameterMap("bspline"))
elastixImageFilter.SetParameterMap(parameterMapVector)
elastixImageFilter.Execute()
transformixImageFilter = sitk.TransformixImageFilter()
transformixImageFilter.SetMovingImage(moving)
transformixImageFilter.SetTransformParameterMap(elastixImageFilter.GetTransformParameterMap())
transformixImageFilter.ComputeDeformationFieldOn()
transformixImageFilter.LogToConsoleOn()
transformixImageFilter.SetOutputDirectory("path_to_my_outputfolder/")
transformixImageFilter.Execute()
sitk.WriteImage(transformixImageFilter.GetDeformationField(), "path_to_my_outputfolder/transformix_rigid_affine_bspline.nii.gz")
вывод в терминале для части transformix выглядел так:
ELASTIX version: 5.000
Command line options from ElastixBase:
-out path_to_my_outputfolder/
-threads unspecified, so all available threads are used
-def all
-jac unspecified, so no det(dT/dx) computed
-jacmat unspecified, so no dT/dx computed
Reading input image ...
Reading input image took 0.000005 s
Calling all ReadFromFile()'s ...
WARNING: The parameter "UseBinaryFormatForTransformationParameters", requested at entry number 0, does not exist at all.
The default value "false" is used instead.
WARNING: The parameter "UseBinaryFormatForTransformationParameters", requested at entry number 0, does not exist at all.
The default value "false" is used instead.
WARNING: The parameter "UseBinaryFormatForTransformationParameters", requested at entry number 0, does not exist at all.
The default value "false" is used instead.
Calling all ReadFromFile()'s took 0.041007 s
Transforming points ...
The transform is evaluated on all points. The result is a deformation field.
Transforming points done, it took 8.95s
Compute determinant of spatial Jacobian ...
The command-line option "-jac" is not used, so no det(dT/dx) computed.
Computing determinant of spatial Jacobian done, it took 0.00s
Compute spatial Jacobian (full matrix) ...
The command-line option "-jacmat" is not used, so no dT/dx computed.
Computing spatial Jacobian done, it took 0.00s
Resampling image and writing to disk ...
Resampling took 25.14s