[IGSTK-Users] problems using a specific image reader

Patrick Cheng cheng at isis.georgetown.edu
Mon Mar 19 11:29:19 EDT 2007


Hi Sophie,

To read an ITK image and pass it to igstkImageSpatialObject you can do 
the following two things:

1. IGSTK use loaded events to pass image data around. We use observer to 
observe image reader, and call RequestGetImage() to ask the image reader 
to send out the event. Some sample code as following:

   igstkObserverObjectMacro(CTImage,CTImageReader::ImageModifiedEvent,
                                                   CTImageSpatialObject)

   m_CTImageObserver = CTImageObserver::New();
   m_ImageReader->AddObserver(igstk::CTImageReader::ImageModifiedEvent(),
                              m_CTImageObserver);

     m_ImageReader->RequestReadImage();

     m_ImageReader->RequestGetImage();

     if(m_CTImageObserver->GotCTImage())
       {
       m_ImageSpatialObject = m_CTImageObserver->GetCTImage();
       }


2. If you don't want to use observer, try add a .GetPointer() to your 
code see if it will work.

igstk::Friends::ImageReaderToImageSpatialObject::ConnectImage(m_ImageReader, 

  m_ImageSpatialObject.GetPointer());


Patrick


Sophie Blestel wrote:
> Hi,
> 
> I use images in a specific format, so I can't read them using 
> DICOMImageReader. So I have written a new class : GisImageReader, that 
> has only a few methods :
> 
>        //to set my image in an internal variable
>        void SetGisImage(char * FileName);
> 
>        //to get my image as an itk::OrientedImage
>        const virtual ImageType::ConstPointer GetITKImage() const;
>        (with : typedef itk::OrientedImage< unsigned short, 3 > ImageType)
> 
>        etc....
> 
> This class doesn't inheritate.
> 
> I have also  declared the ImageReaderToImageSpatialObject class to be a 
> friend :
>  
>        igstkFriendClassMacro( 
> igstk::Friends::ImageReaderToImageSpatialObject );
> 
> In my project, I do :
> 
>        igstk::MRImageSpatialObject *  m_ImageSpatialObject = 
> igstk::MRImageSpatialObject::New();
>        igstk::GisImageReader  *   m_ImageReader = new 
> igstk::GisImageReader();
> 
>        m_ImageReader->SetGisImage(FileName);
>        
> igstk::Friends::ImageReaderToImageSpatialObject::ConnectImage(m_ImageReader, 
> m_ImageSpatialObject);
> 
> ConnectImage is defined in igstkImageReader as follows :
>        template < class TReader, class TImageSpatialObject >
>        static void
>        ConnectImage( const TReader * reader, TImageSpatialObject * 
> imageSpatialObject )
>        {
>             cout<<"DEBUG, ConnectImage called ... \n";
>             imageSpatialObject->RequestSetImage( reader->GetITKImage() ); 
>        }
> 
> But when I execute it, there is an error : "Acces refused / The memory 
> can't be read".
> 
> This bug happends in the method :
>         ImageSpatialObject< TPixelType, VDimension >::RequestSetImage( 
> const ImageType * image )
> at it very beginning :
>          m_ImageToBeSet = image;
> 
> Then I wrote :
>         (*image).Print(cout);
>         std::cout<<"m_ImageToBeSet"<<m_ImageToBeSet<<"\n"; 
> 
> image is "full" and contains my image, but it appeared that 
> m_ImageToBeSet induced an error, because it was not initialized.
> So I initialized it in the constructor of the class ImageSpatialObject, 
> but it doesn't change anything. It still induces an error.
> 
> Do you have any idea of what's wrong ?
> 
> Thanks
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> IGSTK-Users mailing list
> IGSTK-Users at public.kitware.com
> http://public.kitware.com/cgi-bin/mailman/listinfo/igstk-users



More information about the IGSTK-Users mailing list