[Insight-developers] Join vertex on QEMeshes

Alexandre GOUAILLARD Alexandre_Gouaillard at hms.harvard.edu
Wed Jul 2 19:25:48 EDT 2008


Hi thomas,

I wrote a little code that check this problem, and commit'ed it to ITK.
ItkQuadEdgem_NoPointTest

I do not have any problem on my mac, both debug and release.

What is your configuration? Win + cygwin + .... ?

Let's hope the dashboard catch the problem for us.

Alex.



On 6/26/08 12:10 PM, "Thomas Boettger" <tboettger at googlemail.com> wrote:

> Alex,
> 
> in release mode everything seems to be fine, but in debug I am getting
> the 0 for nopoint...
> 
> Find the output below.
> 
> 
>   Best,
> 
>     Thomas
> 
> $ /cygdrive/d/devel/QEMeshTests/bin/release/JoinVertexTest.exe smallMesh.vtk
> ou
> tput.vtk 0 1
> QETriangleMeshType::m_NoPoint: 1410065407
> QETriangleMeshType::m_NoFace: 1410065407
> # points before:        16
> # edges before: 42
> # faces before: 28
> Deleting point: 0...done.
> # points after: 15
> # edges after:  39
> # faces after:  26
> 82 GenerateData
> 
> boetthw3 at EH40OO2C /cygdrive/d/Images/MeshCreation
> $ /cygdrive/d/devel/QEMeshTests/bin/debug/JoinVertexTest.exe smallMesh.vtk
> outp
> ut.vtk 0 1
> QETriangleMeshType::m_NoPoint: 0
> QETriangleMeshType::m_NoFace: 0
> # points before:        16
> # edges before: 42
> # faces before: 28
> Deleting point: 0...done.
> # points after: 16
> # edges after:  42
> # faces after:  28
> 82 GenerateData
> 
> On Thu, Jun 26, 2008 at 2:35 PM, Alexandre GOUAILLARD
> <Alexandre_Gouaillard at hms.harvard.edu> wrote:
>> Hi thomas,
>> 
>> M_NoPoint is defined as vcl_numeric_limits< OriginRefType >::max()
>> In itkGeometricalQuadEdge.txx
>> It should not be 0.
>> 
>> I never met this case, I will to make a code that deletes the cell #0
>> (should always be an edge BTW) and see what happen.
>> 
>> Thanks,
>> 
>> Alex.
>> 
>> On 6/26/08 8:08 AM, "Thomas Boettger" <tboettger at googlemail.com> wrote:
>> 
>>> Alex,
>>> 
>>> one more thing:
>>> 
>>> I found the following lines of code which do worry me a little bit:
>>> 
>>> itkQuadEdgeMesh::LightWeightDeleteEdge(...) (around Line 900)
>>> 
>>>   CellIdentifier LineIdent = e->GetIdent( );
>>>   if( LineIdent != m_NoPoint )
>>>     {
>>>     EdgeCellType* edgeCell = dynamic_cast< EdgeCellType* >(
>>> this->GetCells( )->GetElement( LineIdent ) );
>>>     this->LightWeightDeleteEdge( edgeCell );
>>>     }
>>>   else
>>>     {
>>>     itkDebugMacro( "Edge Not found. LineIdent not set?" );
>>>     return;
>>>     }
>>> 
>>> Here you compare the LineIdentifier to m_NoPoint. In my version
>>> m_NoPoint is defined as 0. For the very first edge
>>> FindFirstUnusedCellIndex() will return 0 as well.
>>> 
>>> Then I cannot delete the edge added first. This will of course stop
>>> the JoinVertex function from working for this first edge. The edge is
>>> not deleted and then the point is not isolated and cannot be deleted.
>>> 
>>> Is this problem know already? May be you can use
>>> 
>>>   NumericTraits<unsigned long>::max()
>>> 
>>> instead ?
>>> 
>>> In my own decimation I unfortunately always tried to join the vertices
>>> of this first edge and was wondering why the point count was not
>>> decreasing.
>>> 
>>> 
>>>   Best regards,
>>> 
>>>     Thomas
>>> 
>>> 
>>> 
>>> On Thu, Jun 26, 2008 at 11:07 AM, Thomas Boettger
>>> <tboettger at googlemail.com> wrote:
>>>> Hi Alex,
>>>> 
>>>> thanks for the quick response. I will test this. The decimation
>>>> framework sounds interesting. I would be great if I would be able to
>>>> implement my own decimation criteria based on you new code.
>>>> 
>>>> Did you also discuss changes for the SimplexMesh classes. I think the
>>>> mesh class could could almost be discarded, but I guess ITK wants to
>>>> keep it for backwards compatibility. The deformation filter itself is
>>>> rather simple as long as you can access each points three neighbors
>>>> (which is quite simple with the QEmeshes we should be fine. One open
>>>> issue is where we should store all the computed values like the
>>>> barycentric coordinates, normals and so on. This currently is quite
>>>> messy in the old code.
>>>> 
>>>> I also never really used the contributed classes as I continued
>>>> developing and changing loads of small things in the deformable model
>>>> itself, e.g. multi threading, global contraints based on ICP (by
>>>> incorporating vtk classes), different external force computations and
>>>> more...
>>>> 
>>>> So I cannot really tell what the best way would be for future
>>>> directions. But I am willing to discuss, help and maybe contribute if
>>>> I can be of any help.
>>>> 
>>>> 
>>>>  Best,
>>>> 
>>>>    Thomas
>>>> 
>>>> 
>>>> On Wed, Jun 25, 2008 at 10:55 PM, Alexandre GOUAILLARD
>>>> <Alexandre_Gouaillard at hms.harvard.edu> wrote:
>>>>> Hi thomas.
>>>>> 
>>>>> Problem solved.
>>>>> It was indeed because of the points IDs.
>>>>> I added a method to QEMesh that you should call before you write the mesh"
>>>>> SqueezePointsIds()
>>>>> 
>>>>> I added this one line in your code and it works fine (it was thus a
>>>>> vizualization problem.
>>>>> 
>>>>> BTW we have a decimation code ready, and we are going to put it in ITK
>>>>> beofre the end of the week. It's a complete framework, where you can plug
>>>>> the stop criterion and so on.
>>>>> We have a dedicated priorty queue for mesh decimation, a decimation engine
>>>>> (based on JoinVErtex, indeed), an edgelength criterion, and we are
>>>>> polishing
>>>>> a Quadratic criterion right now.
>>>>> 
>>>>> Alex.
>>>>> 
>>>>> 
>>>>> On 6/25/08 12:01 PM, "Thomas Boettger" <tboettger at googlemail.com> wrote:
>>>>> 
>>>>>> ---------- Forwarded message ----------
>>>>>> From: Thomas Boettger <tboettger at googlemail.com>
>>>>>> Date: Wed, Jun 25, 2008 at 5:59 PM
>>>>>> Subject: Join vertex on QEMeshes
>>>>>> To: alex Gouaillard <AGouaillard at slb.com>, baghdadi at sickkids.ca
>>>>>> 
>>>>>> 
>>>>>> Hi Alex and Leila,
>>>>>> 
>>>>>> I started experimenting with the QEMesh classes (ITK 3.6.0).
>>>>>> 
>>>>>> And ran into the following problem:
>>>>>> 
>>>>>> 1. I load a vtk mesh
>>>>>> 2. Call JoinVertexFunction for an arbitrary edge (look through the
>>>>>> input vtk file in a text editor and choose one line.
>>>>>> 3. Store the mesh
>>>>>> 
>>>>>> I expected to see a correct output mesh (with one point less and all
>>>>>> edges and faces correct), but when I load both, input and result to
>>>>>> paraview the result looks corrupted.
>>>>>> 
>>>>>> You can use the source code in the attached zip file to reproduce it.
>>>>>> Just ignore all lines of code besides the main function...
>>>>>> 
>>>>>> I also attach you the mesh I used for the testing (smallMesh.vtk) and
>>>>>> the result (result.vtk).
>>>>>> 
>>>>>> cmd line inputs were:
>>>>>> $ /cygdrive/d/devel/QEMeshTests/bin/release/JoinVertexTest.exe
>>>>>> smallMesh.vtk result.vtk 0 3
>>>>>> 
>>>>>> I am not sure what is going wrong. Maybe I did not understand the
>>>>>> JoinVertex operator and need to take care of face corrections myself
>>>>>> after deleting the point?
>>>>>> 
>>>>>> Help is welcome...
>>>>>> 
>>>>>> 
>>>>>>  Best regards,
>>>>>> 
>>>>>>    Thomas
>>>>> 
>>>>> 
>>>>> 
>>>> 
>> 
>> 
>> 




More information about the Insight-developers mailing list