版权声明:本文为博主原创文章,转载请注明出处,谢谢 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;
}
}