/*========================================================================= Program: vv http://www.creatis.insa-lyon.fr/rio/vv Authors belong to: - University of LYON http://www.universite-lyon.fr/ - Léon Bérard cancer center http://www.centreleonberard.fr - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the copyright notices for more information. It is distributed under dual licence - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ===========================================================================**/ #ifndef clitk4DImageToNVectorImageGenericFilter_txx #define clitk4DImageToNVectorImageGenericFilter_txx /* ================================================= * @file clitk4DImageToNVectorImageGenericFilter.txx * @author * @date * * @brief * ===================================================*/ #include "itkComposeImageFilter.h" #include "itkExtractImageFilter.h" namespace clitk { //------------------------------------------------------------------- // Update with the number of dimensions //------------------------------------------------------------------- template void FourDImageToNVectorImageGenericFilter::UpdateWithDim(std::string PixelType, unsigned int Components) { if (m_Verbose) std::cout << "Image was detected to be "<(); } else if (PixelType == "unsigned short") { UpdateWithDimAndPixelType(); } else if (PixelType == "unsigned_short") { UpdateWithDimAndPixelType(); } else if (PixelType == "char") { UpdateWithDimAndPixelType(); } else if (PixelType == "unsigned_char") { UpdateWithDimAndPixelType(); } else if (PixelType == "int") { UpdateWithDimAndPixelType(); } else if (PixelType == "unsigned_int") { UpdateWithDimAndPixelType(); } else if (PixelType == "double") { UpdateWithDimAndPixelType(); } else if (PixelType == "float") { UpdateWithDimAndPixelType(); } else { std::cerr << "Error, pixel type : \"" << PixelType << "\" unknown !" << std::endl; } } //------------------------------------------------------------------- // Update with the number of dimensions and the pixeltype //------------------------------------------------------------------- template void FourDImageToNVectorImageGenericFilter::UpdateWithDimAndPixelType() { // ImageTypes typedef itk::Image InputImageType; typedef itk::Image MedianImageType; typedef itk::VectorImage OutputImageType; // Read the input typedef itk::ImageFileReader InputReaderType; typename InputReaderType::Pointer reader = InputReaderType::New(); reader->SetFileName(m_InputFileName); reader->Update(); typename InputImageType::Pointer input= reader->GetOutput(); std::string fileName=m_ArgsInfo.output_arg; //Filter typedef itk::ComposeImageFilter ImageToVectorImageFilterType; typename ImageToVectorImageFilterType::Pointer imageToVectorImageFilter = ImageToVectorImageFilterType::New(); typedef itk::ExtractImageFilter ExtractFilterType; typename ExtractFilterType::Pointer extractFilter = ExtractFilterType::New(); extractFilter->SetDirectionCollapseToSubmatrix(); typedef itk::ImageFileWriter WriterType; typename WriterType::Pointer writer = WriterType::New(); extractFilter->SetInput(input); typename InputImageType::SizeType size; typename OutputImageType::DirectionType direction; direction.SetIdentity(); for (unsigned int nbDimension=0; nbDimensionGetLargestPossibleRegion().GetSize(nbDimension); for (unsigned int pixelDim2=0; pixelDim2GetDirection()[nbDimension][pixelDim2]; } } size[Dimension-1] = 0; typename MedianImageType::Pointer tempImage = MedianImageType::New(); //Extract All "time" slices for (unsigned int nbSlice=0; nbSliceGetLargestPossibleRegion().GetSize(Dimension-1); ++nbSlice) { typename InputImageType::RegionType desiredRegion; typename InputImageType::IndexType index; index.Fill(0); index[Dimension-1]=nbSlice; desiredRegion.SetSize(size); extractFilter->SetInput(input); desiredRegion.SetIndex(index); extractFilter->SetExtractionRegion(desiredRegion); extractFilter->Update(); tempImage = extractFilter->GetOutput(); tempImage->DisconnectPipeline(); extractFilter->Update(); imageToVectorImageFilter->SetInput(nbSlice, tempImage); } imageToVectorImageFilter->Update(); // Copy transform matrix imageToVectorImageFilter->GetOutput()->SetDirection(direction); //Output writer->SetInput(imageToVectorImageFilter->GetOutput()); writer->SetFileName(fileName); writer->Update(); } }//end clitk #endif //#define clitk4DImageToNVectorImageGenericFilter_txx