[Insight-users] ITK image origin & VTK world origin

Karthik Krishnan Karthik.Krishnan at kitware.com
Thu Apr 14 11:17:01 EDT 2005


Dear Insight-users,

Thank you very much for your answer. That clarified things.
My earlier post about the origin was incorrect, ITK's origin at the top left, VTK's at the bottom left. 

A quick look at the code cleared things up.

vtkPNGWriter.cxx:
  for (ui = 0; ui < height; ui++)
    {
    row_pointers[height - ui - 1] = (png_byte *)outPtr;
    outPtr = (unsigned char *)outPtr + rowInc;
    }
  png_write_image(png_ptr, row_pointers);

itkPNGIMageIO.cxx
  for (unsigned int ui = 0; ui < height; ui++)
    {
    row_pointers[ui] = (png_byte *)outPtr;
    outPtr = const_cast<unsigned char *>(outPtr) + rowInc;
    }
  png_write_image(png_ptr, row_pointers);
 
And since raw pointers are passed across by ImageToVTKFilter, flipping is needed. 

Thanks again and sorry about the confusion
Regards
Karthik 


Lorensen, William E (Research) wrote:

> Karthik,
> Your explanation of origin is reversed. ITK's first byte on disk is 
> origin, y goes down. This is the natural way to represent images. vtk, 
> uses the computer graphics convention. The first byte of the last row  
> on disk is the first byte on memory.
> Each system has different requirements unfortunately.
>  
> Users need to flip the vertical axis to get the vtk and itk images 
> aligned.
>  
> Bill
>
>     -----Original Message-----
>     *From:* Karthik Krishnan [mailto:Karthik.Krishnan at kitware.com]
>     *Sent:* Wednesday, April 13, 2005 11:51 AM
>     *To:* Blezek, Daniel J (Research)
>     *Cc:* Lorensen, William E (Research); Miller, James V (Research);
>     Luis Ibanez (E-mail)
>     *Subject:* Re: [Insight-users] ITK image origin & VTK world origin
>
>Hi Dan,
>
>Actually I was just pondering on the comment I just made. Frankly I am still confused. Here is a small test and the CMakeLists.txt file. The test just creates a box spatial object at (0,0) and another one translated by (15,15) and writes it using an ITK writer. Then it uses the ImageToVTKImageFilter and writes it using the vtkPNGWriter.
>
>The two images are flipped.
>
>>From the ITK Software guide which says that the origin is at the bottom left, y axis going upwards, which I believe is correct. My understanding is that the origin is that index which points to first location in memory where the image is stored and since PNG writers read from the first location and write out in a ComputerGraphics convention, they write it out upside down. And images need to be flipped while passing from ITK to VTK.
>
>Maybe I've got all my concepts screwed up. Please let me know. 
>
>Thanks
>Regards
>karthik
>
>PS: This is last weeks build (before the OrientedImage class was added last night, but after the change was made to the writers about flipping on Y.)
>
>
>
>    
>
>
>     Blezek, Daniel J (Research) wrote:
>
>>Karthik,  Is this documented somewhere in ITK?  I believe this is an ad hoc standard for ITK.  If it were truely a standard, the readers would all need to be made consistent.  As I understand it, the readers put the first byte on disk into the first byte of the volume.
>>
>>Oriented Image will take care of this issue, and the VTK / ITK interface will need to be looked at.
>>
>>-dan
>>
>>-----Original Message-----
>>From: insight-users-bounces at itk.org
>>[mailto:insight-users-bounces at itk.org]On Behalf Of Karthik Krishnan
>>Sent: Wednesday, April 13, 2005 9:56 AM
>>To: Frederic Perez
>>Cc: insight-users at itk.org; Andres Munarriz
>>Subject: Re: [Insight-users] ITK image origin & VTK world origin
>>
>>
>>Hi Anders,
>>
>>VTK has its image origin on the top left as in graphics and ITK has it on the bottom left as in math. VTK +y axis points down, ITK's points up.
>>A quick look at some of the applications in InsightApplications may help. Several applications in InsightApplications apply ITK filters and have a VTK renderer to visualize the output. 
>>
>>Here is an excerpt from 
>>
>>~/work/ITK/src/InsightApplications/SegmentationEditorFltkGui/EditorFltkGui/EditorConsoleBase.cxx
>>~/work/ITK/src/InsightApplications/SegmentationEditorFltkGui/EditorFltkGui/EditorConsole.cxx
>>
>>  converter = itk::ImageToVTKImageFilter<SourceImageType>::New();
>>  flip = itk::FlipImageFilter<SourceImageType>::New();
>>
>>  SourceAxes[0] = false;
>>  SourceAxes[1] = true;
>>  SourceAxes[2] = false;
>>  
>>  flip->SetFlipAxes(SourceAxes);
>>  converter->SetInput(flip->GetOutput());
>>
>>As Frederic pointed out, you may also manually set the origin by j_new = y_siz - j which is equivalent to flipping.
>>
>>Or you could go to VTK and then flip with vtkImageFlip
>>
>>Thanks
>>Regards
>>Karthik
>>
>>
>>
>>
>>
>>
>>
>>Frederic Perez wrote:
>>
>>  
>>
>>>Hello again, Andres,
>>>
>>>On 4/12/05, Andres Munarriz <munarriz.a at gmail.com> wrote:
>>> 
>>>
>>>    
>>>
>>>>Hi Frederic,
>>>>
>>>>Would you please elaborate on each of the terms involved in your
>>>>transformation and how to obtain them? I'm not very skillfull in
>>>>either vtk nor itk.
>>>>   
>>>>
>>>>      
>>>>
>>>Here we go. We've got a MetaImage file containing a CT scan. Our
>>>goal is to segment a certain anatomical structure by means of a
>>>command-line program using a region growing filter from ITK 2.0.0.
>>>That particular filter expects a seed point from which the segmented
>>>region will grow. We use the method
>>>"void SetSeed(const IndexType &seed)"---thus we need to provide
>>>an index.
>>>
>>>Now, in order to provide that seed we first visualize the MetaImage
>>>file with an interactive application on top of VTK 4.4. We use
>>>vtkImagePlaneWidget objects to query the contents of the file, and
>>>to obtain a seed index (i_vtk, j_vtk, k_vtk).
>>>
>>>Finally, providing that tuple (i_vtk, j_vtk, k_vtk) to SeedSeed didn't
>>>yield the expected results. Fortunately we found that substituting
>>>j_vtk by "imgSize[1] - j_vtk - 1" (imgSize[1] being the second
>>>component of the size of the image) we obtained what we expected.
>>>Notice that mapping from ITK indices to VTK indices is easy too
>>>(isolate j_vtk): j_vtk = imgSize[1] - j_itk - 1.
>>>
>>>I don't know if this is applicable to your particular problem.
>>>I apologize if this is not the case.
>>>
>>>Cheers,
>>>
>>>Frederic Perez
>>>_______________________________________________
>>>Insight-users mailing list
>>>Insight-users at itk.org
>>>http://www.itk.org/mailman/listinfo/insight-users
>>>
>>> 
>>>
>>>    
>>>
>>
>>_______________________________________________
>>Insight-users mailing list
>>Insight-users at itk.org
>>http://www.itk.org/mailman/listinfo/insight-users
>>
>>  
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/insight-users/attachments/20050414/08b7fbae/attachment-0001.htm


More information about the Insight-users mailing list