Re: converting mesh to binary image
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
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
_______________________________________________
Insight-users mailing list
Insight-users-RyaoCGfWeh4@public.gmane.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
_______________________________________________ Insight-users mailing list Insight-users@... http://www.itk.org/mailman/listinfo/insight-users
RSS Feed