diff --git a/writeBinaryImageFromMesh.cxx b/writeBinaryImageFromMesh.cxx new file mode 100644 index 0000000000000000000000000000000000000000..a9b09c9eea0c3a3089c725f6020365cdf47230d2 --- /dev/null +++ b/writeBinaryImageFromMesh.cxx @@ -0,0 +1,79 @@ +#include "itkMesh.h" +#include "itkMeshFileReader.h" + +#include "itkImage.h" +#include "itkImageFileReader.h" +#include "itkImageFileWriter.h" + +#include "itkCastImageFilter.h" +#include "itkTriangleMeshToBinaryImageFilter.h" + +int main( int argc, char* argv[] ) +{ + if( argc != 4 ) + { + std::cerr << "Usage: "<< std::endl; + std::cerr << argv[0]; + std::cerr << " <InputImageName> <InputMeshName> <OutputImageName>"; + std::cerr << std::endl; + return EXIT_FAILURE; + } + + const char * inputImageName = argv[1]; + const char * inputMeshName = argv[2]; + const char * outputImageName = argv[3]; + + const unsigned int Dimension = 3; + typedef double MeshPixelType; + + typedef itk::Mesh< MeshPixelType, Dimension > MeshType; + + typedef itk::MeshFileReader< MeshType > MeshReaderType; + MeshReaderType::Pointer meshReader = MeshReaderType::New(); + meshReader->SetFileName( inputMeshName ); + + typedef unsigned char InputPixelType; + typedef itk::Image< InputPixelType, Dimension > InputImageType; + typedef itk::ImageFileReader< InputImageType > ImageReaderType; + + ImageReaderType::Pointer imageReader = ImageReaderType::New(); + imageReader->SetFileName( inputImageName ); + + typedef unsigned char OutputPixelType; + typedef itk::Image< OutputPixelType, Dimension > OutputImageType; + + typedef itk::CastImageFilter< InputImageType, OutputImageType > CastFilterType; + CastFilterType::Pointer cast = CastFilterType::New(); + cast->SetInput( imageReader->GetOutput() ); + + typedef itk::TriangleMeshToBinaryImageFilter< MeshType, OutputImageType > FilterType; + FilterType::Pointer filter = FilterType::New(); + filter->SetInput( meshReader->GetOutput() ); + filter->SetInfoImage( cast->GetOutput() ); + filter->SetInsideValue( itk::NumericTraits< OutputPixelType >::max() ); + try + { + filter->Update(); + } + catch( itk::ExceptionObject & error ) + { + std::cerr << "Error: " << error << std::endl; + return EXIT_FAILURE; + } + + typedef itk::ImageFileWriter< OutputImageType > WriterType; + WriterType::Pointer writer = WriterType::New(); + writer->SetFileName( outputImageName ); + writer->SetInput( filter->GetOutput() ); + try + { + writer->Update(); + } + catch( itk::ExceptionObject & error ) + { + std::cerr << "Error: " << error << std::endl; + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +}