算法流程
代码
#include <itkImageFileReader.h>
#include <itkImageFileWriter.h>
#include <itkMetaImageIO.h>
#include <itkMorphologicalWatershedFromMarkersImageFilter.h>
#include <itkGradientMagnitudeImageFilter.h>
#include <itkRescaleIntensityImageFilter.h>
#include <itkLabelMapToLabelImageFilter.h>
#include <itkRegionalMinimaImageFilter.h>
int main(int arglen, char * argv[])
{
const int dim = 2;
typedef long PType;
typedef itk::Image< PType, dim > IType;
typedef itk::Image< float, dim > FType;
using LIType = itk::Image<itk::IdentifierType, 2>;
typedef itk::ImageFileReader< IType > ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName("111.mha");
reader->SetImageIO(itk::MetaImageIO::New());
reader->Update();
using GradientFilterType = itk::GradientMagnitudeImageFilter<IType, FType>;
GradientFilterType::Pointer gradient = GradientFilterType::New();
gradient->SetInput(reader->GetOutput());
gradient->Update();
using RescaleFilterType = itk::RescaleIntensityImageFilter<FType, FType>;
RescaleFilterType::Pointer rescaler = RescaleFilterType::New();
rescaler->SetInput(gradient->GetOutput());
rescaler->SetOutputMinimum(0);
rescaler->SetOutputMaximum(1.0);
rescaler->Update();
auto featureImg = rescaler->GetOutput();
auto markerImg = FilterUtils<IType>::createEmptyFrom(reader->GetOutput());
IType::IndexType bg;
bg[0] = 250;
bg[1] = 200;
markerImg->SetPixel(bg, 1);
IType::IndexType fg;
fg.Fill(188);
markerImg->SetPixel(fg, 2);
typedef itk::MorphologicalWatershedFromMarkersImageFilter< FType, IType > MMWatershedType;
MMWatershedType::Pointer mmws = MMWatershedType::New();
mmws->SetInput(featureImg);
mmws->SetMarkerImage(markerImg);
mmws->SetMarkWatershedLine(true);
mmws->SetFullyConnected(false);
mmws->Update();
typedef itk::ImageFileWriter< IType > WriterType;
WriterType::Pointer writer = WriterType::New();
writer->SetInput(mmws->GetOutput());
writer->SetFileName("222.mha");
writer->SetImageIO(itk::MetaImageIO::New());
writer->Update();
system("pause");
}
算法结果
参考:
[1].http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/Python_html/32_Watersheds_Segmentation.html