[Insight-users] How to properly use itkTriangleMeshToImageFilter?

Luis Ibanez luis.ibanez at kitware.com
Thu Jul 2 17:56:37 EDT 2009


Hi Amardeep,

I think that this typically happens when the image parameters
are such that the image is not overlapping with your input mesh
in Physical space.


You should choose the

    * Origin
    * Spacing
    * Number of pixels

of you image to create a grid on top of the Physical space that
is occupied by the Mesh.

Have you looked at your Mesh, and found the bounds of the
mesh nodes in space ?

Can you please post to the mailing list what the BoundingBox
of your mesh is ?

These values can be used to select proper parameters for the
output image that contains the rasterization of the Mesh.


The image parameters should match the extent of the input Mesh,
not the extent of an image that you read from disk. Unless your
Mesh was extracted from that image that you are reading from
disk...



You could get a feeling for these parameters by loading your
Mesh into ParaView (or any other visualization tool).


    Please let us know,


       Thanks


            Luis


--------------------------------------------------------------------------------
On Thu, Jul 2, 2009 at 3:34 PM, Amardeep Singh <amar.singh at gmx.de> wrote:

> Dear ITK Users
>
> I would like to use the "itkTriangleMeshToImageFilter". In a first
> experiment, I just want to create
> a sphere using the "itkRegularSphereMeshSource", binarize it and save the
> output. I take the size, origin and spacing
> of the resulting image from an image that I read from the harddisk (just
> for convenience).
> Unfortunately, I get the following error:
>
> Start Processing!
> [-90, 126, -72]          <--- origin
> [182, 218, 182]        <--- size of image
> [1, 1, 1]                    <--- spacing of image
> [0, 0, 0]                    <--- index
> Exception caught !
>
> itk::ExceptionObject (0x81a3b00)
> Location: "void itk::TriangleMeshToBinaryImageFilter<TInputMesh,
> TOutputImage>::GenerateData() [with TInputMesh = itk::Mesh<float, 3u,
> itk::DefaultStaticMeshTraits<float, 3u, 3u, float, float, float> >,
> TOutputImage = itk::Image<unsigned char, 3u>]"
> File:
> /workspace/InsightToolkit-3.14.0/Code/BasicFilters/itkTriangleMeshToBinaryImageFilter.txx
> Line: 224
> Description: itk::ERROR: TriangleMeshToBinaryImageFilter(0x8141ec8): No
> Image Indices Found.
>
> Above, I have included output, indicating the origin, size, spacing and
> index of the largest region of the image that I read from the harddisk.
> These are the values that I pass to the "itkTriangleMeshToImageFilter", so
> they should be fine, I think.
> There has been a similar posting on the mailing list ("
> http://www.nabble.com/converting-mesh-to-binary-image-td21170657.html"),
> but the solution to the problem was not made explicit, unfortunately.
> Please, find my source code attached.
> Does anyone know how to resolve this problem?
> Thank you very much!
>
> Best regards
> Amardeep
>
>
> #include "itkImageRegionIterator.h"
> #include "itkImageFileReader.h"
> #include "itkImageFileWriter.h"
> #include "itkTriangleMeshToBinaryImageFilter.h"
> #include "itkDefaultStaticMeshTraits.h"
> #include "itkMesh.h"
> #include "itkRegularSphereMeshSource.h"
>
> #include "iostream"
>
>
> int main(int argc, char *argv[] )
> {
>   std::cout << "Start Processing!" << std::endl;
>
>   typedef unsigned char BinaryPixelType;
>   typedef float PixelType;
>   typedef itk::DefaultStaticMeshTraits<float, 3, 3,float,float>
> TriangleMeshTraits;
>   typedef itk::Mesh<float,3, TriangleMeshTraits> TriangleMeshType;
>   typedef itk::RegularSphereMeshSource<TriangleMeshType>
>  SphereMeshSourceType;
>   typedef SphereMeshSourceType::PointType PointType;
>
>   typedef itk::Image<BinaryPixelType, 3>      BinaryImageType;
>   typedef itk::Image<PixelType, 3> ImageType;
>
>   typedef itk::TriangleMeshToBinaryImageFilter<TriangleMeshType,
> BinaryImageType> TriangleMeshToBinaryImageFilterType;
>
>
>   TriangleMeshToBinaryImageFilterType::Pointer triangleMeshToImage =
> TriangleMeshToBinaryImageFilterType::New();
>   SphereMeshSourceType::Pointer sphere = SphereMeshSourceType::New();
>   sphere->SetScale(5);
>   sphere->SetResolution(5);
>
>   typedef itk::ImageFileReader<ImageType> ReaderType;
>   typedef itk::ImageFileWriter<BinaryImageType> WriterType;
>
>   ReaderType::Pointer reader = ReaderType::New();
>   reader->SetFileName("/test_image.nii.gz");
>   try
>   {
>     reader->Update();
>   }
>   catch( itk::ExceptionObject & excep )
>   {
>     std::cerr << "Exception caught !" << std::endl;
>     std::cerr << excep << std::endl;
>   }
>
>   PointType center;
>   center[0] = 10;
>   center[1] = 10;
>   center[2] = 10;
>   sphere->SetCenter(center);
>   triangleMeshToImage->SetInput(sphere->GetOutput());
>
>   ImageType::Pointer orgImage = reader->GetOutput();
>   const ImageType::PointType orgOrigin = orgImage->GetOrigin();
>   const ImageType::SizeType orgSize =
> orgImage->GetLargestPossibleRegion().GetSize();
>   const ImageType::SpacingType orgSpacing = orgImage->GetSpacing();
>   const ImageType::IndexType orgIndex =
> orgImage->GetLargestPossibleRegion().GetIndex();
>
>   std::cout << orgOrigin << std::endl;
>   std::cout << orgSize << std::endl;
>   std::cout << orgSpacing << std::endl;
>   std::cout << orgIndex << std::endl;
>
>   triangleMeshToImage->SetTolerance (1.0);
>   triangleMeshToImage->SetSpacing (orgSpacing);
>   triangleMeshToImage->SetOrigin(orgOrigin);
>   triangleMeshToImage->SetSize (orgSize);
>   triangleMeshToImage->SetIndex (orgIndex);
>
>   WriterType::Pointer writer = WriterType::New();
>
>   writer->SetFileName("/test_output.nii.gz");
>   writer->SetInput(triangleMeshToImage->GetOutput());
>
>   try
>   {
>       sphere->Update();
>       triangleMeshToImage->Update();
>       writer->Update();
>   }
>   catch( itk::ExceptionObject & excep )
>   {
>     std::cerr << "Exception caught !" << std::endl;
>     std::cerr << excep << std::endl;
>   }
>
>   return 0;
>
> }
>
>
>
>
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.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/20090702/e66c8177/attachment-0001.htm>


More information about the Insight-users mailing list