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

Dženan Zukić dzenanz at gmail.com
Thu May 27 01:27:16 EDT 2010


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/20100527/01e7d33b/attachment.htm>


More information about the Insight-users mailing list