Example h4: Geometric modelling of human circulatory system

Major vessels of human circulatory system

This example shows a geometric model of the main vessels of the human circulatory system. Anatomical sections of a male specimen (visible human data) published by the USA National Library of Medicine under the visible human project were used to extract the data points(nodes) of the main vessels.There are 1871 anatomical sections available at 1.0 mm intervals in this database. These are full colour images of 2048 X 1216 pixels with a resolution of 0.33 mm/pixels in both directions. This gives a physical size of an image to be 675.84 x 401.28 mm.

The images have been linearly transformed using the three reference "markers", as the outline of the body of the specimen did not align properly when images were staked in the x-y plane along the z axis going through the centre of each image. Digitising data points on an image is described in example as (Digitising a pig torso: building a mesh over a CT image). To develop this geometric model, the above mentioned images at 5 - 25 mm intervals were used. Here only a few images are shown for illustrative purposes. While digitising the images, information of radii of various vessel groups was also gathered and included in the exnode and exelem files as a separate field. Also digitised were the heart, liver, kidneys and the brain. Initially, a network consisting of linear elements was created. Then both the exnode and exelem files were modified to accommodate for the derivative information. Further, "smoothing" command was used to update the nodal derivatives. This command computes the derivative by taking the average slope from nodes on either sides of a given node.


The comfile run by this example is as follows:

$w=490;                        # width of the graphical window
$h=945;                        # height of the graphical window

# ----------------------- Reading the images in -----------------------

# The information about different vessel groups are defined under different group names in exnode and exelem files.

@number=(250,500,750,1000,1250,1500);

foreach $number (@number)
  {
   if ($number < 1000)
     {
      gfx read nodes example pslice0$number; 
      gfx read elements example slice0$number;
      gfx create texture $number image example $number.jpg height  401.28 width  675.84;
      gfx create material $number texture $number;
      gfx modify g_element slice0$number surfaces select_on material $number texture_coordinates texture selected_material default_selected render_shaded;
      gfx modify g_element slice0$number lines select_on invisible material default selected_material default_selected;
     }
   else
    {
     gfx read nodes example pslice$number; 
     gfx read elements example slice$number;
     gfx create texture $number image example $number.jpg height  401.28 width  675.84;
     gfx create material $number texture $number;
     gfx modify g_element slice$number surfaces select_on material $number texture_coordinates texture selected_material default_selected render_shaded;
     gfx modify g_element slice$number lines select_on invisible material default selected_material default_selected;
    }
  }

# ---------- Creation of graphical window of appropraite size ---------

gfx create window 1;
gfx modify window 1 layout width $w height $h;
gfx modify window 1 view interest_point -5.04127 7.23775 1010.19;
gfx modify window 1 view eye_point 2432.16 -3048.53 2407.23;
gfx modify window 1 view up_vector -0.207985 0.264624 0.941656;
gfx modify window 1 view view_angle 16.7443;

# --------------- Reading the arteries of the upper body --------------

gfx create material a_colour ambient 1 0.1 0.1 diffuse 1 0.1 0.1;

gfx read nodes example up_artery;
gfx read elements example up_artery;

@vessel_group=("asc_aorta","brachio_trunk","r_com_car_a","l_com_car_a","r_subcla_a","l_subcla_a","r_brachial_a","l_brachial_a",);

foreach $vessel_group (@vessel_group)
  {
   gfx modify g_element $vessel_group cylinders radius_scalar bore select_on material a_colour selected_material default_selected;
   gfx modify g_element $vessel_group lines select_on invisible material default selected_material default_selected;
   gfx modify g_element $vessel_group general circle_discretization 12;
  }

# --------------- Reading the arteries of the lower body --------------

gfx read nodes example down_artery;
gfx read elements example down_artery;

@vessel_group=("des_aorta","r_com_ili_a","l_com_ili_a","r_ext_ili_a","l_ext_ili_a","r_int_ili_a","l_int_ili_a","r_fem_a","l_fem_a","r_pro_fem_a","l_pro_fem_a","r_popl_a","l_popl_a","r_renal_a","l_renal_a");

foreach $vessel_group (@vessel_group)
  {
   gfx modify g_element $vessel_group cylinders radius_scalar bore select_on material a_colour selected_material default_selected;
   gfx modify g_element $vessel_group lines select_on invisible material default selected_material default_selected;
   gfx modify g_element $vessel_group general circle_discretization 12;
  }

# ---------------- Reading the veins of the upper body ----------------

gfx create material v_colour ambient 0.1 0.1 1 diffuse 0.1 0.1 1;

gfx read nodes example up_vein;
gfx read elements example up_vein;

@vessel_group=("sup_v_c","r_brachio_v","l_brachio_v","r_int_jug_v","l_int_jug_v","r_subcla_v","l_subcla_v","r_basilic_v","l_basilic_v","r_cephalic_v","l_cephalic_v");

foreach $vessel_group (@vessel_group)
  {
   gfx modify g_element $vessel_group cylinders radius_scalar bore select_on material v_colour selected_material default_selected;
   gfx modify g_element $vessel_group lines select_on invisible material default selected_material default_selected;
   gfx modify g_element $vessel_group general circle_discretization 12;
  }

# ---------------- Reading the veins of the lower body ----------------

gfx read nodes example down_vein;
gfx read elements example down_vein;

@vessel_group=("inf_v_c","r_com_ili_v","l_com_ili_v","r_ext_ili_v","l_ext_ili_v","r_int_ili_v","l_int_ili_v","r_fem_v","r_fem_v","l_fem_v","r_pro_fem_v","l_pro_fem_v","r_popl_v","l_popl_v","r_g_saph_v","l_g_saph_v","r_renal_v","l_renal_v");

foreach $vessel_group (@vessel_group)
  {
   gfx modify g_element $vessel_group cylinders radius_scalar bore select_on material v_colour selected_material default_selected;
   gfx modify g_element $vessel_group lines select_on invisible material default selected_material default_selected;
   gfx modify g_element $vessel_group general circle_discretization 12;
  }

# ---------------------- Reading the heart data -----------------------

gfx create material heart ambient 0 0 0 diffuse 0.79 0.21 0.15 emission 0.39 0 0.0 specular 0.03 0 0;
gfx create material heart_line ambient 0 0 0 diffuse 0 0 0 emission 0.39 0 0.0 specular 0.03 0 0;

gfx read nodes example heart;
gfx read elements example heart;
gfx modify g_element heart surfaces select_on material heart selected_material default_selected;    
gfx modify g_element heart lines select_on material heart_line selected_material default_selected;

# ---------------------- Reading the kidney data ----------------------

gfx create material kidney ambient 0.79 0 0 diffuse 0.68 0.21 0.17 emission 0 0 0.05 specular 0.43 0.08 0.16 alpha 1 shininess 0.69;
gfx create material kidney_line ambient 0 0 0 diffuse 0 0 0;

gfx read nodes example kidney;
gfx read elements example kidney;
gfx modify g_element kidney surfaces select_on material kidney selected_material default_selected;    
gfx modify g_element kidney lines select_on material kidney_line selected_material default_selected;

# ---------------------- Reading the liver data -----------------------

gfx create material liver ambient 0.34 0 0 diffuse 0.42 0 0 emission 0.16 0 0 specular 0 0 0 alpha 1 shininess 0.06;
gfx create material liver_line ambient 0 0 0 diffuse 0 0 0;

gfx read nodes example liver;
gfx read elements example liver;
gfx modify g_element liver surfaces select_on material liver selected_material default_selected;    
gfx modify g_element liver lines select_on material liver_line selected_material default_selected;

# ---------------------- Reading the brain data -----------------------

gfx create material brain ambient 1 0.29 0.11 diffuse 0.63 0.58 0.34 emission 0.16 0.11 0.13 specular 0 0 0 alpha 1 shininess 0.0;
gfx create material brain_line ambient 0 0 0 diffuse 0 0 0;

gfx read nodes example brain;
gfx read elements example brain;
gfx modify g_element brain surfaces select_on material brain selected_material default_selected;    
gfx modify g_element brain lines select_on material brain_line selected_material default_selected;

# ------------ Reading the surface mesh of the entire body ------------

gfx create material skin ambient 1 1 0 diffuse 1 1 1 emission 0.18 0 0 alpha 0.3;

gfx read nodes example surface;
gfx read elements example surface;
gfx modify g_element surface lines select_on invisible;
gfx modify g_element surface surfaces select_on material skin render_shaded;




Files used by this example are:

Name                Modified     Size

example_h4.com 08-Oct-2001 7.1k 1000.jpg 05-Oct-2001 76k 1250.jpg 05-Oct-2001 61k 1500.jpg 05-Oct-2001 54k 250.jpg 05-Oct-2001 67k 500.jpg 05-Oct-2001 87k 750.jpg 05-Oct-2001 85k brain.exelem 05-Oct-2001 106k brain.exnode 05-Oct-2001 23k down_artery.exelem 05-Oct-2001 25k down_artery.exnode 05-Oct-2001 19k down_vein.exelem 05-Oct-2001 30k down_vein.exnode 05-Oct-2001 22k heart.exelem 05-Oct-2001 59k heart.exnode 05-Oct-2001 28k kidney.exelem 05-Oct-2001 106k kidney.exnode 05-Oct-2001 48k liver.exelem 05-Oct-2001 104k liver.exnode 05-Oct-2001 28k pslice0250.exnode 05-Oct-2001 972 pslice0500.exnode 05-Oct-2001 971 pslice0750.exnode 05-Oct-2001 971 pslice1000.exnode 05-Oct-2001 971 pslice1250.exnode 05-Oct-2001 971 pslice1500.exnode 05-Oct-2001 971 slice0250.exelem 05-Oct-2001 2.2k slice0500.exelem 05-Oct-2001 2.2k slice0750.exelem 05-Oct-2001 2.2k slice1000.exelem 05-Oct-2001 2.2k slice1250.exelem 05-Oct-2001 2.2k slice1500.exelem 05-Oct-2001 2.2k surface.exelem 05-Oct-2001 491k surface.exnode 05-Oct-2001 43k up_artery.exelem 05-Oct-2001 13k up_artery.exnode 05-Oct-2001 10k up_vein.exelem 05-Oct-2001 18k up_vein.exnode 05-Oct-2001 13k

Download the entire example:

Name                  Modified     Size

examples_h_h4.tar.gz 19-Aug-2006 1.3M

Html last generated: Sun Mar 6 05:51:37 2016

Input last modified: Mon Oct 8 09:57:08 2001


CMISS Help / Examples / h / h4