Я пытаюсь создать конвейер для сегментации изображений с библиотеками из ITK. Но когда я применяю itkMorphologicalWatershedFromMarkersFilter, в результате получается пустое изображение (двоичное изображение только с 1).
Кто-нибудь знает, как правильно применять этот фильтр?
Мое входное изображение должно быть градиентом изображения, а изображение маркера должно быть результатом применения фильтра водораздела к тому же изображению.
вход образ
маркер образ
И это объявление и применение фильтра:
typedef itk::MorphologicalWatershedFromMarkersImageFilter < OutputImageType, OutputImageType >
MorphologicalWatershedFromMarkersImageFilterType;
MorphologicalWatershedFromMarkersImageFilterType::Pointer CwatershedFilter
= MorphologicalWatershedFromMarkersImageFilterType::New();CwatershedFilter->SetInput1(reader1->GetOutput());
CwatershedFilter->SetMarkerImage(reader2->GetOutput());
CwatershedFilter->SetMarkWatershedLine(true);
try{
CwatershedFilter->Update();
}
catch (itk::ExceptionObject & error)
{
std::cerr << "Error: " << error << std::endl;
getchar();
return EXIT_FAILURE;
}
Кроме того, это ссылка на документацию этого фильтра с сайта itk.org:
Огромное спасибо!!
Хотя это не C ++ ITK, есть SimpleITK Notebooks, который демонстрирует его использование:
http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/32_Watersheds_Segmentation.html
Ваше изображение маркера просто двоичное, а не изображение метки. Я имею в виду, что ваше изображение только 0 и 1 (или 255). В связанном примере обратите внимание на следующее:
min_img = sitk.RegionalMinima(feature_img, backgroundValue=0, foregroundValue=1.0, fullyConnected=False, flatIsMinima=True)
marker_img = sitk.ConnectedComponent(min_img, fullyConnected=False)
«Min_img» — это двоичное изображение, но затем оно обрабатывается с помощью фильтра изображений «ConnectedComponent», который присваивает каждому «острову» уникальный номер. Это то, что ожидается для изображения маркера (или метки) для фильтра WatershedFromMarker.
Я также отмечу, что ваше входное изображение имеет некоторые граничные линии, которые вы можете не использовать в качестве входных данных.
Других решений пока нет …