Я запускаю пример python simpleitk по этой ссылке https://simpleitk.readthedocs.io/en/master/Examples/ImageRegistrationMethod1/Documentation.html
в спайдер анаконда.
Я установил пакеты simpleitk,system,os через anaconda Prompt.
from __future__ import print_function
import SimpleITK as sitk
import sys
import os
def command_iteration(method) :
print("{0:3} = {1:10.5f} : {2}".format(method.GetOptimizerIteration(),
method.GetMetricValue(),
method.GetOptimizerPosition()))
if len ( sys.argv ) < 4:
print( "Usage: {0} <fixedImageFilter> <movingImageFile> <outputTransformFile>".format(sys.argv[0]))
cc
fixed = sitk.ReadImage(sys.argv[1], sitk.sitkFloat32)
print(sys.argv[1])
moving = sitk.ReadImage(sys.argv[2], sitk.sitkFloat32)
R = sitk.ImageRegistrationMethod()
R.SetMetricAsMeanSquares()
R.SetOptimizerAsRegularStepGradientDescent(4.0, .01, 200 )
R.SetInitialTransform(sitk.TranslationTransform(fixed.GetDimension()))
R.SetInterpolator(sitk.sitkLinear)
R.AddCommand( sitk.sitkIterationEvent, lambda: command_iteration(R) )
outTx = R.Execute(fixed, moving)
print("-------")
print(outTx)
print("Optimizer stop condition: {0}".format(R.GetOptimizerStopConditionDescription()))
print(" Iteration: {0}".format(R.GetOptimizerIteration()))
print(" Metric value: {0}".format(R.GetMetricValue()))
sitk.WriteTransform(outTx, sys.argv[3])
if ( not "SITK_NOSHOW" in os.environ ):
resampler = sitk.ResampleImageFilter()
resampler.SetReferenceImage(fixed);
resampler.SetInterpolator(sitk.sitkLinear)
resampler.SetDefaultPixelValue(100)
resampler.SetTransform(outTx)
out = resampler.Execute(moving)
simg1 = sitk.Cast(sitk.RescaleIntensity(fixed), sitk.sitkUInt8)
simg2 = sitk.Cast(sitk.RescaleIntensity(out), sitk.sitkUInt8)
cimg = sitk.Compose(simg1, simg2, simg1//2.+simg2//2.)
sitk.Show( cimg, "ImageRegistration1 Composition" )
При запуске этого кода он дает мне ошибку, следующую за ошибкой Использование: E:/registration/simpleitk.py Произошло исключение, используйте %tb для просмотра полной трассировки.
SystemExit: 1
C:\Users\aBC\AppData\Local\Continuum\anaconda3\lib\site-packages\IPython\core\interactiveshell.py:3275: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
Как я могу исправить эту ошибку?






Подозреваю, что скрипт не умеет загружать изображение при вызове sitk.ReadImage. Ожидается, что имя файла будет указано в переменной sys.argv[1]. Сценарий предназначен для запуска в командной строке с фиксированным именем файла изображения, именем файла движущегося изображения и именем выходного файла преобразования, указанными в качестве аргументов командной строки.
Если вы не можете предоставить аргумент командной строки в Spyder (я не знаю, я не знаком с ним), вы можете жестко закодировать имена файлов в скрипте.
Если у вас есть дополнительные вопросы о SimpleITK, я предлагаю проверить ITK Discourse, discourse.itk.org.
Замените аргумент sys.argv[2] строкой, содержащей имя файла.
Я внес следующие изменения в код..... Я заменил это... fixed = sitk.ReadImage(sys.argv[1], sitk.sitkFloat32) ...на это... fixed = sitk.ReadImage( "Picture1.png", sitk.sitkFloat32)... Я заменил это ...moving = sitk.ReadImage(sys.argv[2], sitk.sitkFloat32)... на.... moving = sitk.ReadImage( "Picture2.png", sitk.sitkFloat32) и это... sitk.WriteTransform(outTx, sys.argv[3]) ...с этим sitk.WriteTransform(outTx, "output.png")..но это показать ошибку в этой строке ...sitk.WriteTransform(outTx, "output.png")..
Ошибка :sitk.WriteTransform(outTx, "output.png") Файл "C:\Users\a\AppData\Local\Continuum\anaconda3\lib\site-packages\SimpleITK\SimpleITK.py", return _SimpleITK.WriteTransform(transform, filename) RuntimeError: Исключение в SimpleITK WriteTransform: itk::ERROR: Попытка создать одно из следующих: неподдерживаемый тип.
PNG не является форматом файла преобразования. Это для изображений. Для записи файла преобразования необходимо использовать суффикс одного из поддерживаемых форматов. Суффиксы включают «.txt», «.tfm», «.mat» и «.xfm».
Теперь сидя - sitk.WriteTransform(outTx, "output.txt") - показывает следующую ошибку. Файл "E:/registration/simpleitk.py", строка 58, в <module> sitk.Show(cimg, "ImageRegistration1 Composition") Файл "C:\Users\w\AppData\Local\Continuum\anaconda3\lib\site -packages\SimpleITK\SimpleITK.py", строка 7887, в Show return _SimpleITK.Show(*args, **kwargs) RuntimeError: Исключение в SimpleITK Show: C:\Users\dashboard\Miniconda3\conda- bld\simpleitk_1545325552986\work\Code\IO\src\sitkShow.cxx:495: sitk::ERROR: Подходящий исполняемый файл не найден.
Скрипт не создает новое изображение. Простая регистрация производит преобразование, которое переходит из пространства движущегося изображения в пространство фиксированного изображения. Затем вам нужно будет использовать преобразование для передискретизации движущегося изображения в пространство фиксированного изображения.
как избавиться от вышеуказанной ошибки в этой строке ...sitk.Show(cimg, "ImageRegistration1 Composition" )..
Вам нужно установить Фиджи. При вызове функции Show SimpleITK пытается отобразить изображение с помощью приложения Fiji. Вы можете скачать его с Fiji.sc.
я установил fiji в приглашении anaconda, используя эту команду .... conda install -c hanslovsky fiji ...... но эта строка .... sitk.Show ( cimg, "ImageRegistration1 Composition" ) ... все еще дает та же ошибка.....возврат _SimpleITK.Show(*args, **kwargs) RuntimeError: Исключение в SimpleITK Show: C:\Users\dashboard\Miniconda3\conda-bld\simpleitk_1545325552986\work\Code\IO\ src\sitkShow.cxx:495: sitk::ERROR: Подходящий исполняемый файл не найден.
SimpleITK ожидает, что Fiji будет найден в каталоге Program Files, вашем домашнем каталоге или на рабочем столе. Я думаю, что Anaconda устанавливает его где-то еще. Вероятно, вам будет проще закомментировать строку Show и просто записать изображение в виде файла. site.WriteImage(cimg, 'MyRegisteredImage.png'). Затем вы можете использовать любое приложение для просмотра изображений, которое вам нравится, чтобы открыть файл PNG.
После написания этой строки.... sitk.WriteImage(cimg, 'MyRegisteredImage.png').... в каталоге проекта не появилось изображение с именем MyRegisteredImage.png. Как получить зарегистрированное изображение?
Должно быть, это было написано где-то в другом месте. Если вы дадите ему полное имя пути, вы сможете точно сказать, в какой каталог записать образ.
Я не знаком с аргументом командной строки в Spyder. Как я могу жестко закодировать имена изображений в скрипте ------fixed = sitk.ReadImage(sys.argv[1], sitk.sitkFloat32) moving = sitk. ReadImage(sys.argv[2], sitk.sitkFloat32)