ITK/Examples/IO/ReadUnknownImageType
ReadUnknownImageType.cxx
<source lang="cpp">
- include "itkImage.h"
- include "itkImageFileReader.h"
template<typename TImageType> static void ReadFile(std::string filename, typename TImageType::Pointer image);
int main(int argc, char *argv[]) {
if(argc < 2) { std::cerr << "Required: filename" << std::endl;
return EXIT_FAILURE; } std::string inputFilename = argv[1];
typedef itk::ImageIOBase::IOComponentType ScalarPixelType;
itk::ImageIOBase::Pointer imageIO = itk::ImageIOFactory::CreateImageIO( inputFilename.c_str(), itk::ImageIOFactory::ReadMode);
imageIO->SetFileName(inputFilename); imageIO->ReadImageInformation(); const ScalarPixelType pixelType = imageIO->GetComponentType(); std::cout << "Pixel Type is " << imageIO->GetComponentTypeAsString(pixelType) // 'double' << std::endl; const size_t numDimensions = imageIO->GetNumberOfDimensions(); std::cout << "numDimensions: " << numDimensions << std::endl; // '2'
std::cout << "component size: " << imageIO->GetComponentSize() << std::endl; // '8' std::cout << "pixel type (string): " << imageIO->GetPixelTypeAsString(imageIO->GetPixelType()) << std::endl; // 'vector' std::cout << "pixel type: " << imageIO->GetPixelType() << std::endl; // '5'
/* switch (pixelType) { case itk::ImageIOBase::COVARIANTVECTOR: typedef itk::Image<unsigned char, 2> ImageType; ImageType::Pointer image = ImageType::New(); ReadFile<ImageType>(inputFilename, image); break; typedef itk::Image<unsigned char, 2> ImageType; ImageType::Pointer image = ImageType::New(); ReadFile<ImageType>(inputFilename, image); break;
default: std::cerr << "Pixel Type (" << imageIO->GetComponentTypeAsString(pixelType) << ") not supported. Exiting." << std::endl; return -1; } */
return EXIT_SUCCESS;
}
template<typename TImageType> void ReadFile(std::string filename, typename TImageType::Pointer image) {
typedef itk::ImageFileReader<TImageType> ReaderType; typename ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(filename); reader->Update();
image->Graft(reader->GetOutput());
} </source>
CreateImages.cxx
<source lang="cpp">
- include "itkImage.h"
- include "itkImageFileWriter.h"
- include <itkCovariantVector.h>
- include <string>
template<typename TImageType> void WriteFile(typename TImageType::Pointer image, std::string filename);
int main(int, char *[]) {
typedef itk::Image< itk::CovariantVector<double, 4> , 2> ImageType4; ImageType4::Pointer image4 = ImageType4::New(); WriteFile<ImageType4>(image4, std::string("image4.mhd"));
typedef itk::Image< itk::CovariantVector<double, 5> , 2> ImageType5; ImageType5::Pointer image5 = ImageType5::New(); WriteFile<ImageType5>(image5, std::string("image5.mhd"));
return EXIT_SUCCESS;
}
template<typename TImageType> void WriteFile(typename TImageType::Pointer image, std::string filename) {
// Create image typename TImageType::IndexType start; start[0] = 0; start[1] = 0;
typename TImageType::SizeType size; size[0] = 20; size[1] = 30;
typename TImageType::RegionType region; region.SetSize(size); region.SetIndex(start);
image->SetRegions(region); image->Allocate(); typedef typename itk::ImageFileWriter<TImageType> WriterType; typename WriterType::Pointer writer = WriterType::New(); writer->SetInput(image); writer->SetFileName(filename); writer->Update();
}
template void WriteFile<itk::Image< itk::CovariantVector<double, 4> , 2> >(itk::Image< itk::CovariantVector<double, 4> , 2>::Pointer, std::string); template void WriteFile<itk::Image< itk::CovariantVector<double, 5> , 2> >(itk::Image< itk::CovariantVector<double, 5> , 2>::Pointer, std::string); </source>
CMakeLists.txt
<source lang="cmake"> cmake_minimum_required(VERSION 2.6)
PROJECT(CreateImages)
FIND_PACKAGE(ITK REQUIRED) INCLUDE(${ITK_USE_FILE})
ADD_EXECUTABLE(ReadUnknownImageType ReadUnknownImageType.cxx) TARGET_LINK_LIBRARIES(ReadUnknownImageType ${ITK_LIBRARIES} )
ADD_EXECUTABLE(CreateImages CreateImages.cxx) TARGET_LINK_LIBRARIES(CreateImages ${ITK_LIBRARIES} ) </source>