邏輯運算
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageToVTKImageFilter.h"
#include "vtkImageViewer.h"
#include "vtkWin32RenderWindowInteractor.h"
#include "itkResampleImageFilter.h"//采樣
#include "itkBinaryThresholdImageFilter.h"//二值化
#include "itkThresholdImageFilter.h"//門檻值分割
#include "itkBinaryBallStructuringElement.h"
#include "itkBinaryMorphologicalOpeningImageFilter.h"//開運算
#include "itkMultiplyImageFilter.h"//乘法
#include "itkAndImageFilter.h"//與
int _tmain(int argc, _TCHAR* argv[])
{
double factor = ;
typedef itk::Image<short,> ImageType;
typedef itk::ImageFileReader<ImageType> ReaderType;
typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
ReaderType::Pointer reader= ReaderType::New();
ConnectorType::Pointer connector= ConnectorType::New();
reader->SetFileName("D:\\MedImg\\SE2\\IM182");
reader->Update();
ImageType::SizeType inputSize = reader->GetOutput()->GetLargestPossibleRegion().GetSize();
std::cout << "Original size: " << reader->GetOutput()->GetLargestPossibleRegion().GetSize() << std::endl;
// Resize
ImageType::SizeType outputSize;
outputSize[] = inputSize[]/;
outputSize[] = inputSize[]/;
ImageType::SpacingType outputSpacing;
outputSpacing[] = reader->GetOutput()->GetSpacing()[] * ;
outputSpacing[] = reader->GetOutput()->GetSpacing()[] * ;
typedef itk::IdentityTransform<double, > TransformType;
typedef itk::ResampleImageFilter<ImageType, ImageType> ResampleImageFilterType;
ResampleImageFilterType::Pointer resample = ResampleImageFilterType::New();
resample->SetInput( reader->GetOutput());
resample->SetSize(outputSize);
resample->SetOutputSpacing(outputSpacing);
resample->SetTransform(TransformType::New());
resample->UpdateLargestPossibleRegion();
ImageType::PointType origin;
origin[]=-static_cast<double>(inputSize[])/;
origin[]=-static_cast<double>(inputSize[])/;
resample->SetOutputOrigin(origin);//設定原點
resample->Update();
ImageType::Pointer output = resample->GetOutput();
std::cout << "Output size: " << output->GetLargestPossibleRegion().GetSize() << std::endl;
typedef itk::BinaryThresholdImageFilter<ImageType, ImageType> FilterType;
FilterType::Pointer Thresholdfilter = FilterType::New();
Thresholdfilter->SetInput( resample->GetOutput() );
Thresholdfilter->SetLowerThreshold(-);
Thresholdfilter->SetUpperThreshold();
//預設設定 SetInsideValue 255 SetOutsideValue 0
Thresholdfilter->Update();
typedef itk::BinaryBallStructuringElement<ImageType::PixelType, ImageType::ImageDimension>
StructuringElementType;
StructuringElementType structuringElement;
structuringElement.SetRadius();
structuringElement.CreateStructuringElement();
typedef itk::BinaryMorphologicalOpeningImageFilter <ImageType, ImageType, StructuringElementType>
BinaryMorphologicalOpeningImageFilterType;
BinaryMorphologicalOpeningImageFilterType::Pointer openingFilter
= BinaryMorphologicalOpeningImageFilterType::New();
openingFilter->SetInput(Thresholdfilter->GetOutput());
openingFilter->SetKernel(structuringElement);
openingFilter->Update();
typedef itk::MultiplyImageFilter <ImageType,ImageType,ImageType> MultiplyImageFilterType;
MultiplyImageFilterType::Pointer multiplyFilter
= MultiplyImageFilterType::New ();
multiplyFilter->SetInput1( resample->GetOutput());
multiplyFilter->SetInput2( openingFilter->GetOutput() );
typedef itk::AndImageFilter <ImageType> AndImageFilterType;
AndImageFilterType::Pointer andFilter
= AndImageFilterType::New();
andFilter->SetInput(, resample->GetOutput());
andFilter->SetInput(, openingFilter->GetOutput());
andFilter->Update();
connector->SetInput( andFilter->GetOutput() );
vtkImageViewer* viewer= vtkImageViewer::New();
vtkWin32RenderWindowInteractor* renderWindowInteractor=
vtkWin32RenderWindowInteractor::New();
viewer->SetupInteractor( renderWindowInteractor);
viewer->SetInput( connector->GetOutput() );
viewer->Render();
viewer->SetColorWindow();
viewer->SetColorLevel();
renderWindowInteractor->Start();
return ;
}