X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvImageReader.txx;h=3c5e1545878b27511d100c559db30a1c2f473dbf;hb=b9d8c9a9e84535e8de0b7e2a2f970af1442cd49b;hp=d0247fe7d072ea11c255dc6be98a3e543b287d08;hpb=ffa30ffca0e90ece637fadde1f3dd65166f20ab4;p=clitk.git diff --git a/vv/vvImageReader.txx b/vv/vvImageReader.txx index d0247fe..3c5e154 100644 --- a/vv/vvImageReader.txx +++ b/vv/vvImageReader.txx @@ -27,6 +27,7 @@ #include #include "clitkCommon.h" +#include "clitkConfiguration.h" #include "vvFromITK.h" #include "vvConstants.h" @@ -56,7 +57,7 @@ void vvImageReader::UpdateWithDim(std::string InputPixelType) std::cerr << "Error, input pixel type : " << InputPixelType << " unknown !" << std::endl; if (CLITK_EXPERIMENTAL && mLastError.size()==0) { - ReadNkiImageTransform(); + //ReadNkiImageTransform(); ReadMatImageTransform(); } } @@ -67,25 +68,20 @@ void vvImageReader::UpdateWithDim(std::string InputPixelType) template void vvImageReader::UpdateWithDimAndInputPixelType() { - - // DD(mType); - if (mType == MERGEDWITHTIME) // In this case we can load the images // one at the time to avoid excessive // memory use { - typedef itk::Image< InputPixelType, VImageDimension-1 > InputImageType; - typedef itk::ImageFileReader ReaderType; - typename ReaderType::Pointer reader = ReaderType::New(); - typedef itk::ImageToVTKImageFilter ConnectorType; - typename ConnectorType::Pointer connector = ConnectorType::New(); - connector->SetInput(reader->GetOutput()); mImage=vvImage::New(); + for (std::vector::const_iterator i=mInputFilenames.begin(); i!=mInputFilenames.end(); i++) { - std::cout << (*i) << std::endl; + typedef itk::Image< InputPixelType, VImageDimension-1 > InputImageType; + typedef itk::ImageFileReader ReaderType; + typename ReaderType::Pointer reader = ReaderType::New(); + reader->ReleaseDataFlagOn(); reader->SetFileName(*i); try { - reader->Update(); + mImage->AddItkImage(reader->GetOutput()); } catch ( itk::ExceptionObject & err ) { std::cerr << "Error while reading " << mInputFilenames[0].c_str() << " " << err << std::endl; @@ -94,30 +90,53 @@ void vvImageReader::UpdateWithDimAndInputPixelType() mLastError = error.str(); return; } - try { - connector->Update(); - } catch ( itk::ExceptionObject & err ) { - std::cerr << "Error while setting vvImage from ITK (MERGEDWITHTIME)" - << " " << err << std::endl; - } - //vtkImageData *image = vtkImageData::New(); - //image->ShallowCopy(connector->GetOutput()); - vtkImageData *image = connector->GetOutput(); - mImage->AddImage(image); + } + } else if (mType == SLICED) { + mImage=vvImage::New(); + typedef itk::Image< InputPixelType, VImageDimension > InputImageType; + typedef itk::ImageFileReader ReaderType; + typename ReaderType::Pointer reader = ReaderType::New(); + reader->SetFileName(mInputFilenames[0]); + reader->UpdateOutputInformation(); + + typedef itk::Image< InputPixelType, VImageDimension-1 > SlicedImageType; + typedef itk::ExtractImageFilter FilterType; + + typename InputImageType::RegionType inputRegion = reader->GetOutput()->GetLargestPossibleRegion(); + typename InputImageType::SizeType inputSize = inputRegion.GetSize(); + typename InputImageType::IndexType start = inputRegion.GetIndex(); + typename InputImageType::SizeType extractedRegionSize = inputSize; + typename InputImageType::RegionType extractedRegion; + extractedRegionSize[VImageDimension - 1] = 0; + extractedRegion.SetSize(extractedRegionSize); + start[VImageDimension - 1] = mSlice; + extractedRegion.SetIndex(start); + + typename FilterType::Pointer filter = FilterType::New(); + filter->SetExtractionRegion(extractedRegion); + filter->SetInput(reader->GetOutput()); + filter->ReleaseDataFlagOn(); + try { + mImage->AddItkImage(filter->GetOutput()); + } + catch ( itk::ExceptionObject & err ) { + std::cerr << "Error while slicing " << mInputFilenames[0].c_str() + << "(slice #" << mSlice << ") " << err << std::endl; + return; } } else { if (mInputFilenames.size() > 1) { typedef itk::Image< InputPixelType, VImageDimension > InputImageType; typedef itk::ImageSeriesReader ReaderType; typename ReaderType::Pointer reader = ReaderType::New(); - for (std::vector::const_iterator i=mInputFilenames.begin(); i!=mInputFilenames.end(); i++) - std::cout << (*i) << std::endl; reader->SetFileNames(mInputFilenames); - //if (mUseAnObserver) { - //reader->AddObserver(itk::ProgressEvent(), mObserver); - //} + reader->ReleaseDataFlagOn(); + try { - reader->Update(); + if (mType == IMAGEWITHTIME) + mImage=vvImageFromITK(reader->GetOutput(),true); + else + mImage=vvImageFromITK(reader->GetOutput()); } catch ( itk::ExceptionObject & err ) { std::cerr << "Error while reading image series:" << err << std::endl; std::stringstream error; @@ -125,27 +144,18 @@ void vvImageReader::UpdateWithDimAndInputPixelType() mLastError = error.str(); return; } - - // DD(reader->GetOutput()->GetImageDimension()); - // DD(reader->GetOutput()->GetNumberOfComponentsPerPixel()); - // for(unsigned int i=0; i GetOutput()->GetImageDimension(); i++) { - // DD(reader->GetOutput()->GetSpacing()[i]); - // } - - if (mType == IMAGEWITHTIME) - mImage=vvImageFromITK(reader->GetOutput(),true); - else - mImage=vvImageFromITK(reader->GetOutput()); } else { typedef itk::Image< InputPixelType, VImageDimension > InputImageType; typedef itk::ImageFileReader ReaderType; typename ReaderType::Pointer reader = ReaderType::New(); reader->SetFileName(mInputFilenames[0]); - //if (mUseAnObserver) { - //reader->AddObserver(itk::ProgressEvent(), mObserver); - //} + reader->ReleaseDataFlagOn(); + try { - reader->Update(); + if (mType == IMAGEWITHTIME) + mImage=vvImageFromITK(reader->GetOutput(),true); + else + mImage=vvImageFromITK(reader->GetOutput()); } catch ( itk::ExceptionObject & err ) { std::cerr << "Error while reading " << mInputFilenames[0].c_str() << " " << err << std::endl; @@ -154,19 +164,6 @@ void vvImageReader::UpdateWithDimAndInputPixelType() mLastError = error.str(); return; } - - // DD(reader->GetOutput()->GetImageDimension()); - // DD(reader->GetOutput()->GetNumberOfComponentsPerPixel()); - // for(unsigned int i=0; i GetOutput()->GetImageDimension(); i++) { - // DD(reader->GetOutput()->GetSpacing()[i]); - // DD(reader->GetOutput()->GetOrigin()[i]); - // } - - - if (mType == IMAGEWITHTIME) - mImage=vvImageFromITK(reader->GetOutput(),true); - else - mImage=vvImageFromITK(reader->GetOutput()); } } }