[Insight-users] Possible bug in Gipl file not being recognized
Raghavendra Chandrashekara
rc3@doc.ic.ac.uk
Mon, 31 Mar 2003 17:35:59 +0100
Hi Julien,
Thanks for fixing the problem! I used Daniel Rueckert's libraries to
generate the image. I am not sure but I think both magic numbers are
valid. I will ask Daniel as he will know for sure. BTW is the new file
also been updated on the Release-1-2-0 branch or only on the MAIN branch.
Thanks again,
Raghavendra
Julien Jomier wrote:
> Raghavendra,
>
> It appears that the magic number in your gipl is different from what it's
> expected:
> Magic Number: 719555000 (your file)
> Magic Number: 4026526128 (other files)
>
> And the CanReadFile() function in the GiplIO class is checking the magic
> number.
> However, it seems that some programs, like rview, are writing 719555000 for
> the magic number.
> What software did you use to produce this image
>
> I don't know wich one of these two numbers is the right one; if someone has
> an answer?
>
> I just checked in a fix in the repository. Now GiplImageIO accepts these two
> magic numbers.
> Thanks for pointing this out.
>
> Julien
>
>
>>-----Original Message-----
>>From: insight-users-admin@public.kitware.com
>>[mailto:insight-users-admin@public.kitware.com] On Behalf Of
>>Raghavendra Chandrashekara
>>Sent: Monday, March 31, 2003 6:04 AM
>>To: Luis Ibanez
>>Cc: Insight-users@public.kitware.com; Julien Jomier
>>Subject: Re: [Insight-users] Possible bug in Gipl file not
>>being recognized
>>
>>
>>Hi Luis,
>>
>>Sorry the for the delay in replying. I've attached the entire
>>image as
>>it's quite a small one.
>>
>>Thanks,
>>
>>Raghavendra.
>>
>>Luis Ibanez wrote:
>>
>>>Hi Raghavendra,
>>>
>>>The ramp.gipl file was added to Testing after the 1.2
>>
>>release. You can
>>
>>>get it through CVS at:
>>>
>>
>>http://www.itk.org/cgi-bin/cvsweb.cgi/Insight/Testing/Data/Baseline/IO
>>
>>>/?cvsroot=Insight
>>>
>>>
>>>---
>>>
>>>Your test shows that your Gipl file is ok.
>>>
>>>What seems to be failing is the testing criteria of the GIPL reader
>>>for recognizing your file as a gipl-file.
>>>
>>>Could you please post the header (just the header, not the data) of
>>>your GIPL file. It should have an extra field, or a missing
>>
>>field that
>>
>>>is making the GiplImageIO reject the file.
>>>
>>>You can also check the GiplImageIO.cxx file in Insight/Code/IO and
>>>verify the revision criteria in the method "CanReadFile()".
>>>
>>>
>>>
>>>Thanks
>>>
>>>
>>>Luis
>>>
>>>
>>>
>>>----------------------------------------
>>>
>>>Raghavendra Chandrashekara wrote:
>>>
>>>
>>>>Just to be on the safe side I cleaned our copy of the ITK
>>>
>>repository,
>>
>>>>updated it again, and built everything from scratch. Unfortunately
>>>>the ramp.gipl image doesn't seem to be there anymore so I couldn't
>>>>check the program with the test image. Has the image been removed
>>>>from the Release-1-2-0 branch?
>>>>
>>>>Here's the code that I am using:
>>>>
>>>>#include <iostream>
>>>>#include <iomanip>
>>>>
>>>>#include "itkImage.h"
>>>>#include "itkImageFileReader.h"
>>>>#include "itkGiplImageIO.h"
>>>>#include "itkImageFileWriter.h"
>>>>
>>>>/* Program reads a GIPL image and writes it out again. */ int
>>>>main(int argc, char** argv) {
>>>> if (argc != 3) {
>>>> std::cout << std::setiosflags(std::ios::left) <<
>>>
>>"GIPLIOTest reads an
>>
>>>>input image file and writes it out again." << std::endl
>>>> << std::endl
>>>> << "Usage: GIPLIOTest input.gipl output.gipl" << std::endl
>>>> << std::endl
>>>> << "Where:" << std::endl
>>>> << std::endl
>>>> << std::setw(30) << "input.gipl" << std::setw(50)
>>>
>><< "is the input
>>
>>>>image" << std::endl
>>>> << std::setw(30) << "output.gipl" << std::setw(50)
>>>
>><< "is the
>>
>>>>output
>>>>filename" << std::endl;
>>>> exit(1);
>>>> }
>>>>
>>>> typedef short PixelType;
>>>> typedef itk::Image<PixelType, 3> ImageType;
>>>> typedef itk::ImageFileReader<ImageType> ReaderType;
>>>> typedef itk::ImageFileWriter<ImageType> WriterType;
>>>> itk::GiplImageIO::Pointer pGiplImageIO = itk::GiplImageIO::New();
>>>>
>>>> try {
>>>> ReaderType::Pointer pReader = ReaderType::New();
>>>> WriterType::Pointer pWriter = WriterType::New();
>>>>
>>>> // pReader->SetImageIO(pGiplImageIO);
>>>>
>>>> pReader->SetFileName(argv[1]);
>>>> pWriter->SetFileName(argv[2]);
>>>>
>>>> pWriter->SetInput(pReader->GetOutput());
>>>>
>>>> pWriter->Update();
>>>> }
>>>> catch (itk::ExceptionObject& ex) {
>>>> std::cout << "Exception object caught!" << std::endl;
>>>> std::cout << ex << std::endl;
>>>> exit(1);
>>>> }
>>>>
>>>> return 0;
>>>>}
>>>>
>>>>When I uncomment out the line that sets the GIPL IO object then
>>>>everything
>>>>works fine! So it looks like the image that I am using is alright.
>>>>
>>>>Thanks,
>>>>
>>>>Raghavendra
>>>>
>>>>----- Original Message -----
>>>>From: "Luis Ibanez" <luis.ibanez@kitware.com>
>>>>To: "Raghavendra Chandrashekara" <rc3@doc.ic.ac.uk>
>>>>Cc: <Insight-users@public.kitware.com>
>>>>Sent: Friday, March 28, 2003 1:28 PM
>>>>Subject: Re: [Insight-users] Possible bug in itkAnalyzeImageIO? :
>>>>Gipl
>>>>not
>>>>being found
>>>>
>>>>
>>>>
>>>>
>>>>>Hi Raghavendra,
>>>>>
>>>>>Yeap, the code looks right.
>>>>>
>>>>>1) Could you post the piece of code you are using for
>>>>> reading the gipl file ?
>>>>>
>>>>>2) Could you try reading the gipl test file
>>>>> that is available in
>>>>>
>>>>> Insight/Testing/Data/Baseline/IO
>>>>>
>>>>> the file name is
>>>>>
>>>>> ramp.gipl
>>>>>
>>>>>If this test file works, this may mean that there
>>>>>is something particular in your gipl file that
>>>>>prevents the reader from recognizing the format.
>>>>>
>>>>>Note that checking the extension .gipl is only the
>>>>>initial part of the test. Readers verify the content
>>>>>of the file in order to make sure they are capable
>>>>>of processing the file.
>>>>>
>>>>>
>>>>>Thanks
>>>>>
>>>>> Luis
>>>>>
>>>>>
>>>>>--------------------------
>>>>>
>>>>>Raghavendra Chandrashekara wrote:
>>>>>
>>>>>
>>>>>>Hi Luis,
>>>>>>
>>>>>>There is a line registering the GiplImageIOFactory but it is on
>>>>>>line
>>>>>>98,
>>>>>>this is the code:
>>>>>>
>>>>>>void
>>>>>>ImageIOFactory::RegisterBuiltInFactories()
>>>>>>{
>>>>>> static bool firstTime = true;
>>>>>>
>>>>>> static SimpleMutexLock mutex;
>>>>>> {
>>>>>> // This helper class makes sure the Mutex is unlocked
>>>>>> // in the event an exception is thrown.
>>>>>> MutexLockHolder<SimpleMutexLock> mutexHolder( mutex );
>>>>>> if( firstTime )
>>>>>> {
>>>>>> ObjectFactoryBase::RegisterFactory(
>>>>>
>>DicomImageIOFactory::New() );
>>
>>>>>> ObjectFactoryBase::RegisterFactory(
>>>>>
>>MetaImageIOFactory::New() );
>>
>>>>>> ObjectFactoryBase::RegisterFactory(
>>>>>
>>PNGImageIOFactory::New() );
>>
>>>>>> ObjectFactoryBase::RegisterFactory(
>>>>>
>>VTKImageIOFactory::New() );
>>
>>>>>> ObjectFactoryBase::RegisterFactory(
>>>>>
>>GiplImageIOFactory::New() );
>>
>>>>>> ObjectFactoryBase::RegisterFactory(
>>>>>
>>AnalyzeImageIOFactory::New());
>>
>>>>>> firstTime = false;
>>>>>> }
>>>>>> }
>>>>>>
>>>>>>}
>>>>>>
>>>>>>Does it look correct to you? I'm using Release-1-2-0 also.
>>>>>>
>>>>>>Thanks,
>>>>>>
>>>>>>Raghavendra.
>>>>>>
>>>>>>----- Original Message -----
>>>>>>From: "Luis Ibanez" <luis.ibanez@kitware.com>
>>>>>>To: "Raghavendra Chandrashekara" <rc3@doc.ic.ac.uk>
>>>>>>Cc: <insight-users@public.kitware.com>
>>>>>>Sent: Friday, March 28, 2003 12:31 PM
>>>>>>Subject: Re: [Insight-users] Possible bug in
>>>>>
>>itkAnalyzeImageIO? :
>>
>>>>>>Gipl
>>>>>
>>>>>
>>>>not
>>>>
>>>>
>>>>>>being found
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>>Hi Raghavendra,
>>>>>>>
>>>>>>>It looks like the GiplImageIO factory
>>>>>>>is not being found.
>>>>>>>
>>>>>>>Could you please double check the file
>>>>>>>
>>>>>>>Insight/Code/IO
>>>>>>>
>>>>>>> itkImageIOFactory.cxx
>>>>>>>
>>>>>>>and see if in line 99, the following
>>>>>>>line is not commented out :
>>>>>>>
>>>>>>>
>>>>>>>ObjectFactoryBase::RegisterFactory( GiplImageIOFactory::New() );
>>>>>>>
>>>>>>>
>>>>>>>This lines registers the Gipl reader/writer
>>>>>>>in the factory mechanism.
>>>>>>>
>>>>>>>(I'm assuming you are using ITK version 1.2)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>Regards,
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>Luis
>>>>>>>
>>>>>>>
>>>>>>>---------------------------------------------
>>>>>>>Raghavendra Chandrashekara wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>Hi Kent,
>>>>>>>>
>>>>>>>>Okay I tried the patch that you sent. Now another exception is
>>>>>>>>thrown,
>>>>>>>
>>>>>>>
>>>>>>this
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>time by the itkImageFileReader class:
>>>>>>>>
>>>>>>>>Exception object caught!
>>>>>>>>
>>>>>>>>itk::ImageFileReaderException (0x815ace8)
>>>>>>>>Location: "Unknown"
>>>>>>>>File:
>>>>>>>>/vol/vipdata/packages/InsightCVS/Code/IO/itkImageFileReader.txx
>>>>>>>>Line: 94
>>>>>>>>Description: Could not create IO object for file
>>>>>>>>../../Data/Synthetic/cube.gipl
>>>>>>>>
>>>>>>>>Does this mean that the gipl image is not being
>>>>>>>
>>recognised by any
>>
>>>>>>>>of
>>>>>>>
>>>>>>>
>>>>the
>>>>
>>>>
>>>>>>IO
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>classes?
>>>>>>>>
>>>>>>>>Raghavendra.
>>>>>>>>
>>>>>>>>----- Original Message -----
>>>>>>>>From: "Kent Williams" <kent@mail.psychiatry.uiowa.edu>
>>>>>>>>To: "Raghavendra Chandrashekara" <rc3@doc.ic.ac.uk>
>>>>>>>>Sent: Wednesday, March 19, 2003 6:46 PM
>>>>>>>>Subject: Re: [Insight-users] Possible bug in itkAnalyzeImageIO?
>>>>>>>>
>>>>>>>>
>>>>>>>>I don't know why you're getting that far into CanRead,
>>>>>>>
>>since the
>>
>>>>>>>>1.2
>>>>>>>
>>>>>>>
>>>>>>version
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>of itkAnalyzeImageIO.cxx checks for valid extensions
>>>>>>>
>>first before
>>
>>>>>>>
>>>>trying
>>>>
>>>>
>>>>>>to
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>open the file.
>>>>>>>>
>>>>>>>>I think that it's incorrect to throw an exception in CanRead
>>>>>>>>anyway; my
>>>>>>>>suggestion to you is to patch around line 1000 in
>>>>>>>
>>that file thusly:
>>
>>>>>>>>CHANGE:
>>>>>>>> if( local_InputStream.fail() )
>>>>>>>> {
>>>>>>>> ExceptionObject exception(__FILE__, __LINE__);
>>>>>>>> exception.SetDescription("File cannot be read");
>>>>>>>> throw exception;
>>>>>>>> }
>>>>>>>> local_InputStream.read( (char *)&(this->m_hdr), sizeof(struct
>>>>>>>
>>>>>>>
>>>>>>dsr) );
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> if( local_InputStream.eof() )
>>>>>>>> {
>>>>>>>> ExceptionObject exception(__FILE__, __LINE__);
>>>>>>>> exception.SetDescription("Unexpected end of file");
>>>>>>>> throw exception;
>>>>>>>> }
>>>>>>>>TO:
>>>>>>>> if( local_InputStream.fail() )
>>>>>>>> {
>>>>>>>>return false;
>>>>>>>> }
>>>>>>>> local_InputStream.read( (char *)&(this->m_hdr), sizeof(struct
>>>>>>>
>>>>>>>
>>>>>>dsr) );
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> if( local_InputStream.eof() )
>>>>>>>> {
>>>>>>>>return false;
>>>>>>>> }
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>_______________________________________________
>>>>>>>>Insight-users mailing list Insight-users@public.kitware.com
>>>>>>>>http://public.kitware.com/mailman/listinfo/insight-users
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>_______________________________________________
>>>>>>>Insight-users mailing list Insight-users@public.kitware.com
>>>>>>>http://public.kitware.com/mailman/listinfo/insight-users
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>_______________________________________________
>>>>>Insight-users mailing list
>>>>>Insight-users@public.kitware.com
>>>>>http://public.kitware.com/mailman/listinfo/insight-users
>>>>>
>>>>
>>>>
>>>>_______________________________________________
>>>>Insight-users mailing list
>>>>Insight-users@public.kitware.com
>>>>http://public.kitware.com/mailman/listinfo/insight-users
>>>>
>>>
>>>
>>>
>>>_______________________________________________
>>>Insight-users mailing list
>>>Insight-users@public.kitware.com
>>>http://public.kitware.com/mailman/listinfo/insight-users
>>
>>
>
> _______________________________________________
> Insight-users mailing list
> Insight-users@public.kitware.com
> http://public.kitware.com/mailman/listinfo/insight-users