Generation of surfaces from centerlines!!

430 views
Skip to first unread message

Bruno Gouvêa

unread,
Jun 22, 2016, 5:37:50 AM6/22/16
to vmtk-users
Hi vmtk-users,

I'm new to the vmtk, I know that vmtk has methods to computing the centerlines of a surface,
but my problem is the opposite I need to build the surface having centerlines.
I have no images, no stl files, nothing to describe the surface unless their centerlines

My algorithm generates directly centerlines, is an algorithm for the generation of cardiovascular vessels and the output is in direct centerlines.

Does anyone know if there is any way to do this with vmtk?

Sorry for bad english!

Thanks,

Bruno

Attila Pataki

unread,
Jun 23, 2016, 10:08:16 AM6/23/16
to vmtk-users
Hey Bruno,

challenging problem you got there!

I am not aware of a script that could reconstruct a surface, only from its centerlines!

Which information does that algorithm generate to describe/present/represent the centerlines besides the x,y,z coordinate? Because some lines in space are not sufficient!  Take a look at Lucas PhD Thesis and at the papers referenced in http://www.vmtk.org/tutorials/GeometricAnalysis.html to see how centerline  can be describe and how complex it can become. 

Imagine a perfect cylinder with a radius of 3 mm and one with a radius 3000 mm  and the same height. The centerline, or in this case the central ax would look totally identical! 
You would need a lot more information to describe the relation of the centerline and its corresponding surface.

Vascular structures have different forms. For instance: distances between an arbitrary point on the centerlines and the points of the vessel walls can vary a lot, even if those points are in the same plane...

How does your algorithm generate those centerlines? What does it take as input? Is that a self written algorithm?


Regards,
Attila Pataki

Bruno Gouvêa

unread,
Jun 23, 2016, 5:27:06 PM6/23/16
to vmtk-users
Hi Attila Pataki,

Many thanks for the reply.
In fact the algorithm was written by a professor of mine.

It does not describe a real structure of a patient, it is not based on real images. It generates a generic structure vessels. The algorithm output is in certerlines with the radius of each segment.

I have algorithm for electrical activity simulation in heart tissues and my goal is to add this vessel structure in the tissue.

In paraview I can visualize the structure and generating tubes based on the radius. The attached figure shows it.

But the problem is that in paraview the surface is not smooth, and has problems of continuity especially in bifurcations, so I can not generate a correct mesh using this structure generated in paraview.

I'm trying to find some way to generate these tubes, to generate the structure smoothly and without problems at junctions. 

So far only found complex solutions in articles described mathematically and pseudocode, without naming tools and known methods. And redo these solutions in hand would give me a huge job.

Thanks
Regards,

Bruno
Cube_tree_1000_vessels.png

Wu

unread,
Jun 23, 2016, 9:26:01 PM6/23/16
to vmtk-users
Hi Bruno,
 
An algorithm  generating vascular surface from centerline is described in :
 
Curvature-dependent surface visualization of vascular structures. Computerized Medical Imaging and Graphics. 2010, 34(8): 651-658. http://dx.doi.org/10.1016/j.compmedimag.2010.07.006, 
 
The algorithm can yield smooth surface especially at joint branchings.
 

Wu
2016-06-24
 
发件人: Bruno Gouvêa
发送时间: 2016-06-24 05:27
收件人: vmtk-users
抄送: 
主题: [vmtk-users] Re: Generation of surfaces from centerlines!!
 
--
You received this message because you are subscribed to the Google Groups "vmtk-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vmtk-users+...@googlegroups.com.
To post to this group, send email to vmtk-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Attila Pataki

unread,
Jun 24, 2016, 2:48:06 AM6/24/16
to vmtk-users
Hey Bruno,

Well this is what i tried to explain (obviously i can't explain :)) ): you need a lot more information to generate a surface from centerlines. 
The fact that you have the radius for each segment is ok, but not enough! It is clear that it fails at junctions! Lets take the example of a Y junction: the inlet (artery that transports blood into the junction) has a radius of 1,5 mm, the first outlet 1,8 and the second outlet 1.9mm. They will not fit in a bifurcation! You would need the radius in each point of the centerline and a lot more information. 

The following is an example of the attributes of a centerline (generated with vmtkcenterlineattributes):
X Y Z MaximumInscribedSphereRadius EdgeArray0 EdgeArray1 EdgePCoordArray Abscissas ParallelTransportNormals0 ParallelTransportNormals1 ParallelTransportNormals2
148.117202759 307.154174805 -145.761062622 1.04862066806 29126.0 29126.0 0.0 21.3642416396 0.114394561964 0.982487523368 -0.147078722525
148.116928101 307.154174805 -145.761276245 1.04860775651 28111.0 29126.0 0.984 21.3638936857 0.114394561964 0.982487523368 -0.147078722525
148.100509644 307.154541016 -145.774139404 1.04781369632 28111.0 28111.0 0.0 21.3430331798 0.128508712507 0.982330345426 -0.136061027719
147.973602295 307.155212402 -145.893783569 1.04335955889 26353.0 26353.0 0.0 21.168618008 0.131248949264 0.982291621869 -0.133704461123
147.915481567 307.147338867 -145.951980591 1.03680567838 25993.0 25993.0 0.0 21.0859929221 0.0654199420032 0.978085182196 -0.197660333797
147.865707397 307.142883301 -145.997512817 1.03539726003 24986.0 24986.0 0.0 21.0183874214 0.0801857140517 0.97973848181 -0.183528631342
147.815093994 307.144165039 -146.045883179 1.03309666315 29211.0 29209.0 0.004 20.9483656298 0.143595425671 0.98180715593 -0.124237926136
147.796401978 307.144927979 -146.063919067 1.03301420689 22628.0 23800.0 0.004 20.9223797328 0.152078792841 0.981526769145 -0.116091525188
147.737075806 307.15020752 -146.116699219 1.03575914417 23348.0 25576.0 0.856 20.8427982488 0.173142869699 0.980150562682 -0.0965733977172
147.701477051 307.150939941 -146.144317627 1.03605409474 23583.0 23348.0 0.272 20.7977362441 0.12571997975 0.982701499582 -0.135986210373
147.6824646 307.153320312 -146.16293335 1.03450109682 25718.0 23583.0 0.72 20.7710213682 0.195757633978 0.977787707038 -0.074900925933
147.591033936 307.158447266 -146.249771118 1.02916957383 25880.0 25973.0 0.648 20.6448205361 0.159426496797 0.981069481752 -0.109935727103

and the next example is from the sections of a centerline:
X Y Z MaximumInscribedSphereRadius EdgeArray0 EdgeArray1 EdgePCoordArray CenterlineSectionArea CenterlineSectionMinSize CenterlineSectionMaxSize CenterlineSectionShape CenterlineSectionClosed
139.859222412 297.687133789 -142.790161133 0.887666739052 48230.0 48230.0 0.0 2.9076827656 1.80026243512 2.10759427866 0.854178839514 1.0
139.859115601 297.687194824 -142.790176392 0.887679528737 48276.0 48230.0 0.996 2.89695718371 1.79829883702 2.1045820841 0.854468376695 1.0
139.831222534 297.698791504 -142.793212891 0.890864160238 48276.0 48276.0 0.0 2.89238111856 1.80617720777 2.10349870175 0.858653825772 1.0
139.789505005 297.723205566 -142.796508789 0.891709556729 47064.0 47064.0 0.0 2.89534924322 1.80834429287 2.10089293384 0.860750333225 1.0
139.605819702 297.80456543 -142.805297852 0.893452291585 48408.0 48408.0 0.0 2.92503051524 1.8797126984 2.0494071118 0.917198289973 1.0
139.586227417 297.817138672 -142.807189941 0.89353884944 48392.0 48389.0 0.312 2.93398638933 1.88595366689 2.05247617853 0.918867505807 1.0
139.539825439 297.846221924 -142.811065674 0.893626130935 48148.0 48389.0 0.956 2.91171212465 1.8277909596 2.06795911572 0.883862231948 1.0
139.357086182 297.935699463 -142.805908203 0.895218754107 48386.0 48386.0 0.0 2.91698290249 1.81727457809 2.02200074696 0.898750695725 1.0
139.326980591 297.956848145 -142.801559448 0.895011525003 36613.0 36613.0 0.0 2.91766880962 1.82533310074 2.02236059466 0.902575488055 1.0
139.117599487 298.074310303 -142.780960083 0.887988503094 48216.0 48216.0 0.0 2.91645703862 1.8027209863 2.05324308089 0.877987123433 1.0
139.009521484 298.13192749 -142.77204895 0.882916166322 46719.0 46719.0 0.0 2.9249921856 1.78972441906 2.04748906301 0.87410694953 1.0
138.84703064 298.230224609 -142.758499146 0.891313602492 47097.0 44916.0 0.084 2.95309188071 1.83388907954 2.02216416104 0.906894264507 1.0
138.843902588 298.232269287 -142.758529663 0.891671629229 46388.0 47097.0 0.98 2.96710238544 1.84815960953 2.05183024521 0.900737092574 1.0
138.785705566 298.278320312 -142.758209229 0.896978911757 46388.0 46816.0 0.844 2.98874475788 1.80776210541 2.05464036294 0.879843566796 1.0

However the case, i agree that doing it manually is  a titanic work, but given the circumstances, if i would have to decide then I would go for the complex mathematical solution with the pseudo code! 
Or, i would get a data volume containing the angiography ( it is important that it is a angiography, as this is the most suited way to represent the vascular structures ) of a thorax, segment the structure of interest and add that to the model. 

Best regards,
Attila Pataki



Bruno Gouvêa

unread,
Jun 27, 2016, 5:48:34 AM6/27/16
to vmtk-users
Wu and Attila thanks for your answers.

Wu I managed to access your article, great job.

I think I found a way to do what I need, as this structure I need is not a real structure, is a generic tree, I don't need anything too perfect, I just need a way to generate a mesh with these vessels , small imperfections or not to get too smooth is not big problem.

I'm solving manually in CUBIT, I will solve the problem for a simple example with only a few vessels.
Solving simple example then I can create a scrip in python to automate the process and solve for larger trees.

At the moment I think that's what I need. In the future I'll probably refine the solution to be smoothed and your article (Wu) will be very useful.
Once again thank you both.

Best Regards,

Bruno
Reply all
Reply to author
Forward
0 new messages