《itk实用demo》-提取图中前两个连通域

版权声明:本文为博主原创文章,转载请注明出处,谢谢 https://blog.csdn.net/rabbitbride/article/details/82415218

提取图像中前2个的连通域

#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkConnectedComponentImageFilter.h"
#include "itkLabelToRGBImageFilter.h"

#include "itksys/SystemTools.hxx"
#include <sstream>

#include "itkImageToVTKImageFilter.h"
#include "vtkImageViewer.h"
#include "vtkWin32RenderWindowInteractor.h"

#include "itkImageFileWriter.h"
#include <iostream>
#include <string>

#include "itkRGBToLuminanceImageFilter.h"

#include "itkLabelShapeKeepNObjectsImageFilter.h"
#include "itkRescaleIntensityImageFilter.h"
#include "itksys/SystemTools.hxx"
#include <sstream>
using namespace std;

int main( int argc, char *argv[])
{
 const unsigned int Dimension = 2;
 typedef unsigned char                       PixelType;
 typedef itk::Image<PixelType, Dimension>     ImageType;
 std::string bmp = ".bmp";
 ImageType::Pointer image;

 typedef itk::ImageFileReader<ImageType> ReaderType;
 typedef itk::Image<PixelType, Dimension > OutputImageType;
 for (int num= 0;num<214;num++)
 {
  std::string  inputFilename = "D:\\se6\\bmp2\\IM";
  std::string  outputFilename = "D:\\se6\\bmp3\\IM";

  char t[256];
  string s;
  sprintf(t, "%d", num);
  s = t;
  inputFilename = inputFilename + s + bmp;
  outputFilename = outputFilename + s + bmp;

  ReaderType::Pointer reader = ReaderType::New();
  reader->SetFileName(inputFilename);
  reader->Update();

  image = reader->GetOutput();

  typedef itk::ConnectedComponentImageFilter <ImageType, OutputImageType > ConnectedComponentImageFilterType;
  ConnectedComponentImageFilterType::Pointer connected = ConnectedComponentImageFilterType::New ();
  connected->SetInput(image);
  connected->Update();

  std::cout << "Number of objects: " << connected->GetObjectCount() << std::endl;

  typedef itk::LabelShapeKeepNObjectsImageFilter< OutputImageType > LabelShapeKeepNObjectsImageFilterType;
  LabelShapeKeepNObjectsImageFilterType::Pointer labelShapeKeepNObjectsImageFilter = LabelShapeKeepNObjectsImageFilterType::New();
  labelShapeKeepNObjectsImageFilter->SetInput( connected->GetOutput() );
  labelShapeKeepNObjectsImageFilter->SetBackgroundValue( 0 );
  labelShapeKeepNObjectsImageFilter->SetNumberOfObjects( 2 );
  //labelShapeKeepNObjectsImageFilter->SetAttribute( LabelShapeKeepNObjectsImageFilterType::LabelObjectType::NUMBER_OF_PIXELS);

  typedef itk::RescaleIntensityImageFilter< OutputImageType, ImageType > RescaleFilterType;
  RescaleFilterType::Pointer rescaleFilter = RescaleFilterType::New();
  rescaleFilter->SetOutputMinimum(0);
  rescaleFilter->SetOutputMaximum(itk::NumericTraits<PixelType>::max());
  rescaleFilter->SetInput(labelShapeKeepNObjectsImageFilter->GetOutput());

  typedef  itk::ImageFileWriter< ImageType  > WriterType;
  WriterType::Pointer writer = WriterType::New();
  writer->SetFileName(outputFilename);
  writer->SetInput(rescaleFilter->GetOutput());
  writer->Update();
 }


 return EXIT_SUCCESS;
}
}

猜你喜欢

转载自blog.csdn.net/rabbitbride/article/details/82415218
今日推荐