[Insight-users] converting mesh to binary image
Moti Freiman
freiman at cs.huji.ac.il
Thu Jan 1 06:51:01 EST 2009
Hi,
Thanks for reply, You were right,
We have some bug in the origin details, and when we fixed it, it worked
great.
Many thanks,
Moti
On Wed, Dec 31, 2008 at 8:17 PM, Luis Ibanez <luis.ibanez at kitware.com>wrote:
>
> Hi Moti,
>
> Please print out the values of:
>
> orgSpacing
> orgOrigin
> orgSize
> orgIndex
>
> just before you pass them to the meshFilter.
>
> It is likely that the values in "orgSize" are zeros.
>
>
> Please let us know what you find.
>
>
> Thanks
>
>
> Luis
>
>
> ---------------------
> Moti Freiman wrote:
>
>> Hi,
>> I'm trying to convert a 3d surface (got as some segmentation result) to a
>> binary image, for comparison between different segmentations.
>> I build a mesh from points and triangles which I got and save it as a vtk
>> polygonal data. It performs well and I can visualize it properly using
>> paraview.
>> However, when I'm trying to convert it to a 3D binary volume using
>> itkTriangleMeshToBinaryImageFilter I got the following exception:
>> ------------------------------------------------------ start of output
>> -------------------------------------------------------------------------
>> ExceptionObject caught !
>>
>> itk::ExceptionObject (012CFB38)
>> Location: "void __thiscall itk::TriangleMeshToBinaryImageFilter<class
>> itk::Mesh<unsigned char,3,class itk::DefaultStaticMeshTraits<unsigned
>> char,3,3,float,float,unsigned char> >,class itk::Image<unsigned char,3>
>> >::GenerateData(void)"
>> File:
>> e:\libs\insighttoolkit-3.10.0\code\basicfilters\itkTriangleMeshToBinaryImageFilter.txx
>> Line: 224
>> Description: itk::ERROR: TriangleMeshToBinaryImageFilter(038FD670): No
>> Image Indices Found.
>>
>>
>> Press any key to continue
>>
>>
>>
>> ------------------------------------------------------- end of output
>> -------------------------------------------------------------------------
>>
>> My code is below,
>>
>> ------------------------------------------------------ start of
>> code-------------------------------------------------------------------------
>> #include "itkVTKPolyDataWriter.h"
>> #include "itkVTKPolyDataReader.h"
>> #include "itkImageFileReader.h"
>> #include "itkImageFileWriter.h"
>> #include "itkCastImageFilter.h"
>>
>>
>> #include "itkMesh.h"
>> #include "itkTriangleCell.h"
>> #include <fstream>
>>
>>
>> #include "itkTriangleMeshToBinaryImageFilter.h"
>>
>>
>>
>> int main( int argc, char **argv )
>> { char *points_name = NULL, *faces_name = NULL, *output_mesh = NULL,
>> *input_image = NULL, *output_name = NULL;
>>
>>
>> points_name = argv[1];
>> faces_name = argv[2];
>> output_mesh = argv[3];
>> input_image = argv[4];
>> output_name = argv[5];
>>
>> typedef short PixelType;
>> typedef unsigned char OutputPixelType;
>> const unsigned int Dimension = 3;
>>
>> typedef itk::Mesh <OutputPixelType, Dimension> itkMeshType;
>>
>> itkMeshType::Pointer mesh = itkMeshType::New();
>> std::fstream pointsReader;
>> pointsReader.open (points_name, std::ios::in);
>> int i=0;
>> while (pointsReader.peek () != EOF)
>> {
>> itkMeshType::PointType p;
>> pointsReader >> p[0] >> p[1] >> p[2];
>> mesh->SetPoint (i,p);
>> ++i;
>> }
>> pointsReader.close();
>> typedef itkMeshType::CellType CellType;
>> typedef itk::TriangleCell < CellType > FaceType;
>>
>> typedef CellType::CellAutoPointer CellAutoPointer;
>>
>>
>>
>> std::fstream facesReader;
>> facesReader.open (faces_name, std::ios::in);
>> i=0;
>> while (facesReader.peek () != EOF)
>> {
>> int p[3];
>> facesReader >> p[0] >> p[1] >> p[2];
>> CellAutoPointer face;
>> face.TakeOwnership( new FaceType );
>>
>> face->SetPointId (0, p[0]);
>> face->SetPointId (1, p[1]);
>> face->SetPointId (2, p[2]);
>>
>> mesh->SetCell (i,face);
>> ++i;
>> }
>> facesReader.close();
>> mesh->Update();
>>
>>
>>
>> typedef itk::VTKPolyDataWriter<itkMeshType> itkVTKPolyDataWriterType;
>>
>> itkVTKPolyDataWriterType::Pointer meshWriter =
>> itkVTKPolyDataWriterType::New();
>> meshWriter->SetFileName( output_mesh );
>> meshWriter->SetInput (mesh);
>> try
>> {
>> meshWriter->Update();
>> }
>> catch ( itk::ExceptionObject &err)
>> {
>> std::cout << "ExceptionObject caught !" << std::endl;
>> std::cout << err << std::endl;
>> return -1;
>> }
>>
>>
>>
>> typedef itk::Image< PixelType, Dimension > ImageType;
>> typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
>> typedef itk::ImageFileReader< ImageType > ImageReaderType;
>>
>>
>>
>>
>>
>> // Read the input files
>> ImageReaderType::Pointer reader = ImageReaderType::New();
>> reader->SetFileName( input_image );
>> try
>> {
>> reader->Update();
>> }
>> catch ( itk::ExceptionObject &err)
>> {
>> std::cout << "ExceptionObject caught !" << std::endl;
>> std::cout << err << std::endl;
>> return -1;
>> }
>>
>>
>> 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();
>>
>>
>> typedef itk::TriangleMeshToBinaryImageFilter <itkMeshType,
>> OutputImageType> itkTriangleMeshToBinaryImageFilterType;
>> itkTriangleMeshToBinaryImageFilterType::Pointer meshFilter =
>> itkTriangleMeshToBinaryImageFilterType::New();
>> meshFilter->SetTolerance (1.0);
>> meshFilter->SetSpacing (orgSpacing);
>> meshFilter->SetOrigin(orgOrigin);
>> meshFilter->SetSize (orgSize);
>> meshFilter->SetIndex (orgIndex);
>> meshFilter->SetInput(mesh);
>> try
>> {
>> meshFilter->Update();
>> }
>> catch ( itk::ExceptionObject &err )
>> {
>> std::cout << "ExceptionObject caught !" << std::endl;
>> std::cout << err << std::endl;
>> return -1;
>> }
>> // Write the output image containing the binary volume.
>> typedef itk::ImageFileWriter< OutputImageType > WriterType;
>> WriterType::Pointer writer = WriterType::New();
>> writer->SetInput( meshFilter->GetOutput() );
>> writer->SetFileName( output_name );
>> try
>> {
>> writer->Update();
>> }
>> catch ( itk::ExceptionObject &err )
>> {
>> std::cout << "ExceptionObject caught !" << std::endl;
>> std::cout << err << std::endl;
>> return -1;
>> }
>>
>> return 0; }
>>
>> ------------------------------------------------------ end of
>> code-------------------------------------------------------------------------
>>
>> Thanks for any help,
>> Moti
>> --
>> __
>> Moti Freiman, Ph.D Student.
>> Medical Image Processing and Computer-Assisted Surgery Laboratory.
>> School of Computer Science and Engineering.
>> The Hebrew University of Jerusalem Givat Ram, Jerusalem 91904, Israel
>> Phone: +(972)-2-658-5371 (laboratory)
>> WWW site: http://www.cs.huji.ac.il/~freiman<http://www.cs.huji.ac.il/%7Efreiman>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Insight-users mailing list
>> Insight-users at itk.org
>> http://www.itk.org/mailman/listinfo/insight-users
>>
>
--
__
Moti Freiman, Ph.D Student.
Medical Image Processing and Computer-Assisted Surgery Laboratory.
School of Computer Science and Engineering.
The Hebrew University of Jerusalem Givat Ram, Jerusalem 91904, Israel
Phone: +(972)-2-658-5371 (laboratory)
WWW site: http://www.cs.huji.ac.il/~freiman
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20090101/fa6e7d7e/attachment-0001.htm>
More information about the Insight-users
mailing list