SimpleITK не работает с любым типом данных, будь то 3D или 2D - PullRequest
0 голосов
/ 13 ноября 2018

Я использую SimpleITK для загрузки многослойного tiff-изображения, его объемное изображение имеет 30 плоскостей / срезов.

Много поиграв с skimage и imageio Я обнаружил, что SimpleITK - лучший способ обработки объемных изображений, но проблема в том, что ни одна из функций не работает для моего изображения.

img = sitk.ReadImage(path)

После прочтения изображения я могу легко преобразовать его в numpy и даже отобразить его, используя sitk.Show(), чтобы оно правильно загружалось. но любая функция, которую я использую, например:

img_s = sitk.CurvatureFlow(img, 0.125, 5)
# or
sitk.IntensityWindowing(img)
# or
img_m = sitk.ConnectedThreshold(img, (257,419,7))

выдает предупреждение:

sitk :: ОШИБКА: Тип пикселя: вектор 16-разрядного целого числа без знака не является поддерживается в 3D byclass itk :: simple ::

Я также пытался привести к любому другому типу данных, но я снова получаю ошибки:

img2 = sitk.Cast(img, sitk.sitkFloat32)

sitk :: ОШИБКА: фильтр не поддерживает приведение из вектора приведения 16-разрядное целое число без знака до 32-разрядного числа с плавающей запятой

Я также попробовал 2D вариант:

img_m = sitk.ConnectedThreshold(img2[:,:,7], [(257,419)])

но на этот раз я получил ошибку:

sitk :: ERROR: Тип пикселя: вектор 64-битного числа с плавающей запятой не поддерживается в 2D byclass itk :: simple :: ConnectedThresholdImageFilter

Есть идеи, что может быть причиной этого?

P.S. Я прочитал вопрос: SimpleITK N4BiasFieldCorrection, не работает с любым типом данных , и я считаю, что это не дубликат, поскольку его проблема решается с помощью приведения, тогда как моя не работает даже при приведении.

Спасибо

1 Ответ

0 голосов
/ 13 ноября 2018

Похоже, ваше изображение имеет векторный пиксельный тип.Многие фильтры не работают с векторными пикселями.Вам необходимо выбрать один конкретный элемент вектора, чтобы применить такие фильтры.

Вы можете использовать VectorIndexSelectionCastImageFilter или функцию VectorIndexSelectionCast, чтобы извлечь конкретный канал вектора в скалярное изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...