[Insight-users] Possible bug in Gipl file not being recognized
Martin Styner
martin_styner@ieee.org
Fri, 25 Apr 2003 08:40:17 +0200
Hi Julien, Raghavendra
Here are my 2 cents to this.
Indeed there are different magic number's for the GIPL format. The
719555000 number is the original magic number written by programs like
rview. Rview was developed by the same group, who came up with the GIPL
file format (GIPL = Guy's and St. Thomas Hospitals Image Processing
Library format). The other magic number was introduced in the EU
Biomorph project that used GIPL as its main data exchange format. Why a
different magic number? I don't know, but these 2 numbers are the only
ones I have seen.
Best regards
Martin
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
--
---------------------------------------------------
Martin Styner, PhD. Ing. ETH
Group Head - Medical Image Analysis (MIA)
M.E.Mueller Research Center for Orthopaedic Surgery
Institute for Surgical Technology and Biomechanics
University of Bern
Murtenstr. 35, P.O. Box 8354
CH-3001 Bern, Switzerland
Tel: +41 31 632 0940
Fax: +41 31 632 4951
Email: martin_styner@ieee.org
http://www.MEMcenter.unibe.ch
---------------------------------------------------