Browse Source

fix example/continuous_border: labelled surface might have multiple borders

Fabian Peter Hammerle 5 years ago
parent
commit
05734c5c0b
1 changed files with 19 additions and 19 deletions
  1. 19 19
      examples/continuous_border.ipynb

+ 19 - 19
examples/continuous_border.ipynb

@@ -29,26 +29,22 @@
    "outputs": [],
    "source": [
     "import numpy\n",
-    "from freesurfer_surface import Label, Vertex\n",
+    "from freesurfer_surface import PolygonalChain, Vertex\n",
     "\n",
     "def unit_vector(vector: numpy.array) -> numpy.array:\n",
     "    return vector / numpy.linalg.norm(vector)\n",
     "\n",
-    "def add_border_around_labelled_surface(label: Label, border_length_add_mm: float,\n",
-    "                                       border_height_mm: float, border_width_mm: float):\n",
-    "    border_chain, = surface.find_label_border_polygonal_chains(label)\n",
-    "    print('#{}/{}: {} border segments'.format(label.index, \n",
-    "                                               label.name,\n",
-    "                                               len(border_chain.vertex_indices)))\n",
+    "def add_blocks_along(border_chain: PolygonalChain, length_add_mm: float,\n",
+    "                     height_mm: float, width_mm: float):\n",
     "    for vertex_triplet_indices in border_chain.adjacent_vertex_indices(3):\n",
     "        vertex_triplet_coords = tuple(numpy.array(surface.vertices[idx])\n",
     "                                      for idx in vertex_triplet_indices)\n",
     "        backward_vector = vertex_triplet_coords[0] - vertex_triplet_coords[1]\n",
     "        forward_vector = vertex_triplet_coords[2] - vertex_triplet_coords[1]\n",
     "        forward_vector = unit_vector(forward_vector) \\\n",
-    "                         * (numpy.linalg.norm(forward_vector) + border_length_add_mm)\n",
-    "        upward_vector = unit_vector(numpy.cross(backward_vector, forward_vector)) * border_height_mm / 2\n",
-    "        sideward_vector = unit_vector(numpy.cross(upward_vector, forward_vector)) * border_width_mm / 2\n",
+    "                         * (numpy.linalg.norm(forward_vector) + length_add_mm)\n",
+    "        upward_vector = unit_vector(numpy.cross(backward_vector, forward_vector)) * height_mm / 2\n",
+    "        sideward_vector = unit_vector(numpy.cross(upward_vector, forward_vector)) * width_mm / 2\n",
     "        base_corners = [vertex_triplet_coords[1] + v\n",
     "                                 for v in [-upward_vector -sideward_vector,\n",
     "                                           -upward_vector +sideward_vector,\n",
@@ -74,18 +70,22 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "#17/paracentral: 167 border segments\n",
-      "#22/postcentral: 396 border segments\n",
-      "#24/precentral: 418 border segments\n"
+      "#8: inferiorparietal (borders: 1)\n",
+      "#17: paracentral (borders: 1)\n",
+      "#22: postcentral (borders: 1)\n",
+      "#24: precentral (borders: 1)\n",
+      "#29: superiorparietal (borders: 1)\n"
      ]
     }
    ],
    "source": [
-    "for label in filter(lambda l: 'central' in l.name, surface.annotation.labels.values()):\n",
-    "    add_border_around_labelled_surface(label,\n",
-    "                                       border_length_add_mm=0.2,\n",
-    "                                       border_height_mm=1.5,\n",
-    "                                       border_width_mm=1.0)\n",
+    "for label in filter(lambda l: 'central' in l.name or 'parietal' in l.name,\n",
+    "                    surface.annotation.labels.values()):\n",
+    "    borders = list(surface.find_label_border_polygonal_chains(label))\n",
+    "    print('#{}: {} (borders: {})'.format(label.index, label.name, len(borders)))\n",
+    "    for border in borders:\n",
+    "        add_blocks_along(border, length_add_mm=0.2,\n",
+    "                         height_mm=1.5, width_mm=1.0)\n",
     "            \n",
     "surface.write_triangular('border.lh.pial')"
    ]
@@ -95,7 +95,7 @@
    "metadata": {},
    "source": [
     "```sh\n",
-    "freeview --surface examples/precentral-border.lh.pial:annot=tests/subjects/fabian/label/lh.aparc.annot\n",
+    "freeview --surface examples/border.lh.pial:annot=tests/subjects/fabian/label/lh.aparc.annot\n",
     "```"
    ]
   }