ITK Release 4/QuadEdgeMesh Filter: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
Line 48: Line 48:
=== Review and possibly move other filters from Insight Journal ===
=== Review and possibly move other filters from Insight Journal ===
* IOWA filters (see above)
* IOWA filters (see above)
* [http://insight-journal.com/browse/publication/693 Reading a PTX file into an itkMesh]
* 693 - [http://insight-journal.com/browse/publication/693 Reading a PTX file into an itkMesh]
* [http://insight-journal.com/browse/publication/687 Spherical Demons Registration of Spherical Surfaces]
* 687 - [http://insight-journal.com/browse/publication/687 Spherical Demons Registration of Spherical Surfaces]
* [http://insight-journal.com/browse/publication/680 Transforming an itkPointSet]
* 680 - [http://insight-journal.com/browse/publication/680 Transforming an itkPointSet]
* [http://insight-journal.com/browse/publication/662 Iterative Smoothing of Field Data in Spherical Meshes]
* 662 - [http://insight-journal.com/browse/publication/662 Iterative Smoothing of Field Data in Spherical Meshes]
* [http://insight-journal.com/browse/publication/645 Rotational Registration of Spherical Surfaces Represented as QuadEdge Meshes]
* 645 - [http://insight-journal.com/browse/publication/645 Rotational Registration of Spherical Surfaces Represented as QuadEdge Meshes]


=== move [http://insight-journal.com/browse/publication/740 Cuberille Implicit Surface Polygonization for ITK] to ITK ===
=== move [http://insight-journal.com/browse/publication/740 Cuberille Implicit Surface Polygonization for ITK] to ITK ===

Revision as of 12:45, 27 October 2010

QuadEdgeMesh Filters

original page

arnaud's comments on filters and data Data Processing

Wen Li - Iowa

Insight Journal contributions

Filters in NAMIC Sandbox

http://svn.na-mic.org/NAMICSandBox/trunk/QuadEdgeMeshFilters/

  • itkShiftScalarsQuadEdgeMeshFilter
  • itkWindowScalarsQuadEdgeMeshFilter

Alex Gouaillard et al

during the span of the project : Creatis@lyon, Sun Microsystems ERI@beijing, caltech, Harvard Med. School, A*STAR@singapore, CoSMo@everywhere

Whith help from A. Gelas, E. Boix, L.Florez, M. Malaterre.

TODO

No specific order

Data Processing

Data Processing

Conditional Iterators

D. Doria has written mesh iterators for VTK. He has allowed the iterator to be a "conditional iterator" by subclassing and reimplementing the AddVertex function. It performs any test the user would like on the current vertex and the next vertex. (I.e. you can add the next vertex to the queue only if it is close enough (by any metric - distance, color, normal angle, etc) to the current vertex). The current closest equivalent with QE would be itkQuadEdgeMeshFrontIterator and seems to be confusing and perhaps less flexible.

Here is D.D's superclass implementation github link

Here is D.D's derived class: (which shows 3 different conditions) github link

Move Existing classes out of review - [DONE] - Sept 2010

  • check coverage

Review and possibly move other filters from Insight Journal

move Cuberille Implicit Surface Polygonization for ITK to ITK

  • review IJ paper
  • make it work with QuadEdge
    • use exceptions here and there in QE to catch non-manifoldness
  • global code review
  • move it

Illustrate and optimize

  • write benchmarks for data structure ( => Example)
  • profile
  • document structure building process (AddCell)
  • come up with an optimal building process (AddCell)
  • optimize code for speed
  • profil decimation and other slow filters
  • optimize code for speed

Document

  • Add a Surface Mesh part to the ITK software guide.
    • structure
    • Euler Operators
    • FIlters

recode and replace the simplex implementation with the old QEMeshWithDual design

  • write the data structure with a second point container
  • write trianglemeshtosimplexmesh (and back) filters, use them for benchmark
  • check the other filters of the simplex framework for QE compatibility
  • see if we can have the complete framework leverage QE (note, if there is no topological change, it might be slower to use QE)

Improve Simplex (M. Audette)

M. Audette's adaptation of H. Delingette's simplex mesh, where he uses T1 and T2 operators to delete specific edges in order to explicitly control surface mesh resolution (prior to controlled-resolution tetrahedralization).

The operators are on page 119 of Herve's IJCV paper General Object Reconstruction Based on Simplex Meshes which can still be found here.

M. Audettes's adaptation appears in ICCV Workshop 2005:

Yanxi Liu, Tianzi Jiang, Changshui Zhang (Eds.): Computer Vision for Biomedical Image Applications, First International Workshop, CVBIA 2005, Beijing, China, October 21, 2005, Proceedings. Lecture Notes in Computer Science 3765 Springer 2005, ISBN 3-540-29411-2

Michel A. Audette, Hervé Delingette, Alexander Fuchs, Oliver R. Astley, Kiyoyuki Chinzei: A Topologically Faithful, Tissue-Guided, Spatially Varying Meshing Strategy for Computing Patient-Specific Head Models for Endoscopic Pituitary Surgery Simulation. 178-188

(and later in Computer Aided Surgery... here )

move out of review

First step of moving QE out of review

The basic structure as well as the Euler Operators and the helpers have been moved to Common. The filters have been moved to Algorithms and the VTKPolyData readers and wroteers to IO. The source files for the test have been moved to the corresponding directory under Testing. The tests have been removed or disabled and need further attention.

Change-Id: Ib25a00ca58c58103c184100ad51b561e5406cf72


oving files needed by QuadEdgeMesh tests out of review.

Those one felt between the cracks the first time.

Change-Id: I656be8aee7a318493272146223d288c38a6e7b1d

Moved to Code/Algorithm

  • itkPriorityQueueContainer.h # container. should it go to Common? NOTE (Arnaud): more appropriate in common
  • itkQuadEdgeMeshBorderTransform.h # should we rename and add Filter at the end?
  • itkQuadEdgeMeshBorderTransform.txx # should we rename and add Filter at the end?
  • itkQuadEdgeMeshCleanFilter.h
  • itkQuadEdgeMeshDecimationCriteria.h
  • itkQuadEdgeMeshDecimationFilter.h
  • itkQuadEdgeMeshDecimationQuadricElementHelper.h
  • itkQuadEdgeMeshDelaunayConformingFilter.h
  • itkQuadEdgeMeshDelaunayConformingFilter.txx
  • itkQuadEdgeMeshDiscreteCurvatureEstimator.h # should we rename and add Filter at the end?
  • itkQuadEdgeMeshDiscreteCurvatureTensorEstimator.h # should we rename and add Filter at the end? NOTE (Arnaud): this class has no implementation
  • itkQuadEdgeMeshDiscreteGaussianCurvatureEstimator.h # should we rename and add Filter at the end?
  • itkQuadEdgeMeshDiscreteMaxCurvatureEstimator.h # should we rename and add Filter at the end?
  • itkQuadEdgeMeshDiscreteMeanCurvatureEstimator.h # should we rename and add Filter at the end?
  • itkQuadEdgeMeshDiscreteMinCurvatureEstimator.h # should we rename and add Filter at the end?
  • itkQuadEdgeMeshDiscretePrincipalCurvaturesEstimator.h # should we rename and add Filter at the end?
  • itkQuadEdgeMeshEdgeMergeDecimationFilter.h
  • itkQuadEdgeMeshEdgeMergeDecimationFilter.txx
  • itkQuadEdgeMeshNormalFilter.h
  • itkQuadEdgeMeshNormalFilter.txx
  • itkQuadEdgeMeshParam.h # should we rename and add Filter at the end? NOTE (Arnaud): this class may require a sparse solver traits (that must be renamed since it is not one trait but rather one adaptor)
  • itkQuadEdgeMeshParam.txx # should we rename and add Filter at the end?
  • itkQuadEdgeMeshParamMatrixCoefficients.h
  • itkQuadEdgeMeshQuadricDecimation.h # should we rename and add Filter at the end?
  • itkQuadEdgeMeshSmoothing.h # should we rename and add Filter at the end?
  • itkQuadEdgeMeshSmoothing.txx # should we rename and add Filter at the end?
  • itkQuadEdgeMeshSquaredEdgeLengthDecimation.h # should we rename and add Filter at the end?
  • itkQuadEdgeMeshSquaredEdgeLengthDecimation.txx # should we rename and add Filter at the end?
  • itkQuadEdgeMeshToQuadEdgeMeshFilter.h
  • itkQuadEdgeMeshToQuadEdgeMeshFilter.txx

Moved to Code/Common

  • itkGeometricalQuadEdge.h
  • itkGeometricalQuadEdge.txx
  • itkQuadEdge.cxx
  • itkQuadEdge.h
  • itkQuadEdgeCellTraitsInfo.h
  • itkQuadEdgeMesh.h
  • itkQuadEdgeMesh.txx
  • itkQuadEdgeMeshBaseIterator.h
  • itkQuadEdgeMeshBoundaryEdgesMeshFunction.h
  • itkQuadEdgeMeshBoundaryEdgesMeshFunction.txx
  • itkQuadEdgeMeshEulerOperatorCreateCenterVertexFunction.h
  • itkQuadEdgeMeshEulerOperatorCreateCenterVertexFunction.txx
  • itkQuadEdgeMeshEulerOperatorDeleteCenterVertexFunction.h
  • itkQuadEdgeMeshEulerOperatorDeleteCenterVertexFunction.txx
  • itkQuadEdgeMeshEulerOperatorFlipEdgeFunction.h
  • itkQuadEdgeMeshEulerOperatorFlipEdgeFunction.txx
  • itkQuadEdgeMeshEulerOperatorJoinFacetFunction.h
  • itkQuadEdgeMeshEulerOperatorJoinFacetFunction.txx
  • itkQuadEdgeMeshEulerOperatorJoinVertexFunction.h
  • itkQuadEdgeMeshEulerOperatorJoinVertexFunction.txx
  • itkQuadEdgeMeshEulerOperatorSplitEdgeFunction.h
  • itkQuadEdgeMeshEulerOperatorSplitFacetFunction.h
  • itkQuadEdgeMeshEulerOperatorSplitFacetFunction.txx
  • itkQuadEdgeMeshEulerOperatorSplitVertexFunction.h
  • itkQuadEdgeMeshEulerOperatorSplitVertexFunction.txx
  • itkQuadEdgeMeshExtendedTraits.h
  • itkQuadEdgeMeshFrontIterator.h
  • itkQuadEdgeMeshFrontIterator.txx
  • itkQuadEdgeMeshFunctionBase.h
  • itkQuadEdgeMeshLineCell.h
  • itkQuadEdgeMeshLineCell.txx
  • itkQuadEdgeMeshMacro.h
  • itkQuadEdgeMeshPoint.h
  • itkQuadEdgeMeshPoint.txx
  • itkQuadEdgeMeshPolygonCell.h
  • itkQuadEdgeMeshPolygonCell.txx
  • itkQuadEdgeMeshTopologyChecker.h
  • itkQuadEdgeMeshTopologyChecker.txx
  • itkQuadEdgeMeshTraits.h
  • itkQuadEdgeMeshZipMeshFunction.h
  • itkQuadEdgeMeshZipMeshFunction.txx
  • itkTriangleHelper.h
  • itkTriangleHelper.txx

Moved to Code/IO

  • itkQuadEdgeMeshScalarDataVTKPolyDataWriter.h
  • itkQuadEdgeMeshScalarDataVTKPolyDataWriter.txx

Shall we remove the following in favor of Mesh IO ?

  • itkVTKPolyDataReader.h
  • itkVTKPolyDataReader.txx
  • itkVTKPolyDataWriter.h
  • itkVTKPolyDataWriter.txx

Moved to Testing/Code/Algorithms

  • itkQuadEdgeMeshCleanFilterTest.cxx
  • itkQuadEdgeMeshDelaunayConformingFilterTest.cxx
  • itkQuadEdgeMeshGaussianCurvatureTest.cxx
  • itkQuadEdgeMeshLinearParameterizationTest.cxx
  • itkQuadEdgeMeshMaxCurvatureTest.cxx
  • itkQuadEdgeMeshMeanCurvatureTest.cxx
  • itkQuadEdgeMeshMinCurvatureTest.cxx
  • itkQuadEdgeMeshNormalFilterTest.cxx
  • itkQuadEdgeMeshQuadricDecimationTest.cxx
  • itkQuadEdgeMeshSmoothingTest.cxx
  • itkQuadEdgeMeshSquaredEdgeLengthDecimationTest.cxx

Moved to Testing/Code/Common

Here some of the tests are duplicate of itkMesh tests. We have to double check that those stay together (i.e check that common is the right place).

  • itkAutomaticTopologyQuadEdgeMeshSourceTest.cxx
  • itkBinaryMask3DQuadEdgeMeshSourceTest.cxx
  • itkCrossHelperTest.cxx
  • itkDynamicQuadEdgeMeshTest.cxx
  • itkGeometricalQuadEdgeTest1.cxx
  • itkPriorityQueueTest.cxx
  • itkQuadEdgeMeshAddFaceTest1.cxx
  • itkQuadEdgeMeshAddFaceTest2.cxx
  • itkQuadEdgeMeshBasicLayerTest.cxx
  • itkQuadEdgeMeshCellInterfaceTest.cxx
  • itkQuadEdgeMeshCountingCellsTest.cxx
  • itkQuadEdgeMeshDeleteEdgeTest.cxx
  • itkQuadEdgeMeshDeletePointAndReorderIDsTest.cxx
  • itkQuadEdgeMeshEulerOperatorCreateCenterVertexTest.cxx
  • itkQuadEdgeMeshEulerOperatorDeleteCenterVertexTest.cxx
  • itkQuadEdgeMeshEulerOperatorFlipTest.cxx
  • itkQuadEdgeMeshEulerOperatorJoinFacetTest.cxx
  • itkQuadEdgeMeshEulerOperatorJoinVertexTest.cxx
  • itkQuadEdgeMeshEulerOperatorSplitEdgeTest.cxx
  • itkQuadEdgeMeshEulerOperatorSplitFaceTest.cxx
  • itkQuadEdgeMeshEulerOperatorSplitVertexTest.cxx
  • itkQuadEdgeMeshEulerOperatorsTestHelper.h
  • itkQuadEdgeMeshFrontIteratorTest.cxx
  • itkQuadEdgeMeshIteratorTest.cxx
  • itkQuadEdgem_NoPointTest.cxx -> itkQuadEdgeMeshNoPointConstTest.cxx
  • itkQuadEdgeMeshPointTest1.cxx
  • itkQuadEdgeMeshPolygonCellTest.cxx
  • itkQuadEdgeMeshTest1.cxx
  • itkQuadEdgeMeshTest2.cxx
  • itkQuadEdgeMeshTest3.cxx
  • itkQuadEdgeTest1.cxx
  • itkRegularSphereQuadEdgeMeshSourceTest.cxx
  • itkTriangleHelperTest.cxx

Move to Testing/Code/IO

  • itkQuadEdgeMeshScalarDataVTKPolyDataWriterTest1.cxx
  • itkVTKPolyDataIOQuadEdgeMeshTest.cxx
  • itkVTKPolyDataReaderQuadEdgeMeshTest.cxx
  • itkVTKPolyDataReaderTest.cxx
  • itkVTKPolyDataWriterTest.cxx
  • itkVTKPolyDataWriterTest2.cxx

Modified code

  • Code/Common/CMakeLists.txt
  • Code/Review/CMakeLists.txt
  • Testing/Code/Common/CMakeLists.txt
  • Testing/Code/Review/CMakeLists.txt
  • Testing/Code/Review/itkReviewTests.cxx
  • Testing/Code/Review/itkReviewTests2.cxx