[Insight-users] TriangleMeshToBinaryImageFilter with direction cosines different from identity

Luis Ibanez luis.ibanez at kitware.com
Fri May 28 10:56:37 EDT 2010


Hi Dženan,

Excellent !,


Thanks for joining the Adopt a Bug program.

--

Regarding your question:

               ITK is still using CVS,


    ...I know, I know...
    but it was cool ten years ago...      :-)


   We will skip SVN and will migrate directly to git
   as part of the refactoring for ITK 4.0 that should
   start by the end of June.


   Other projects at Kitware have already migrating
   to git (in particular VTK and ParaView).


For details, please see:
http://www.kitware.com/news/home/browse/ITK?2010_04_20&An+Update+on+VTK%27s+Git+Conversion



       Regards,


          Luis


------------------------------------------------------------
2010/5/27 Dženan Zukić <dzenanz at gmail.com>

> Hi Luis,
>
> Yes, I could fix it. And write access could come in handy in similar
> situations later on. But I thought you abandoned CVS in favor of something
> else (svn maybe)?
>
> Regards,
> Dženan
>
> 2010/5/26 Luis Ibanez <luis.ibanez at kitware.com>
>
> Hi Dženan,
>>
>> You seem to have identified a real bug.
>>
>> Could you please log a bug entry at:
>> http://public.kitware.com/Bug/my_view_page.php
>>
>> As you already pointed out, it looks like the source of the
>> error is the manual computation of conversions between
>> indexes and point coordinates in lines 442-446:
>>
>>    point = points.Value();
>>
>>    newpoint[0] = (point[0]-m_Origin[0]) * invspacing[0];
>>    newpoint[1] = (point[1]-m_Origin[1]) * invspacing[1];
>>    newpoint[2] = (point[2]-m_Origin[2]) * invspacing[2];
>>
>> which should have been something like:
>>
>>    image->TransformPhysicalPointToIndex( point, newpoint );
>>
>> or even better, we should rename the variable "newpoint"
>> as "newindex" to be
>>
>>    image->TransformPhysicalPointToIndex( point, newpoint );
>>
>>
>> Also, the filter has settings for the Origin and Spacing of the
>> output image, but not for its direction.
>>
>> It needs something like
>>
>>     itkSetMacro(Direction, DirectionType);
>>
>> in the header file,
>>
>> and then in lines 194 in the .txx file
>>
>>    OutputImage->SetLargestPossibleRegion( region);     //
>>    OutputImage->SetBufferedRegion( region );           // set the region
>>    OutputImage->SetRequestedRegion( region );          //
>>    OutputImage->SetSpacing(m_Spacing);         // set spacing
>>    OutputImage->SetOrigin(m_Origin);   //   and origin
>>
>> we should add
>>
>>    OutputImage->SetDirection(m_Direction);
>>
>>
>> ----
>>
>>
>>
>> Would you be interested in adopting this bug ?
>>
>> http://www.itk.org/Wiki/ITK_10th_Anniversary_Activities/Adopt-A-Bug_1.0
>>
>> The adoption process
>> includes full CVS write access to ITK      :-)
>>
>>
>>
>> If so, we will be happy to assist you in the
>> process of fixing it.
>>
>>
>>    Regards,
>>
>>
>>        Luis
>>
>>
>> ------------------
>> 2010/5/26 Dženan Zukić <dzenanz at gmail.com>:
>> > Update: by setting transform matrices to identity in order to experiment
>> > with them, I notices that my code for using
>> > DeformableMesh3DFilter was not wrong, but that filter does not respect
>> > direction cosines either. With identity cosines it worked without weird
>> > deformations I was experiencing with sagittal images.
>> > And since many (most?) filters which deal with images ignore direction
>> > cosines, again we come to the need of having a filter which will
>> reorient
>> > image pixels in order to have identity cosines matrix (DICOM LPS
>> > orientation, ITK RAI orientation). And creating this filter does not
>> have to
>> > be considered admitting "ITK is not perfect", it can be considered as a
>> > stopgap measure until all filters use TransformPhysicalPointToIndex and
>> > other built-in transformation routines instead of custom (and
>> incomplete)
>> > transformation code (such as in TriangleMeshToBinaryImageFilter).
>> > Regards,
>> > Dženan
>> > 2010/5/26 Dženan Zukić <dzenanz at gmail.com>
>> >>
>> >> Hi everyone!
>> >> While wrestling with DeformableMesh3DFilter, I wanted to create binary
>> >> mask of my initial mesh (so I could use it with examples), but I ran
>> into a
>> >> problem. TriangleMeshToBinaryImageFilter is not designed to produce
>> images
>> >> with direction cosines matrix different from identity matrix. When I
>> supply
>> >> it with such an image and mesh which is valid with respect to ITK's
>> physical
>> >> coordinate handling routines (TransformPhysicalPointToContinuousIndex
>> and
>> >> friends), it crashes.
>> >> typedef
>> >> itk::TriangleMeshToBinaryImageFilter<MeshType,VisualizingImageType>
>> >> MeshFilterType;
>> >> MeshFilterType::Pointer meshFilter = MeshFilterType::New();
>> >> meshFilter->SetInfoImage(visualizing); //TransformMatrix = 0 1 0
>> >> -0.0939968 0 -0.995573 -0.995573 0 0.0939968
>> >> meshFilter->SetInput(mesh);
>> >> meshFilter->Update(); //crashes
>> >> For usage in examples, I can edit my transform matrix in .mha files and
>> >> set it to identity, but what about normal usage? Is there some quick
>> (and
>> >> possibly dirty) way to get this right, or do I have to do all the math
>> on
>> >> paper in order to transform between representations with and without
>> >> direction cosines?
>> >> Thanks,
>> >> Dženan
>> >
>> > _____________________________________
>> > Powered by www.kitware.com
>> >
>> > Visit other Kitware open-source projects at
>> > http://www.kitware.com/opensource/opensource.html
>> >
>> > Kitware offers ITK Training Courses, for more information visit:
>> > http://www.kitware.com/products/protraining.html
>> >
>> > Please keep messages on-topic and check the ITK FAQ at:
>> > http://www.itk.org/Wiki/ITK_FAQ
>> >
>> > Follow this link to subscribe/unsubscribe:
>> > http://www.itk.org/mailman/listinfo/insight-users
>> >
>> >
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20100528/26210336/attachment.htm>


More information about the Insight-users mailing list