- else
- {
- if (mInputFilenames.size() > 1)
- {
- typedef itk::Image< InputPixelType, VImageDimension > InputImageType;
- typedef itk::ImageSeriesReader<InputImageType> ReaderType;
- typename ReaderType::Pointer reader = ReaderType::New();
- for (std::vector<std::string>::const_iterator i=mInputFilenames.begin();i!=mInputFilenames.end();i++)
- std::cout << (*i) << std::endl;
- reader->SetFileNames(mInputFilenames);
- //if (mUseAnObserver) {
- //reader->AddObserver(itk::ProgressEvent(), mObserver);
- //}
- try {
- reader->Update();
- }
- catch ( itk::ExceptionObject & err ) {
- std::cerr << "Error while reading image series:" << err << std::endl;
- std::stringstream error;
- error << err;
- mLastError = error.str();
- return;
- }
- if (mType == IMAGEWITHTIME)
- mImage=vvImageFromITK<VImageDimension,InputPixelType>(reader->GetOutput(),true);
- else
- mImage=vvImageFromITK<VImageDimension,InputPixelType>(reader->GetOutput());
- }
- else
- {
- typedef itk::Image< InputPixelType, VImageDimension > InputImageType;
- typedef itk::ImageFileReader<InputImageType> ReaderType;
- typename ReaderType::Pointer reader = ReaderType::New();
- reader->SetFileName(mInputFilenames[0]);
- //if (mUseAnObserver) {
- //reader->AddObserver(itk::ProgressEvent(), mObserver);
- //}
- try {
- reader->Update();
- }
- catch ( itk::ExceptionObject & err ) {
- std::cerr << "Error while reading " << mInputFilenames[0].c_str()
- << " " << err << std::endl;
- std::stringstream error;
- error << err;
- mLastError = error.str();
- return;
- }
- if (mType == IMAGEWITHTIME)
- mImage=vvImageFromITK<VImageDimension,InputPixelType>(reader->GetOutput(),true);
- else
- mImage=vvImageFromITK<VImageDimension,InputPixelType>(reader->GetOutput());
- }
+ } else if (mType == SLICED) {
+ mImage=vvImage::New();
+ typedef itk::Image< InputPixelType, VImageDimension > InputImageType;
+ typedef itk::ImageFileReader<InputImageType> ReaderType;
+ typename ReaderType::Pointer reader = ReaderType::New();
+ reader->SetFileName(mInputFilenames[0]);
+ reader->UpdateOutputInformation();
+
+ typedef itk::Image< InputPixelType, VImageDimension-1 > SlicedImageType;
+ typedef itk::ExtractImageFilter<InputImageType, SlicedImageType> 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 {
+ filter->Update();
+ }
+ catch ( itk::ExceptionObject & err ) {
+ std::cerr << "Error while slicing " << mInputFilenames[0].c_str()
+ << "(slice #" << mSlice << ") " << err << std::endl;
+ return;
+ }
+ mImage->AddItkImage<SlicedImageType>(filter->GetOutput());
+ } else {
+ if (mInputFilenames.size() > 1) {
+ typedef itk::Image< InputPixelType, VImageDimension > InputImageType;
+ typedef itk::ImageSeriesReader<InputImageType> ReaderType;
+ typename ReaderType::Pointer reader = ReaderType::New();
+ for (std::vector<std::string>::const_iterator i=mInputFilenames.begin(); i!=mInputFilenames.end(); i++)
+ std::cout << (*i) << std::endl;
+ reader->SetFileNames(mInputFilenames);
+ //if (mUseAnObserver) {
+ //reader->AddObserver(itk::ProgressEvent(), mObserver);
+ //}
+ try {
+ reader->Update();
+ } catch ( itk::ExceptionObject & err ) {
+ std::cerr << "Error while reading image series:" << err << std::endl;
+ std::stringstream error;
+ error << err;
+ mLastError = error.str();
+ return;
+ }
+
+ // DD(reader->GetOutput()->GetImageDimension());
+ // DD(reader->GetOutput()->GetNumberOfComponentsPerPixel());
+ // for(unsigned int i=0; i <reader->GetOutput()->GetImageDimension(); i++) {
+ // DD(reader->GetOutput()->GetSpacing()[i]);
+ // }
+
+ if (mType == IMAGEWITHTIME)
+ mImage=vvImageFromITK<VImageDimension,InputPixelType>(reader->GetOutput(),true);
+ else
+ mImage=vvImageFromITK<VImageDimension,InputPixelType>(reader->GetOutput());
+ } else {
+ typedef itk::Image< InputPixelType, VImageDimension > InputImageType;
+ typedef itk::ImageFileReader<InputImageType> ReaderType;
+ typename ReaderType::Pointer reader = ReaderType::New();
+ reader->SetFileName(mInputFilenames[0]);
+ //if (mUseAnObserver) {
+ //reader->AddObserver(itk::ProgressEvent(), mObserver);
+ //}
+ try {
+ reader->Update();
+ } catch ( itk::ExceptionObject & err ) {
+ std::cerr << "Error while reading " << mInputFilenames[0].c_str()
+ << " " << err << std::endl;
+ std::stringstream error;
+ error << err;
+ mLastError = error.str();
+ return;
+ }
+
+ // DD(reader->GetOutput()->GetImageDimension());
+ // DD(reader->GetOutput()->GetNumberOfComponentsPerPixel());
+ // for(unsigned int i=0; i <reader->GetOutput()->GetImageDimension(); i++) {
+ // DD(reader->GetOutput()->GetSpacing()[i]);
+ // DD(reader->GetOutput()->GetOrigin()[i]);
+ // }
+
+
+ if (mType == IMAGEWITHTIME)
+ mImage=vvImageFromITK<VImageDimension,InputPixelType>(reader->GetOutput(),true);
+ else
+ mImage=vvImageFromITK<VImageDimension,InputPixelType>(reader->GetOutput());