Efficient N-Dimensional surface estimation using Crofton formula and run-length encoding
INRA
| Please use this identifier to cite or link to this publication: http://hdl.handle.net/10380/3342 |
Published in The Insight Journal - 2012 January-June.
Submitted by Gaetan Lehmann on 02-21-2012.
Unlike the measure of the area in 2D or of the volume in 3D, the perimeter and the surface are not easily measurable in a discretized image.
In this article we describe a method based on the Crofton formula to measure those two parameters in a discritized image. The accuracy of the method is discussed and tested on several known objects. An algorithm based on the run-length encoding of binary objects is presented and compared to other approaches.
An implementation is provided and integrated in the LabelObject/LabelMap framework contributed earlier by the authors.
In this article we describe a method based on the Crofton formula to measure those two parameters in a discritized image. The accuracy of the method is discussed and tested on several known objects. An algorithm based on the run-length encoding of binary objects is presented and compared to other approaches.
An implementation is provided and integrated in the LabelObject/LabelMap framework contributed earlier by the authors.
Code
Reviews
IJ to the rescue, again!
by Nick Tustison on 2012-03-09 08:55:32 for revision #2 



expertise: 3 sensitivity: 5
Summary:
I was about to piece together some VTK code to estimate surface area when I stumbed across this contribution from Gaetan where he presents a method for estimating the surface area of digitized binary objects.
Evidence:Comparisons are made with isosurface reconstruction.
Open Science:of course.
Reproducibility:I saved the classes in my own repository and compiled it in code that calculates other label geometry measures.
Use of Open Source Software:Yes.
Open source Contributions:Definitely.
Code Quality :It's of the usual high quality we've come to expect from Gaetan.
Quality of the data :NA
Interest:Yes, I would definitely recommend it for inclusion in the main repository.
Quick Comments
Comment by Toni Sdga
I got the following error, when i tried to compile:
what am i doing wrong?
check.cxx(210) : error C2039: 'PointIdentifierContainerType' : is not a member of 'itk::CellInterface'
1> with
1> [
1> TPixelType=double,
1> TCellTraits=itk::CellTraitsInfo<3,float,float,itk::DefaultStaticMeshTraits::PointIdentifier,itk::DefaultStaticMeshTraits::CellIdentifier,itk::DefaultStaticMeshTraits::CellFeatureIdentifier,itk::Point,itk::VectorContainer::PointIdentifier,itk::Point>,itk::DefaultStaticMeshTraits::UsingCellsContainer>
1> ]
1>..check.cxx(210) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>..check.cxx(210) : error C2143: syntax error : missing ';' before '&'
1>..check.cxx(210) : error C2065: 'pids' : undeclared identifier
1>..check.cxx(210) : error C2039: 'GetPointIdsContainer' : is not a member of 'itk::CellInterface'
1> with
1> [
1> TPixelType=double,
1> TCellTraits=itk::CellTraitsInfo<3,float,float,itk::DefaultStaticMeshTraits::PointIdentifier,itk::DefaultStaticMeshTraits::CellIdentifier,itk::DefaultStaticMeshTraits::CellFeatureIdentifier,itk::Point,itk::VectorContainer::PointIdentifier,itk::Point>,itk::DefaultStaticMeshTraits::UsingCellsContainer>
1> ]
1>..check.cxx(211) : error C2065: 'pids' : undeclared identifier
1>..check.cxx(211) : error C2660: 'itk::PointSet::GetPoint' : function does not take 1 arguments
1> with
1> [
1> TPixelType=double,
1> VDimension=3,
1> TMeshTraits=itk::DefaultStaticMeshTraits
1> ]
1>..check.cxx(212) : error C2065: 'pids' : undeclared identifier
1>..check.cxx(212) : error C2660: 'itk::PointSet::GetPoint' : function does not take 1 arguments
1> with
1> [
1> TPixelType=double,
1> VDimension=3,
1> TMeshTraits=itk::DefaultStaticMeshTraits
1> ]
1>..check.cxx(213) : error C2065: 'pids' : undeclared identifier
1>..check.cxx(213) : error C2660: 'itk::PointSet::GetPoint' : function does not take 1 arguments
1> with
1> [
1> TPixelType=double,
1> VDimension=3,
1> TMeshTraits=itk::DefaultStaticMeshTraits
1> ]
I got the following error, when i tried to compile:
what am i doing wrong?
check.cxx(210) : error C2039: 'PointIdentifierContainerType' : is not a member of 'itk::CellInterface
1> with
1> [
1> TPixelType=double,
1> TCellTraits=itk::CellTraitsInfo<3,float,float,itk::DefaultStaticMeshTraits
1> ]
1>..check.cxx(210) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>..check.cxx(210) : error C2143: syntax error : missing ';' before '&'
1>..check.cxx(210) : error C2065: 'pids' : undeclared identifier
1>..check.cxx(210) : error C2039: 'GetPointIdsContainer' : is not a member of 'itk::CellInterface
1> with
1> [
1> TPixelType=double,
1> TCellTraits=itk::CellTraitsInfo<3,float,float,itk::DefaultStaticMeshTraits
1> ]
1>..check.cxx(211) : error C2065: 'pids' : undeclared identifier
1>..check.cxx(211) : error C2660: 'itk::PointSet
1> with
1> [
1> TPixelType=double,
1> VDimension=3,
1> TMeshTraits=itk::DefaultStaticMeshTraits
1> ]
1>..check.cxx(212) : error C2065: 'pids' : undeclared identifier
1>..check.cxx(212) : error C2660: 'itk::PointSet
1> with
1> [
1> TPixelType=double,
1> VDimension=3,
1> TMeshTraits=itk::DefaultStaticMeshTraits
1> ]
1>..check.cxx(213) : error C2065: 'pids' : undeclared identifier
1>..check.cxx(213) : error C2660: 'itk::PointSet
1> with
1> [
1> TPixelType=double,
1> VDimension=3,
1> TMeshTraits=itk::DefaultStaticMeshTraits
1> ]
Resources
| Download Package | |
| Download Paper, View Paper | |
| Download Source code | |
| Author repository | |
| Github | |
Statistics more
| Global rating: | ![]() ![]() ![]() ![]()
|
| Review rating: | ![]() ![]() ![]() ![]() [review]
|
| Code rating: | |
| Paper Quality: |
|
| 2 comments | |
Information more
| Categories: | Data Representation, Filtering |
| Keywords: | Crofton, RLE, Perimeter, Surface, |
| Toolkit: | ITK |
| Export citation: | |
Share
Associated Publications
| Boolean Operations on Surfaces for VTK | ||
View license
Loading license...
Send a message to the author


on perf3D.cxx that is...
the line where the error comes is:
const MeshType::CellType::PointIdentifierContainerType & pids = it.Value()->GetPointIdsContainer();