Как получить координаты центра метки в SimpleITK

#c# #itk

#c# #itk

Вопрос:

Я использую фреймворк SimpleITK (x64) для C #.

После того, как я выполнил некоторые операции и фильтрацию, я получил кучу меток через LabelShapeStatisticsImageFilter, где меня интересует.

Как мне получить координаты центра конкретной метки? Когда я использую функцию GetCentroid , я получаю частичные отрицательные результаты, и я не понимаю, как поступить с этими данными.

Заранее спасибо.

Комментарии:

1. Какова матрица косинусов расстояния и направления вашего изображения? Каково значение центроида?

2. используя GetOrigin(), GetSpacing(), вы можете определить, где находится центр тяжести в пространстве. посмотрите в руководстве по программному обеспечению ITK советы по работе в 3D (?) пространстве

Ответ №1:

вот мое решение:

roi — это an itk image file , значение переднего плана равно 1.

 import SimpleITK as sitk
foreground_value = 1
label_statistic = sitk.LabelIntensityStatisticsImageFilter()
label_statistic.Execute(roi == foreground_value)
center_gravity = label_statistic.GetCenterGravity(1)
center_gravity_coordiate = roi.TransformPhysicalPointToIndex(center_gravity)
  

Комментарии:

1. Это не работает, sitk. LabelIntensityStatisticsImageFilter нуждается в исходном изображении и изображении метки. Вы все равно должны использовать LabelShapeStatisticsImageFilter.

Ответ №2:

LabelShapeStatisticsImageFilter::GetCentroid Метод возвращает точку в физическом пространстве, а не в пространстве индексов. При этом учитывается матрица происхождения, расстояния и направления изображения, что может привести к отрицательным значениям. Чтобы преобразовать результат в индексное пространство, вы можете использовать Image::TransformPhysicalPointToContinuousIndex или Image::TransformPhysicalPointToIndex по мере необходимости.

Ответ №3:

спасибо за ваши ответы и комментарии.

Я нашел решение проблемы в комментарии к примеру:

  // NOTE: As of April 8, 2015 the filter does not work with non-zero origins
  

Итак, я сохранил исходные данные, установил для начала координат значение (0,0) — получил полезный центроид и изменил результат центроида для исходного начала координат, чтобы, наконец, снова установить его на прежнее значение.