[Insight-users] compilation error in DiscreteCurvatureEstimator
Arnaud Gelas
arnaud_gelas at hms.harvard.edu
Tue Feb 24 11:18:27 EST 2009
you're right: sphere.vtk should be ok!
Like this, you can normally use any *.vtk file with some conditions: the
file must be a mesh surface without any point data or cell data, and
must be written in ascii (for now the reader can not handle binary vtk
file).
Martine Lefevre wrote:
>
> Yes I have built itk with itk_use_Review on
> the previous problem was due to the use of class
> QEMeshScalarDataVTKPolyDataWriter. I replaced it by
> QuadEdgeMeshScalarDataVTKPolyDataWriter and the problem was resolved.
>
> Another question regarding the sphere data in the folder data, this
> data is a surface which can be use as input for curvature estimation.
> Am I right?
> Thank you
>
>
>
>
>
> --- En date de : *Mar 24.2.09, Arnaud Gelas
> /<arnaud_gelas at hms.harvard.edu>/* a écrit :
>
> De: Arnaud Gelas <arnaud_gelas at hms.harvard.edu>
> Objet: Re: compilation error in DiscreteCurvatureEstimator
> À: "martine_lef at yahoo.fr" <martine_lef at yahoo.fr>
> Cc: "insight itk" <insight-users at itk.org>, "Luis Ibanez"
> <luis.ibanez at kitware.com>
> Date: Mardi 24 Février 2009, 15h00
>
> Hi Martine,
>
> DiscreteCurvatureEstimators are now in Insight/Code/Review directory. To be
> able to use it, you need to build itk with ITK_USE_REVIEW ON.
> Could you try to copy the code from
> Insight/Testing/Code/Review/itkQuadEdgeMeshGaussianCurvatureTest.cxx into your
> project, please?
> You would only need to change itkQuadEdgeMeshGaussianCurvatureTest by main,
> then it should normally work.
> If you face any problem, just let me know.
>
> Arnaud
>
>
>
> Martine Lefevre wrote:
> > Hi Arnauld and thank you for your suggestions.
> > I have followed what you have suggested, now I have no link problem but I
> got a compilation error. I use your c++ code DiscreteCurvatureEstimator Which I
> have download from the Insight journal link.
> > A/s soon as I instantiate an object of the class
> /QEMeshScalarDataVTKPolyDataWriter(the line: WriterType::Pointer writer =
> WriterType::New();)/ I get the following error:/
> > / /
> >
> > Compiling...
> >
> > 1>3Dfeatures.cxx
> >
> >
> 1>c:\mycodes\3dfeatures\itkQEMeshScalarDataVTKPolyDataWriter.h(115)
> : error C2440: 'initializing' : cannot convert from 'const
> itk::MapContainer<TElementIdentifier,TElement> *' to
> 'itk::SmartPointer<TObjectType>'
> >
> > 1> with
> >
> > 1> [
> >
> > 1>
> TElementIdentifier=itk::QuadEdgeMeshExtendedTraits<CoordType,3,2,CoordType,CoordType,CoordType,bool,bool>::PointIdentifier,
>
> >
> > 1> TElement=double
> >
> > 1> ]
> >
> > 1> and
> >
> > 1> [
> >
> > 1>
> TObjectType=itk::MapContainer<itk::QuadEdgeMeshExtendedTraits<CoordType,3,2,CoordType,CoordType,CoordType,bool,bool>::PointIdentifier,double>
>
> >
> > 1> ]
> >
> > 1> No constructor could take the source type, or constructor
> overload resolution was ambiguous
> >
> > 1>
> c:\mycodes\3dfeatures\itkQEMeshScalarDataVTKPolyDataWriter.h(114) :
> while compiling class template member function 'void
> itk::QEMeshScalarDataVTKPolyDataWriter<TMesh>::WritePointData(void)'
> >
> > 1> with
> >
> > 1> [
> >
> > 1> TMesh=MeshType
> >
> > 1> ]
> >
> > 1> ..\3Dfeatures.cxx(106) : see reference to class template
> instantiation 'itk::QEMeshScalarDataVTKPolyDataWriter<TMesh>'
> being compiled
> >
> > 1> with
> >
> > 1> [
> >
> > 1> TMesh=MeshType
> >
> > 1> ]
> >
> > 1>Build log was saved at
> "file://c:\mycodes\3DFeatures\Bin\3Dfeatures.dir\Debug\BuildLog.htm"
> >
> > 1>3Dfeatures - 1 error(s), 0 warning(s)
> >
> > ========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped
> ==========
> >
> > Thank you for your time
> > Martine.
> > I paste my code here
> >
> >
> > //curvature estimation using tkQEMeshDiscreteGaussianCurvatureEstimator
> >
> >
> > #include "itkQuadEdgeMesh.h"
> >
> > #include "itkVTKPolyDataReader.h"
> >
> >
> > #include "itkQuadEdgeMeshExtendedTraits.h"
> >
> > #include "itkQEMeshDiscreteGaussianCurvatureEstimator.h"
> >
> > #include "itkQEMeshDiscreteMeanCurvatureEstimator.h"
> >
> > #include "itkQEMeshDiscreteMinCurvatureEstimator.h"
> >
> > #include "itkQEMeshDiscreteMaxCurvatureEstimator.h"
> >
> > #include "itkQEMeshScalarDataVTKPolyDataWriter.h"
> >
> >
> > int main( )
> >
> > {
> >
> >
> > int Curv_choice=0;
> >
> > /* std::cout <<" * 0: Gaussian"
> <<std::endl;
> >
> > std::cout <<" * 1: mean" <<std::endl;
> >
> > std::cout <<" * 2: min" <<std::endl;
> >
> > std::cout <<" * 3: max" <<std::endl; */
> >
> >
> > const unsigned int Dimension = 3;
> >
> > typedef double CoordType;
> >
> >
> > typedef itk::QuadEdgeMeshExtendedTraits <CoordType, Dimension, 2,
> CoordType, CoordType, CoordType, bool, bool > Traits;
> >
> >
> > typedef itk::QuadEdgeMesh< CoordType, Dimension, Traits >
> MeshType;
> >
> > typedef
> itk::QEMeshDiscreteGaussianCurvatureEstimator<MeshType,MeshType>
> GaussianCurvatureFilterType;
> >
> > typedef
> itk::QEMeshDiscreteMeanCurvatureEstimator<MeshType,MeshType>
> MeanCurvatureFilterType;
> >
> > typedef
> itk::QEMeshDiscreteMinCurvatureEstimator<MeshType,MeshType>
> MinCurvatureFilterType;
> >
> > typedef
> itk::QEMeshDiscreteMaxCurvatureEstimator<MeshType,MeshType>
> MaxCurvatureFilterType;
> >
> >
> > typedef itk::VTKPolyDataReader< MeshType > ReaderType;
> ReaderType::Pointer reader = ReaderType::New( );
> >
> >
> >
> > reader->SetFileName( "C:/Images/sphere.vtk");
> >
> > try
> >
> > {
> >
> > reader->Update( );
> >
> > }
> >
> > catch( itk::ExceptionObject & exp )
> >
> > {
> >
> > std::cerr << "Exception thrown while reading the input file
> " << std::endl;
> >
> > std::cerr << exp << std::endl;
> >
> > return EXIT_FAILURE;
> >
> > }
> >
> >
> >
> >
> >
> > MeshType::Pointer mesh = reader->GetOutput();
> >
> >
> > GaussianCurvatureFilterType::Pointer gaussian_curvature =
> GaussianCurvatureFilterType::New();
> >
> > MeanCurvatureFilterType::Pointer mean_curvature =
> MeanCurvatureFilterType::New();
> >
> > MinCurvatureFilterType::Pointer min_curvature =
> MinCurvatureFilterType::New();
> >
> > MaxCurvatureFilterType::Pointer max_curvature =
> MaxCurvatureFilterType::New();
> >
> >
> >
> > MeshType::Pointer output;
> >
> > std::string output_filename;
> >
> >
> > switch(Curv_choice)
> >
> > {
> >
> > case 0:
> >
> > gaussian_curvature->SetInput( mesh );
> >
> > gaussian_curvature->Update();
> >
> >
> > output = gaussian_curvature->GetOutput();
> >
> > output_filename = "gaussian_curvature..vtk";
> >
> > break;
> >
> > case 1:
> >
> > mean_curvature->SetInput( mesh );
> >
> > mean_curvature->Update();
> >
> >
> > output = mean_curvature->GetOutput();
> >
> > output_filename = "mean_curvature.vtk";
> >
> > break;
> >
> > case 2:
> >
> > min_curvature->SetInput( mesh );
> >
> > min_curvature->Update();
> >
> >
> > output = min_curvature->GetOutput();
> >
> > output_filename = "min_curvature.vtk";
> >
> > break;
> >
> > case 3:
> >
> > max_curvature->SetInput( mesh );
> >
> > max_curvature->Update();
> >
> >
> > output = max_curvature->GetOutput();
> >
> > output_filename = "max_curvature.vtk";
> >
> > break;
> >
> > default:
> >
> > std::cout <<"The second parameter should be in between 0
> and 3"
> >
> > <<std::endl;
> >
> > return EXIT_FAILURE;
> >
> > }
> >
> >
> > typedef itk::QEMeshScalarDataVTKPolyDataWriter< MeshType >
> WriterType;
> >
> > WriterType::Pointer writer = WriterType::New();
> >
> > writer->SetInput( output );
> >
> > writer->SetFileName( output_filename );
> >
> > writer->Update();
> >
> >
> > return EXIT_SUCCESS;
> >
> > }
> >
> >
> >
> > --- En date de : *Lun 23.2.09, Arnaud Gelas
> /<arnaud_gelas at hms.harvard.edu>/* a écrit :
> >
> > De: Arnaud Gelas <arnaud_gelas at hms.harvard.edu>
> > Objet: Re: [Insight-users] link error: cannot open file
> > 'ITKReview.lib'
> > À: "martine_lef at yahoo.fr" <martine_lef at yahoo.fr>
> > Cc: "insight itk" <insight-users at itk.org>, "Luis
> Ibanez"
> > <luis.ibanez at kitware.com>
> > Date: Lundi 23 Février 2009, 14h51
> >
> > Dear Martine,
> >
> > There is no library for ITKReview (Note that you can see all generated
> > libraries your BUILD_DIRECTORY/bin/ ), you should link instead with
> > ITKQuadEdgeMesh since you want to use the QuadEdgeMeshDataStructure.
> > Then, in your main you should use itk::QuadEdgeMesh instead of
> itk::Mesh, if
> > you want to estimate curvatures...
> >
> > You can find examples/tests in Testing/Code/Review directory:
> >
> > * itkQuadEdgeMeshGaussianCurvatureTest.cxx
> > * itkQuadEdgeMeshMeanCurvatureTest.cxx
> > * itkQuadEdgeMeshMaxCurvatureTest.cxx
> > * itkQuadEdgeMeshMinCurvatureTest.cxx
> >
> > Have a good day,
> > Arnaud
> >
> > Martine Lefevre wrote:
> > > Dear Luis and itk users,
> > > > I try to do some curvature estimation using the filter
> proposed by Gelas
> > Arnauld which is based on a surface mesh data structure
> itk::QuadEdgeMesh. For
> > this reason I include the ITKReview in my CMakeLists file. >
> In building the project I get the following link error:
> > > > 1>Linking...
> > > > 1> LINK : fatal error LNK1104: cannot open file
> > 'ITKReview.lib'
> > > > Do you know the cause of this error?
> > > Thank you in advance
> > > Martine
> > > I paste the code here and the CMakeLists file.
> > > > > > > # This project is designed
> to be built outside the Insight source tree..
> > > > > PROJECT(Curvature)
> > > > > > FIND_PACKAGE ( ITK)
> > > > IF ( ITK_FOUND)
> > > > INCLUDE( ${USE_ITK_FILE} )
> > > > ENDIF( ITK_FOUND)
> > > > > FIND_PACKAGE ( VTK)
> > > > IF ( VTK_FOUND)
> > > > INCLUDE( ${USE_VTK_FILE} )
> > > > ENDIF( VTK_FOUND)
> > > > > ADD_EXECUTABLE(Curvature Curvature.cxx)
> > > > TARGET_LINK_LIBRARIES(Curvature ITKBasicFilters
> ITKReview ITKSpatialObject
> > ITKNumerics ITKIO ITKCommon ITKAlgorithms vtkRendering
> vtkVolumeRendering vtkIO
> > vtkWidgets vtkGraphics vtkImaging vtkFiltering vtkCommon)
> > > > > > > > // surface
> extraction with itk: itkBinaryMask3DMeshSource
> > > > // SurfaceExtraction.cxx
> > > > > #include "itkImageFileReader.h"
> > > > #include "itkBinaryMask3DMeshSource.h"
> > > > #include "itkImage.h"
> > > > #include "itkMesh.h"
> > > > > //#include "itkQuadEdgeMesh.h"
> > > > > int main(void )
> > > > {
> > > > const unsigned int Dimension = 3;
> > > > //typedef unsigned char PixelType;
> > > > typedef float PixelType;
> > > > > typedef itk::Image< PixelType, Dimension
> > ImageType;
> > > > typedef itk::ImageFileReader< ImageType >
> ReaderType;
> > > > ReaderType::Pointer reader = ReaderType::New();
> > > >
> reader->SetFileName("C:/Images/Volume.hdr"); > >
> > try
> > > > {
> > > > reader->Update();
> > > > }
> > > > catch( itk::ExceptionObject & exp )
> > > > {
> > > > std::cerr << "Exception thrown while
> reading the input file
> > " << std::endl;
> > > > std::cerr << exp << std::endl;
> > > > return EXIT_FAILURE;
> > > > }
> > > > > > typedef itk::Mesh<double>
> MeshType;
> > > > typedef itk::BinaryMask3DMeshSource< ImageType,
> MeshType > MeshSourceType;
> > > > MeshSourceType::Pointer meshSource =
> MeshSourceType::New();
> > > > > const PixelType objectValue =
> static_cast<PixelType>( 255.0);
> > > > > meshSource->SetObjectValue( objectValue
> );
> > > > meshSource->SetInput( reader->GetOutput() );
> > > > > try
> > > > {
> > > > meshSource->Update();
> > > > }
> > > > catch( itk::ExceptionObject & exp )
> > > > {
> > > > std::cerr << "Exception thrown during
> Update() "
> > << std::endl;
> > > > std::cerr << exp << std::endl;
> > > > return EXIT_FAILURE;
> > > > }
> > > > > std::cout << "Nodes = "
> <<
> > meshSource->GetNumberOfNodes() << std::endl;
> > > > std::cout << "Cells = " <<
> > meshSource->GetNumberOfCells() << std::endl;
> > > > std::cout << "Code end !" <<
> std::endl;
> > > > std::cin.get();
> > > > return EXIT_SUCCESS;
> > > > }
> > > > > >
> >
> >
>
>
>
>
More information about the Insight-users
mailing list