[Insight-users] crop and flip images

Stefan Lindenau stefan . lindenau at gmx . de
Fri, 28 Nov 2003 10:18:22 -0500


Hi Luis,

you are right everything is working fine.

I was only confused by the output of the ImageViewer application from 
InsightApplications.
When you open some files (the 
Insight/Examples/Data/BrainProtonDensitySlice.png is an example) it is 
not showing the complete file. You first have to resize the window in 
horizontal direction to see everything. As I did that, I saw that 
everything was as expected.

Thanks
Stefan

Luis Ibanez wrote:

>
> Hi Stefan,
>
> Your program fine works for me.
>
> I tried using the image
>
>   Insight/Data/Examples/BrainProtonDensitySlice.png
>
> and setting the parameters of the region to
>
>   const int xStart=60,yStart=80,xExtent=100,yExtent=100;
>
> and uncommenting line 128
>
>   flipAxesSet[1]=true;
>
> The output image is as expected, the vertical flip
> of the region starting at (60,80) and with size (100,100).
> Your program is extracting the region and flipping it
> as expected.
>
>
> Can you describe in more detail what you find to be
> incorrect in this output ?
>
> Thanks
>
>
>   Luis.
>
>
>
> ----------------------------------
>
> Stefan Lindenau wrote:
>
>> Hi all,
>>
>> I have a little problem while processing my images.
>> When I use RegionOfInterestImageFilter and FlipImageFilter one after 
>> the other in the pipeline, the result is not the same image just 
>> flipped along the specified axis.
>>
>> Is this the right way? I have my sourcecode attached. So you can  see 
>> how I set up the pipeline and the region of interest.
>>
>> Thank you
>> stefan
>>
>>
>> ------------------------------------------------------------------------
>>
>>
>> #include "itkRGBPixel.h"
>> #include "itkImage.h"
>> #include "itkImageFileReader.h"
>> #include "itkImageFileWriter.h"
>> #include "itkMetaImageIO.h"
>> #include "itkImageIOBase.h"
>> #include "itkRegionOfInterestImageFilter.h"
>> #include "itkFlipImageFilter.h"
>>
>>
>>
>>
>> int main(int argc, char ** argv) {
>>        //These parameters are hardcoded. This program is only for 
>> helping purposes.
>>     const int xStart=648,yStart=0,xExtent=464,yExtent=672;
>>
>>     std::cout << "This program resizes the input file with the 
>> following parameters"<<std::endl;
>>     std::cout << "x starting value: " << xStart<<std::endl;
>>     std::cout << "y starting value: " << yStart<<std::endl;
>>     std::cout << "x extension     : " << xExtent << std::endl;
>>     std::cout << "y extension     : " << yExtent << std::endl;
>>     std::cout << "==========================="<<std::endl<<std::endl;
>>
>>
>>     if(argc!=3) {
>>         std::cerr<<"Invalid command line options provided!"<<std::endl;
>>         std::cerr<<"Pls use the program in the following 
>> manner:"<<std::endl<<std::endl;
>>         std::cerr<<argv[0]<<" inputFile outputFile"<<std::endl;
>>         return -1;
>>     }
>>         /*
>>     Typedefs to use the ITK in a fashionable manner
>>     
>>     */
>>     typedef itk::RGBPixel<unsigned char>    PixelType;
>>     typedef itk::Image<PixelType, 2>        ImageType;
>>
>>     typedef itk::ImageFileReader< ImageType> ReaderType;
>>     typedef itk::ImageFileWriter< ImageType> WriterType;
>>
>>     typedef itk::RegionOfInterestImageFilter<ImageType,ImageType> 
>>                                              CropFilterType;
>>     typedef itk::FlipImageFilter< ImageType> FlipType;
>>    
>>     /*
>>     Declaration of Variables and Pointers
>>
>>     */
>>     ReaderType::Pointer reader = ReaderType::New();
>>     WriterType::Pointer writer = WriterType::New();
>>        CropFilterType::Pointer crop = CropFilterType::New();
>>
>>     ImageType::RegionType region;
>>     ImageType::SizeType        size;
>>     ImageType::IndexType    index;
>>
>>     FlipType::Pointer flip =FlipType::New();
>>     FlipType::FlipAxesArrayType flipAxesSet;
>>     
>>     /*
>>     Setting of the filenames of the input and output files
>>     currently command line options are used to determine them
>>     */
>>     std::string input  = argv[1];
>>     std::string output = argv[2];
>>
>>         /*
>>     Setting up and performing InputIO
>>
>>     */
>>     reader->SetFileName( input.c_str() );
>>     reader->ReleaseDataFlagOn();
>>     try         {
>>         reader->Update();
>>         }     catch (itk::ExceptionObject &err)         {
>>         std::cout<< "Exception caught:" << std::endl;
>>         std::cout<< err <<std::endl;
>>        
>>         return -1;
>>         }
>>         /*
>>     Getting the region we want to extract. The Image is only cropped
>>     in XY Dimensions the Z Dimension keeps unchanged
>>
>>     */
>>     region=reader->GetOutput()->GetLargestPossibleRegion();
>>     index=region.GetIndex();
>>     size=region.GetSize();
>>
>>     index.SetElement(0,xStart);
>>     index.SetElement(1,yStart);
>>     
>>     size.SetElement(0,xExtent);
>>     size.SetElement(1,yExtent);
>>
>>     
>>
>>     region.SetSize(size);
>>     region.SetIndex(index);
>>     
>>
>>     /*
>>     Setup of crop ImageFilter
>>
>>     */
>>     crop->SetInput(reader->GetOutput());
>>     crop->SetRegionOfInterest(region);
>>     crop->ReleaseDataFlagOn();
>>
>>     /*
>>     We have to flip the Image in Y Direction.
>>
>>     */
>>     flip->SetInput(crop->GetOutput());
>>     flip->ReleaseDataFlagOn();
>>     
>>     flipAxesSet=flip->GetFlipAxes();
>>     //flipAxesSet[1]=true;
>>     flip->SetFlipAxes(flipAxesSet);
>>     
>>
>>     /*
>>     Of course we want to write the image to the HDD
>>
>>     */
>>     writer->SetFileName( output.c_str() );
>>     writer->SetInput( flip->GetOutput() );
>>
>>         /*
>>     The invocation of the pipeline should cause the execution of the 
>> crop and flip
>>     filters. The image should be read already and therefor resist in 
>> the main memory.
>>     */
>>     try {
>>         writer->Update();
>>         }     catch (itk::ExceptionObject &err)         {
>>         std::cout<< "Exception caught:" << std::endl;
>>         std::cout<< err <<std::endl;
>>        
>>         return -1;
>>         }
>>
>>     return 0;
>> }
>
>
>
>
>