ItkQuadEdgeMesh: A Discrete Orientable 2-Manifold Data Structure for Image Processing
Gouaillard A., Florez-Valencia L., Boix E.
CREATIS

Please use this identifier to cite or link to this publication: http://hdl.handle.net/1926/306
There is nowadays an increasing need in interaction between discrete surfaces (2-manifolds) and images. More specifically, segmentation and registration of n-dimensional images are taking advantage of a priori geometrical information, most often provided as discrete 2-manifolds.
Most of the publicly available libraries are oriented either toward mesh processing or image processing.
Through a careful study we will show that none of those libraries are complete enough to fullfill image, surface and joint image-surface interaction.
We propose to implement in ITK library a powerful 2-manifold data structure. The choice of ITK was driven by the fact that it provides the best base framework along with a strong n-dimensional image kernel. Based on a Quad-Edge data structure, it has been specifically tailored not only to represent
orientable 2-manifolds (surfaces of real objects) but also ease further processing.
We illustrate the integration of the design into ITK as a native object, enhancing existing algorithms.
We also illustrate the power of the new design for further surface processing.
Data
minus 2 Files (3Mb)
Code
minus Automatic Testing Results by Insight-Journal Dashboard on Mon Sep 11 22:51:22 2006 for revision #4
starstarstarstarstar expertise: 5 sensitivity: 4.5
yellow This project passed all of its tests.
Click here for more details.

Go here to access the main testing dashboard.
plus Automatic Testing Results by Insight-Journal Dashboard on Mon Sep 11 21:55:07 2006 for revision #3
starstarstarstarstar expertise: 5 sensitivity: 5
plus Automatic Testing Results by Insight-Journal Dashboard on Wed Sep 13 11:09:19 2006 for revision #2
starstarstarstarstar expertise: 5 sensitivity: 5
plus Automatic Testing Results by Insight-Journal Dashboard on Mon Sep 11 21:12:28 2006 for revision #1
starstarstarstarstar expertise: 5 sensitivity: 5

Reviews
minus New mesh data structure, specialized for 2D surfaces embedded in 3D, current itkMesh filters may need to be rewritten. by Sylvain Jaume on 01-08-2007 for revision #4
starstarstarstarstar expertise: 3 sensitivity: 4.5
yellow

Summary:
The authors present an ITK implementation of the Quad-Edge data structure proposed by Guilbas and Stolfi. This new data structure is designed to coexist with the itkMesh structure currently in ITK 3.0. The new classes have the advantage to enforce the two manifold property of surfaces and to access neighbor cells in constant time. Some mesh filters in ITK 3.0 can process the new data structure, other filters cannot and need to be rewritten or have a version specific for Quad-Edge.

Hypothesis:
In the introduction of the paper, alternative mesh data structures are mentioned: the Windge-Edge, the Half-Edge and the Quad-Edge data structures. The authors chose the Quad-Edge data structure over the more commonly used Half-Edge data structure (implemented in CGAL and OpenMesh). It would be interesting to compare the pros and cons of each data structure, and to evaluate their performance for a real-world mesh processing operation.

Evidence:
The paper describes the case of the Simplex Mesh, which is typically built as the dual of a Marching Cubes mesh. Since the new classes encodes the primal-dual relations, building the Simplex Mesh becomes straightforward. The new data structure encodes adjacency information and allows for switching to the dual representation in constant time.

Open Science:
The paper provides two example meshes and the code to compute the shortest path between two arbitrary nodes. A performance measure is also given for the access to neighbors after the modification of the connectivity. It would be interesting to choose a typical filter such as Laplacian smoothing, and to compare the timing in VTK and in itkQE including the construction of the QE data structure.

Reproducibility:
I could reproduce the results presented in the paper without a problem. Both the sample data and the code are provided. The example meshes are in the VTK format and can be read using the ParaView.

Use of Open Source Software:
The code provided use both the VTK and the ITK toolkits. The mesh IO and the visualization are performed with VTK. Some code to convert vtkPolyData and vtkUnstructuredGrid meshes to itkQE for internal processing is also available, although vtkUnstructuredGrid might not be appropriate for two-manifold meshes.

Open Source Contributions:
The authors provide the source code with example data and sample applications under a BSD license. The applications that were used to generate the images in the paper can be found along with the paper. Besides the LaTeX code required to compile the paper is also provided. Hence this contribution is fully Open Source!

Code Quality:
Some variable names do not strictly follow the ITK standards for explicit names. The code style issues need to be fixed before the classes can be integrated into the toolkit. Besides some classes are not described in the paper and their  documentation is missing.

Applicability to other problems:
For examples of medical applications where a mesh data structure is created, the authors might be interested in the following papers published in the Insight Journal: http://hdl.handle.net/1926/50 and http://hdl.handle.net/1926/225.

Suggestions for future work:
It would be interesting to measure the time and memory consumption to convert a regular mesh into a quad-edge data structure. In particular, how the performance for the construction of the quad-edge structure compare to the BuildCellLinks method in ITK?

Requests for additional information from authors:
The caption of the diagrams might give more details about the concepts they illustrate. Besides the definition of the canonical operators might be expanded when they first appear in the paper.

Additional Comments:
For 2D surfaces embedded in 3D, the new data structure proposed in this paper offers a very interesting contribution. For N-dimension meshes, the current ITK mesh data structure must still be used. With the goal of integrating the new data structure into the toolkit, the compatibility of every mesh filter currently in ITK will have to be verified.


Comment by Gregflets Gregflets: beter late than never - happy new year yellow
hi there im a little late but just back off holls, happy new year to yous all
greg
minus New mesh data structure for better integration of surface based image processing methods into ITK by Thomas Boettger on 11-13-2006 for revision #4
starstarstarstarstar expertise: 3 sensitivity: 4.5
yellow

Summary:
The authors present implementation of a new data structure for better integration of surface (mesh) based processing algorithms and easier integration/combination of surface and image processing algorithms as well into ITK. Different toolkits are analyzed and compared to the classes/algorithms currently available in ITK. Weaknesses and strengths are discussed and necessity for a better implementation is explained. Next different approaches for surface representation are given and compared with respect to memory usage and computational efficiency for different mesh operations. It is explained why the authors chose to implement a quad-edge representation both from the surface processing view and the image processing view.

Next the authors explain their implementation in detail and give various examples of new applications and also showing how ITK could benefit from the new implementation. For instance mesh modification as adding/removal of faces could speed-up dramatically as the BuildCellLinks() (traversal over the whole map of cells) would not be required anymore. Furthermore topological operators would directly be available with the new implementation, making new mesh filters like decimation, refinement or multi-resolution algortihms easy to implement. Furthermore the new implementation could unify the currently seperated implementation of the simplex meshes into the same framework naturally. The authors also state that implementation of the already existing simplex mesh deformation filters can be simplified.

A new iterator was implemented and is described in detail. It will extract neighboring edges or faces with respect to an arbitrary metric. Many possible applications are named and some are explained in more detail.

Todays itkMesh only supports image processing. For surface processing one would have to use VTK. All the necessary conversions for going from ITK to VTK and maybe back complicate the use of surface-based image processing algorithms. The here presented datastructure would help to unify both and could greatly simplfy programming in the area of image processing.

Hypothesis:
Provide more efficient and easier to use data structures for surface-based image processing.

Evidence:
In their paper the authors give coding examples showing how to use the new data structures. They also analyze the computational costs for removing cells from a mesh and compared it to ITKs current implementation. And give conrecte numbers for the speed-up. They show ease-to-use their implementation. Looking at the code examples I would say the classes might be a usefule extension.


Open Science:
The authors provide a fully 'Open Science compatible' implementation, an extension of ITKs current mesh classses. The source code is provided and is well documented. They reimplemented many of ITKs mesh relevant tests and examples showing how simple their classes can replace the old ones. Input data (surfaces used for the paper) are provided. Results can simply be reproduced by running the example programs.


Reproducibility:
The work is reproducable. I downloaded the code. It compiled, tests and most of the examples ran straight forward. Switching on FLTK did unfortunately result in a CMake crash (cmake 2.4 patch 3, fltk-1.1.x-r5526, Visual Studio 2003) at my machine. I could only run the VTK and command line examples, but they looked fine. Results seem to be correct.

Maybe the authors could give a short code example (just some code snippets) on how to rework the simplex meshes including mesh deformation. Having this it would be much easier to estimate the effort for reimplementing these parts of ITK.

Although I got it running easily, a short section on how to compile, which versions to use etc. might be good.


Use of Open Source Software:

-


Open Source Contributions:
Throughout the whole contribution one can feel it was designed to be put into ITK from the beginning.

I only tried to run the code and did not implement anything new, but looking at the tests and the examples seems to make it not too difficult to start with. Actually there is more examples on how to use the QEMesh then there is for using the current itkMesh. There are also code snippets in the paper.

 

Code Quality:
Looks ok to me. It might not go with the ITK StyleGuide everywhere.

Applicability to other problems:
There is a number of possible applications most of them dealing with surface processing or image proscessing, e.g. surface-based deformable models or active shape models.


Suggestions for future work:
-

Requests for additional information from authors:
-


Additional Comments:
Concluding I can say that the source code is of good quality. There is only one issue I would like to discuss not only with the authors of the paper but also with other ITK users/developers and maybe the developers of the old mesh classes:

We already have data structures for meshes in ITK. There were alot of flaws in these classes. The authors pointed them out again. Before going through the whole pipeline of putting in the new classes we should re-think the concept to not to forget important features again. From my point of view the implementation presented here looks good. But there might be other developers who might think different and still would not use the new ITK classes for some other reasons or already know about missing features.

Backwards compatibility might be another an issue. Would we have to keep all the old classes, e.g. Simplex Meshes as well? Who would maintain this code or who will rewrite these classes based on the new datastructures?

Also until now using the mesh classes was very complicated. And even though the new approach seems to be much more simple it might still be too difficult for people not familiar with surface representations or surface-based image processing algorithms. The authors should add a section where more basic things about mesh representation, topology changes or time/memory-efficient implementation is explained. This would help to better understand necessity of the whole contribution. I think the authors started one level too high.

Regarding the paper I found a few spelling mistakes. Furthermore sorting of the pages was strange. One figure page was between the bibliography pages.

Figure 10 is hard to read and I would reanmed caption to "... of the itkQE classes and their integration into ITK". I also think you should somehow clarify what each of the colors means and you should put the itkQE namespace into the diagram.

There are a lot of small correctios in the pape I would suggest mostly spelling. I could start correcting this stuff now but wanted to finally send out the general review before.


Comment by Alexandre Gouaillard: answer from the author yellow
hi thomas,

As for the simplex meshes, the topic was discussed during a Tcon. Because of time limitation, we decided to transfer the Datastructure first and the filters after. The new design for simplex mesh is not decided yet. Luis created a wiki page for us all to discuss about it, but I did not have time to address that yet. Nothing will be done without community approval. The backward compatibility is an issue indeed. I can replace all the existing code, including the one in applications, but I/we don't know how users out there have code based on the actual classes. let's see how much improvement we get from the new design first and then we can decide if we want to deprecate anything.

We already communicated about the flwas of the ITK implementation of the Mesh structure. I found at least two major bug, reported them (and they are still here). On the missing feature side, a parallelization system (ghost cells?) should be added quickly if we want to match the feature already existing in VTK and implement double multiresolution frameworks (multires on data end meshes).

You are right, we should add more doc. Actually we did but it's not in the tarball we submitted to IJ. Please refer to my answer to leila for more details.

I might add here that we have strange memory issues. Well, not really issues but memory footprint seems to be larger than expected when comparing itkQEmesh, itkMesh and vtk (VTK is really small in memory especially on 64 bits architechture where itkMesh, using lots of pointers, take a huge penalty). We are currently investigating it under win32 and linux 32/64 bits. We should post some results and maybe some suggestion for the base itkMesh improvement.

don't hesitate to contact me through the usual mailing lists.
minus itkQuadEdgeMesh by Leila Baghdadi on 10-31-2006 for revision #4
starstarstarstarstar expertise: 3 sensitivity: 4.5
yellow

Summary:

itkQuadEdgeMesh is essentially a new data structure which promises various features which currently do not exist in itkMesh. The one very important feature which is mentioned in the paper and also I have come across a few times writing my own research code, is being able to access the adjacent edges and faces of a particular vertex at any instance. This becomes an issue even more in cases where the original mesh is for instance a platonic solid such as icosahedron at which each vertex has 5-6 neighboring vertices.

My understanding of itkQuadMesh set of classes is simply that they are meant to replace itkMesh. From what I know there are many many classes in itk which either use itkMesh as a super class or class its various methods. Even though the authors claim that the switch from itkMesh to itkQuadMesh should be simple and pain free. I am still not convinced unless I actually do the conversion on the itk tree myself.

In short, even though itkQuadMesh promises very many features that I am sure many people including myself will greatly benefit from, I still believe that itkMesh should be kept and must remain mainly unchanged. My recommendation would be for a mechanism at which itkQuadMesh and itkMesh could coexist within itk tree. This will allow the users to determine the right data structure for their specific purpose.

Hypothesis:

(N/A)

Evidence:

The authors provide various reference at which the data structure and its various features are explained in great detail. I believe there is enough evidence given to support and prove the point they are trying to make.

Open Science:

I believe the entire code is provided as open source. There does not seem to be any license associated with the code so I do not believe there will be any problems if it is added to itk tree.

Reproducibility:

I have managed to download the code and built it as part of my itk tree with the changes which are specified by the authors with minor changes.

I find that the paper lacks explaining some concepts including the very basic ones which are simply referred to the references. I believe specially with topics such as this one which are a bit complicated to grasp, some basic concepts must be explained within the paper itself simply to make sure the readers can understand and follow the paper. For instance, on page (5), it is mentioned that Quad-Edge data structure is presented in detail in reference 16 instead of providing a simple explanation within the paper.


Use of Open Source Software:

(N/A)

 

 

Open Source Contributions:

The entire source code is provided along with the contribution. I specifically like the way they have names various directories similar to itk tree structure (i.e., Code/Common) so that the user can simply place the code in the corresponding directory, make the necessary Cmake changes and start building it. Personally, I did not take me long to use the code as I use itk on a regular basis and this is nothing different. However, other people might have a different experience as there is a fair bit of code that needs to be built.


Code Quality:

I looked at various files and they seem to follow the main itk style. Just like any other code contributed to itk, the code needs to be polished. However I am confident that the changes will be minor in this case.

Applicability to other Problems:

As I mentioned before, this data structure will be extremely useful to algorithms which require neighboring faces and edges. Currently, I am writing some brain segmentation code (mouse images) and I think this data structure would be greatly useful to me had it been part of the itk tree.

Suggestions for Future Work:

(N/A)

Requests for Additional Information from Authors:

(N/A)

Additional Comments:

I think this is a great contribution to itk and specifically to open source community.


Comment by Alexandre Gouaillard: answer from author yellow
leila,

itk::Mesh is an n-dimensional datasrtucture, while itkQE::Mesh is restricted to orientable 2-manifolds. itkQE::Mesh should not replace itk::MEsh and the subject has been addressed with luis and others during an october tcon. For most users though (you included) who deals only with surfaces, they could switch directly to itkQE::Mesh. SOme people also use volumic meshes or 4D (volumic + t) meshes. For those, only itk:Mesh can be used for the time being.

The transition between itk::Mesh and itkQE::Mesh is completely transparent (if you are using a surface). We have a test that replaces any itkMesh by an itkQEMesh in the actual Mesh tests without modifying the rest of the pipelines and it works fine. It's far from testing all the features, and we are looking forward to a better coverage, but so far, we cover everything ITK was covering in the first place.

We are aware of the difficulty for a newbie to go into surface processing. This is why we have provided all the designs documents and written walkthrough with code snipet in the documentation (which we removed from the IJ tarball). You can take a look there for the raw txt files, http://www.creatis.insa-lyon.fr/viewcvs/viewcvs.cgi/itkQuadEdgeMesh/Doc/Doxygen/ or send me an e-mail for a tarball of the generated documentation (I'm on insight mailing lists).

Yes, ,indeed, we designed our repository using ITK convention to ease further synchronisation. We are constantly adding new features and we hope to work with ITK to port them to the ITK tree with a frequency that has still to be defined a little bit like they do with GDCM.
Add a new review
Quick Comments


Resources
backyellow
Download Package
Download Paper, View Paper

Statistics more
backyellow
Global rating: starstarstarstarstar
Review rating: starstarstarstarstar [review]
Code rating: starstarstarstarstar
Paper Quality: plus minus

Information more
backyellow
Categories: Data Representation, Mesh
Keywords: Mesh, 2-manifold,
Toolkit: ITK (moved into the sandbox), CMake, VTK
Export citation:

Share
backyellow
Share

Associated Publications more
backyellow
Conformal Flattening ITK Filter

View license
Loading license...

Send a message to the author
main_flat
Powered by Midas