{ "cells": [ { "cell_type": "markdown", "id": "014a72d4", "metadata": {}, "source": [ "# Full-Volume Instance Segmentation\n", "\n", "This tutorial demonstrates the complete **topo** pipeline on a single volume\n", "(no tiling):\n", "\n", "1. Create synthetic instance data\n", "2. Generate diffusion flows\n", "3. Postprocess flows into instance labels\n", "4. Visualize every intermediate step" ] }, { "cell_type": "markdown", "id": "00604f41", "metadata": {}, "source": [ "## 1. Create Synthetic Data\n", "\n", "We generate a small 64x64x64 volume with 4 non-overlapping ellipsoidal\n", "instances of varying sizes and aspect ratios — mimicking organelles like\n", "mitochondria." ] }, { "cell_type": "code", "execution_count": 1, "id": "065b53fa", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:46.745085Z", "iopub.status.busy": "2026-03-17T22:54:46.744801Z", "iopub.status.idle": "2026-03-17T22:54:48.616682Z", "shell.execute_reply": "2026-03-17T22:54:48.615557Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Volume shape: (64, 64, 64)\n", "Instances: 4\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "def make_synthetic_instances(shape=(64, 64, 64), n_instances=4, seed=42):\n", " \"\"\"Create a volume with non-overlapping ellipsoidal instances.\"\"\"\n", " rng = np.random.RandomState(seed)\n", " vol = np.zeros(shape, dtype=np.int32)\n", " coords = np.mgrid[0:shape[0], 0:shape[1], 0:shape[2]].astype(np.float32)\n", "\n", " for inst_id in range(1, n_instances + 1):\n", " # Random center (away from edges)\n", " margin = 10\n", " center = [rng.randint(margin, s - margin) for s in shape]\n", " # Random semi-axes (elongated)\n", " radii = [rng.randint(5, 15) for _ in range(3)]\n", "\n", " # Ellipsoid mask\n", " dist = sum(\n", " ((coords[ax] - center[ax]) / radii[ax]) ** 2\n", " for ax in range(3)\n", " )\n", " mask = dist <= 1.0\n", "\n", " # Only place where empty\n", " mask = mask & (vol == 0)\n", " vol[mask] = inst_id\n", "\n", " return vol\n", "\n", "gt_instances = make_synthetic_instances()\n", "n_inst = len(np.unique(gt_instances[gt_instances > 0]))\n", "print(f\"Volume shape: {gt_instances.shape}\")\n", "print(f\"Instances: {n_inst}\")" ] }, { "cell_type": "code", "execution_count": 2, "id": "a7427935", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:48.618778Z", "iopub.status.busy": "2026-03-17T22:54:48.618470Z", "iopub.status.idle": "2026-03-17T22:54:48.792353Z", "shell.execute_reply": "2026-03-17T22:54:48.791252Z" } }, "outputs": [ { "data": { "image/png": "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ihUlST4+PipdurROnTrl0jbzYy67388ff/yho0ePSpLOnj2bbd3ezkeTmwsXLqhZs2batGlTtm2y+x1mDkUjIyNVunRpHT16VKdPn9aBAwdcznfz5s1q1KiRx/1s374921AnMjJSjRo10tq1azVt2jRNmzZNgYGBiomJUfv27ZWYmMhoHQCAtfj4FQDAWqVKlVK1atWcP3/xxRfO7/v37y9jjAYPHpzrfjL+kfZGxmS42W3LPCLjjz/+yHV/pUuXdn5fvPj/3mvJ6eMkOdWSlzxdlys519xcybXIi/1HR0fr22+/da6eFhISokOHDumjjz5Sy5YtXR5fOXnzzTed3/fs2VPLly/X2rVr1bx5c+f2rJMfZ60va435IS0tLU/2s379emegExYWpqlTp2rNmjV6//33nW08na8nl/uYzulcfHx8tHjxYr322mtq1aqVqlSpor/++ktfffWVBg0apAEDBlzWMQEAuBoQ6gAArNa5c2fn96+99poOHDhwyfvI+o9k9erVndt27dqlI0eOOG/LPI9OxqigzCOGMubhkaSlS5deci1ZZV49avfu3c4RGFlryQ+e/sG+1HP18fnfnxre/mNfWIwxql27tsaOHauvvvpKqampmjNnjqSLtc+fP9/ZNqfz2r9/v/P7cePGqXnz5qpfv77L9suVeSTaJ5984rFNuXLlnAFRqVKldOLECRljXL4uXLigpKSkK65Hcj3frl27qnv37tmOqMnqm2++cX7/888/O1cjCwgIUOXKlV3ONz4+3u08jDFKS0tzW/krM2OMSpUqpSeffFJLlizR3r17dejQIedza968eZd0vgAAXE34+BUAwGr/+te/NGPGDO3bt0+pqamKi4vTk08+qVtvvVWnT5/Odi6PnJQtW1YtW7bU0qVLdebMGXXq1ElPPPGEdu3apQkTJjjbdenSRdLF4MXHx0fp6en67LPP9MwzzygoKMg5P8yVqFixom6//XZ9/fXXOn36tB544AElJibqu+++06xZs654/5eqevXqzu+nT5+uiIgInTx5Uv/5z388ts88+mTr1q2aP3++ypUrpypVqqhKlSr5Xu+l+M9//qPVq1erTZs2qlKlikqWLOmcW0mSzpw54/y+dOnSSklJkXQxuImNjVVISIhuvvlmhYeHOz829O9//1stW7bUtGnT9MMPP1xxjQ8++KC+++47SRfnozl06JDi4uK0f/9+vf322/ryyy/l4+OjLl26aMKECTp58qRatGihxMRElStXTr/++qu2bdumefPm6d133812afmsjh49qqefftpt+/3336/w8HDnzxlLwmfXPqvRo0erYsWKqlKlikaOHOncfvfdd8vX11cxMTGKjo7Wtm3b9Pnnn6t79+66//775evrqz179uibb77RRx995BJ2ZrV//341a9ZMnTp1UlRUlCpWrKiUlBQdPnxYkuvvFQAA6xT0clsAAOS177//3uNy1Vm/XnzxRed9Mi917cmuXbu8XtLcGGO6dOni1ibzEt3ZLWme27LgxhizZs0a4+vr67b/yMhIj/vJjbdLmiclJXm8/5133pnjuWau3RhjYmNj3dpn1Jvd8XJaJt4Tb5Y0zyzzstoZ7UeMGJHt79vHx8esW7fOef+nnnrKrU3Gec+ePdvttoCAAJfrkHHM7H7n2dV+9uxZ06xZs2zrzHD06NEclzTPep08yfw7yO4rKSnJnD9/3uPS5A0aNPB4bpmvfebHcMZXqVKlzPbt253tc1rSPOt5e3pu/fLLLzneNyEhIcfrAADA1YyPXwEArBcVFaUtW7Zo9OjRatSokcqUKaNixYopODhYMTExSkhI0JIlS5zLJHujWrVq2rhxo/r376+qVavK19dXwcHBaty4sT744AO3UTjjxo3T/fffr5IlSyokJETdu3fXmjVr8uT8GjVqpMWLF+u2226Tn5+fwsPD9corr1zS+eSlGTNmqGXLlgoICFD58uU1YMAAl6XLs3r//ffVqlUrtzljrjatW7dWQkKCoqOjVbp0aRUrVkxlypRRixYttGzZMjVo0MDZdtiwYerTp48qV67s9jG1jh07auLEiYqMjFRAQIDi4uK0dOlSRUdHX3GNvr6+WrJkid544w3Vq1dPpUqVUkBAgKpXr+6ygltoaKi+/PJLjRgxQjExMQoMDFSJEiUUGRmpjh076v3339cdd9xxxfVIUrFixfTJJ5+oXbt2CgkJcT4mslvGPLM333xTgwcPVlhYmPz9/dWwYUOtWrVKtWrVcra57bbbtHnzZj3yyCOqVq2a/Pz8FBoaqujoaD3yyCPOFeOyU6ZMGQ0bNkzx8fEKCwuTr6+vAgMDdcstt+jFF1/UuHHjrvgaAABQWBzG5NHsgwAAAAAAACgwjNQBAAAAAACwEKEOAAAAAACAhQh1AAAAAAAALESoAwAAAAAAYCFCHQAAAAAAAAsR6gAAAAAAAFiIUAcAAAAAAMBChDoAAAAAAAAWItQBLsGUKVPkcDi0Z88e57YmTZqoSZMmhVJP37591bx5c+fPe/bskcPh0JQpU3K9b8+ePXXjjTfmX3EF4MiRIypZsqQWL15c2KUAAH3EVYY+AsDVzOFwaPjw4c6fPfUhBeWbb76Rn5+f9u7d69zmbf+1evVqORwOrV69Ov8KLAAPPPCAOnXqVNhlXBZrQ52UlBT1799fNWrUUIkSJVSiRAlFRUWpX79+2rJli6SLD0SHw5HrV+YnU1Y9e/ZUqVKl8u08Fi9enOPx4R1vfteF9Ud1fklJSdHkyZP1zDPPFHYpXjlw4IAefPBB1axZU0FBQQoNDVW9evU0depUGWNc2s6bN0+dO3dWtWrVVKJECdWsWVNPPfWUUlNTXdqVLVtWvXv31nPPPVeAZwLb0F8gw8svvyyHw6Fly5Z5vL1169YKCQnRgQMHCriyvEcfQR8B79FPILPJkyfL4XBo6tSpbrd9+eWX8vHx0b/+9a9CqCz/PPvss+rSpYvCw8MLuxSvvPTSS7rjjjtUvnx5BQQEKDIyUo8//rgOHz7s0m7Hjh0aNGiQ6tSpo6CgIIWFhalNmzZKTk522+fgwYM1d+5cfffddwV1GnnGYbL2lBZYtGiROnfurOLFi6tbt26KiYmRj4+PduzYoXnz5mnv3r1KSUnRTz/9pN9//915vw0bNuiNN97QM888o5tuusm5/ZZbbtEtt9zi8Vg9e/bUnDlzdPLkyXw5l/79+2v8+PFuf7Dg0qxYscLld53ZBx98oEWLFmnw4MF6+eWXr+g4U6ZMUa9evZSSkuJ8B/Ps2bOSJD8/vyva96V6/PHHtWTJEv3444/ObcYYnTlzRr6+vipWrFiO9+/Zs6dWr15dYO8GbNmyRYmJiWrQoIGqVKmic+fOacWKFVqwYIGGDBmil156ydm2XLlyqly5su677z5VqVJFW7du1VtvvaVq1app48aNCgwMdLbdvn27oqKitHLlSt11110Fci6wB/0FMjt37pxiY2OVlpambdu2ubyWzJ49W506ddL48ePVt2/fy9o/fcTlo49AYaGfQFbGGDVu3Fg7duzQjh07VLZsWUkX+5DbbrtNx48f1w8//KCSJUte0XEcDoeGDRvmDOIuXLigc+fOyd/fXw6H40pPw2ubN2/Wrbfeqi+++EJ33nmnc7u3/dfq1av1t7/9TatWrSqwN9E7dOig8uXLq1atWgoKCtL27ds1adIkVahQQZs3b3b+bv71r3/pnXfeUYcOHVSvXj0dO3ZMEydO1J49e7R06VI1a9bMZb+33367atasqffee69AziPPGMv8/PPPpmTJkuamm24yBw4ccLv93LlzZuzYsWbfvn1ut82ePdtIMqtWrfL6eD169DAlS5a8kpJz1K9fP2Phr8EaW7ZsMQEBASY2NtacOXPmiveXlJRkJJmUlJQrL+4KnD171pQrV84MHTr0svfRo0cPEx4enndFXaa2bduakiVLmvPnzzu3eXqOTp061UgykyZNcrstOjra/OMf/8jPMmEh+gt48uWXXxofHx8zZMgQ57bjx4+bypUrmzvuuMNcuHDhsvdNH5H36COQn+gnkJ3vv//e+Pr6mp49ezq3jRo1ykgyCxYsyJNjSDLDhg3Lk31dicTERFOlShWTnp5+WfdftWrVJT8X8sOcOXOMJPP+++87tyUnJ5sTJ064tPvjjz9M+fLlTYMGDdz28eqrr5qSJUu63edqZ93Hr/7zn/8oLS1NSUlJCgsLc7u9ePHiSkxM1A033JBvNdx4441q27at1q1bp3r16ikgIEDVqlVzS/TOnTun559/XpGRkQoICFDZsmXVsGFDrVixQtLFtH78+PGS5DJsM8Orr76q+vXrq2zZsgoMDFRsbKzmzJnjVo/D4VD//v01f/58RUdHy9/fX7Vr19bSpUvd2u7fv18PP/ywKleuLH9/f1WtWlWPPvqoM4mVpNTUVD3++OO64YYb5O/vr+rVq+uVV15Renq6y75mzZql2NhYBQUFKTg4WDfffLPGjh17+Rc2j6Wlpalz587y9fXVBx984NW7pOPGjVPt2rVVokQJlS5dWnXr1tXMmTNzvI+nz5uePn1aw4cPV40aNRQQEKCwsDC1b99eu3btcrZJT0/XmDFjVLt2bQUEBKhixYpKSEjQ0aNHc61z3bp1+uOPP9zS5ezmS8h4bAQEBCg6OlofffSR2z6HDRsmHx8frVy50mV7nz595Ofnl29DEW+88UadOnXK5THoKeX/+9//Luniu65ZNW/eXAsXLuSdKbigv6C/8OSOO+7QI488oldffVU//PCDJGno0KE6dOiQ3n77bfn4ZP+nEX0EfQSKFvoJ+onsREVFaeDAgZoyZYo+//xzpaSk6IUXXlD79u11zz335Hr/5ORktWzZUuXKlVNgYKCqVq2qhx56KMf7ZDenzpIlSxQfH++8NnFxcW59z9dff61WrVopJCREJUqUUHx8vNavX+/Vuc6fP1933XWX2+ggT/3Xr7/+qvvuu08lS5ZUhQoV9MQTT+jMmTMubbZv367AwEB1797dZfu6detUrFgxDR482Ku6LlXGCNnMH8WNjY11+8hj2bJl1ahRo2z7i7S0NOfzyhbFC7uAS7Vo0SJVr15dt99+e6HW8fPPP6tjx456+OGH1aNHD7377rvq2bOnYmNjVbt2bUnS8OHDNWrUKPXu3Vv16tXT8ePHlZycrI0bN6p58+ZKSEjQgQMHtGLFCk2bNs3tGGPHjtW9996rbt266ezZs5o1a5buv/9+LVq0SG3atHFpu27dOs2bN099+/ZVUFCQ3njjDXXo0EH79u1zDhk8cOCA6tWrp9TUVPXp00e1atXS/v37NWfOHJ06dUp+fn46deqU4uPjtX//fiUkJKhKlSr64osvNGTIEB08eFBjxoyRdPHjTl26dFHTpk31yiuvSLr4BF6/fr0GDBiQj1fee/3799f27ds1Y8YMRURE5Np+0qRJSkxMVMeOHTVgwACdPn1aW7Zs0ddff62uXbt6fdwLFy6obdu2WrlypR544AENGDBAJ06c0IoVK7Rt2zZnLQkJCc6h+omJiUpJSdGbb76pTZs2af369fL19c32GF988YUcDoduvfXWXOtZvny5OnTooKioKI0aNUpHjhxRr169dP3117u0Gzp0qBYuXKiHH35YW7duVVBQkJYtW6ZJkyZpxIgRiomJcbb9448/vLoWQUFB8vf3d9n2119/KS0tTSdPntTnn3+upKQk3XnnnS7D5T357bffJF0cdp9VbGysRo8ere+//17R0dFe1Yaij/6C/iI7o0aN0vz585WQkKAxY8Zo/PjxGjhwoG6++eZs70MfQR+Bood+gn4iJ0OHDtWsWbOUkJCg8PBwFS9eXG+88Uau9zt06JBatGih8uXL6+mnn1ZoaKj27NmjefPmXXINU6ZM0UMPPaTatWtryJAhCg0N1aZNm7R06VJn3/PZZ5/p7rvvVmxsrDOAT0pK0l133aW1a9eqXr162e5///792rdvn2677bZca/nrr7/UtGlT7du3T4mJiapcubKmTZumzz77zKXdTTfdpBEjRmjgwIHq2LGj7r33XqWlpalnz56qVauWXnjhBWfbkydP6vTp07ke29fXVyEhIS7bjDE6cuSIzp8/r507d+rpp59WsWLFvPoI2G+//eaxv4iKilJgYKDWr1/vfLPACoU8UuiSHDt2zEgy9913n9ttR48eNYcPH3Z+nTp1yq1NXg2TDA8PN5LMmjVrnNsOHTpk/P39zVNPPeXcFhMTY9q0aZPj/nMaJpn1HM6ePWuio6PNXXfd5bJdkvHz8zM///yzc9t3331nJJlx48Y5t3Xv3t34+PiYDRs2uB0rY7jdiBEjTMmSJc1PP/3kcvvTTz9tihUr5hx+OmDAABMcHOwyHPpqMm3aNCPJ9OrVy+v7tGvXztSuXTvHNp6G1sfHx5v4+Hjnz++++66RZF5//XW3+2dc57Vr1xpJZsaMGS63L1261OP2rB588EFTtmxZt+0pKSlGkklKSnJuq1OnjgkLCzOpqanObcuXLzeS3IbWb9261fj5+ZnevXubo0ePmuuuu87UrVvXnDt3zqWdJK++MteRIWPoasZX06ZNPQ5rzurhhx82xYoVc3tsGmPMF198YSSZDz74INf94NpAf0F/kZuMYdplypQx1apV8/g4yIw+gj4CRQv9BP2EN5YtW+Z8PRozZoxX9/noo4+MJI/XJjNl+fhV1j4kNTXVBAUFmdtvv9389ddfLvfNuMbp6ekmMjLStGzZ0uXjU6dOnTJVq1Y1zZs3z7GGTz/91EgyCxcudLsta/81ZswYI8l8+OGHzm1paWmmevXqbs+FCxcumIYNG5qKFSuaP/74w/Tr188UL17c7Zr06NHDq/4icx0ZDh486NLm+uuv9+p1fs2aNcbhcJjnnnvO4+01atQwd999d677uZpYNVLn+PHjkuRx1vgmTZq4DP3973//m6+zkkdFRalRo0bOn8uXL6+aNWtq9+7dzm2hoaH6/vvvtXPnTkVGRl7yMTK/K3X06FFduHBBjRo10vvvv+/WtlmzZi6jUW655RYFBwc760lPT9f8+fN1zz33qG7dum73zxhuN3v2bDVq1EilS5d2eaetWbNmevnll7VmzRp169ZNoaGhzqFprVq1uuRzy08//fSTHn30UdWqVUvjxo3z+n6hoaH69ddftWHDBsXFxV328efOnaty5crpsccec7st83UOCQlR8+bNXa5zxhDBVatW5fjO75EjR1S6dOlcazl48KA2b96sp59+2iXdbt68uaKiopSWlubSPjo6Ws8//7yGDBmiLVu26I8//tDy5ctVvLjrS4W3QxIz3l3KrEuXLqpbt64OHz6sRYsW6ffff9dff/2V435mzpypd955R4MGDfL4XMq4Ft6+O4yij/6C/iI3HTp0UOvWrbV48WLNmDEj15Eg9BH0ESha6CfoJ7xRpkwZ+fj4KD09XS1atPDqPqGhoZIujgSLiYnJcWRlTlasWKETJ07o6aefVkBAgMttGdd48+bN2rlzp4YOHaojR464tGnatKmmTZum9PT0bD9anHEfb/qMxYsXKywsTB07dnRuK1GihPr06aNBgwa5tPXx8dGUKVMUExOju+++W8nJyRo6dKjb42XQoEF68MEHcz22p/rKlCmjFStW6PTp09q0aZPmzZuX6yTkhw4dUteuXVW1alW3mjMfy7b+wqpQJygoSJI8/rImTpyoEydO6Pfff/fqgXGlqlSp4ratdOnSLp91f+GFF9SuXTvVqFFD0dHRatWqlf7xj39kOyN+VosWLdKLL76ozZs3u3xW0dNs6LnVc/jwYR0/fjzXYcc7d+7Uli1bVL58eY+3Hzp0SJLUt29fffjhh7r77rt13XXXqUWLFurUqVOuL8SHDx/WhQsXcmyTnfLly+e6WseZM2fUqVMnnT9/Xh988IHHWemz1lCqVCmVKlVKgwcP1qeffqp69eqpevXqatGihbp27aoGDRpcUp27du1SzZo13f7IzWznzp06duyYKlSo4PH2jOucE+PF3AB79+6VJI+df82aNbVx40a37QMHDtSsWbP0zTff6KWXXlJUVJRbm6zzNFyK8PBw53KJXbp0UZ8+fdSsWTP9+OOPHv+pWrt2rR5++GG1bNlSI0eO9LjPjGtRkCsF4OpGf3ER/UXO4uLitHjxYpc/MukjLqKPQFFHP3ER/UT2Lly4oD59+qhy5co6efKkEhMTXULrkydPujx+ihUrpvLlyys+Pl4dOnTQ888/r9GjR6tJkya677771LVrV7ePnOYkY561nK7zzp07JUk9evTIts2xY8dyDW287TOqV6/u9pipWbOmx/YREREaPny4Bg4cqOjoaD333HNubaKiojz2I97w8/Nz9jdt27ZV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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Visualize the ground truth — middle Z-slice\n", "fig, axes = plt.subplots(1, 3, figsize=(12, 4))\n", "for ax, (axis, title) in zip(axes, [(0, \"Z-slice\"), (1, \"Y-slice\"), (2, \"X-slice\")]):\n", " mid = gt_instances.shape[axis] // 2\n", " slc = [slice(None)] * 3\n", " slc[axis] = mid\n", " axes_img = gt_instances[tuple(slc)]\n", " ax.imshow(axes_img, interpolation=\"nearest\", cmap=\"nipy_spectral\")\n", " ax.set_title(f\"GT Instances — {title} (idx={mid})\")\n", " ax.axis(\"off\")\n", "fig.suptitle(\"Ground Truth Instance Labels\", fontweight=\"bold\")\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "eb56f1ad", "metadata": {}, "source": [ "## 2. Generate Diffusion Flows\n", "\n", "The diffusion flow generator solves the heat equation inside each instance,\n", "then takes the spatial gradient to produce a flow field that points toward\n", "each instance's topological center.\n", "\n", "Since this is the full volume (not a crop from a larger dataset), we pass\n", "`spatial_mask=None` — this uses Dirichlet boundary conditions at the volume\n", "edge, keeping flow directed inward." ] }, { "cell_type": "code", "execution_count": 3, "id": "3debf544", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:48.794414Z", "iopub.status.busy": "2026-03-17T22:54:48.794194Z", "iopub.status.idle": "2026-03-17T22:54:50.932829Z", "shell.execute_reply": "2026-03-17T22:54:50.931651Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Flow shape: (3, 64, 64, 64) (3 x D x H x W)\n", "Flow dtype: float32\n" ] } ], "source": [ "from topo import generate_diffusion_flows\n", "\n", "flows = generate_diffusion_flows(\n", " gt_instances,\n", " n_iter=200,\n", " spatial_mask=None, # full volume — real boundary\n", ")\n", "print(f\"Flow shape: {flows.shape} (3 x D x H x W)\")\n", "print(f\"Flow dtype: {flows.dtype}\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "053740f0", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:50.935109Z", "iopub.status.busy": "2026-03-17T22:54:50.934788Z", "iopub.status.idle": "2026-03-17T22:54:51.251574Z", "shell.execute_reply": "2026-03-17T22:54:51.250515Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABVcAAAGMCAYAAADeEZJ2AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAf/tJREFUeJzt3Xl4FFXWx/Ffd2dPSAIEEpYMYRNEBRQkoiIqkSCOiiu4sbwKbqiIjoILQVERRYZRGVFHxAWEUUcUZaKIoigRFMUVUBQExYTNJBAgS3e9fzBpaasCVU0a0unv53nqMTl9q+pWG3JSp2/d6zIMwxAAAAAAAAAAwBH34e4AAAAAAAAAAIQjiqsAAAAAAAAAEASKqwAAAAAAAAAQBIqrAAAAAAAAABAEiqsAAAAAAAAAEASKqwAAAAAAAAAQBIqrAAAAAAAAABAEiqsAAAAAAAAAEASKqwAAAAAAAAAQBIqrAACg3svKypLL5ZLL5TK9NnXqVHXs2FGxsbFyuVzq2rWr/7V33nlH2dnZatCggX//4uLikPRx/fr1/nOceuqpITlHKIRrv+ur6v8XWVlZ/tjMmTP98fHjxx+2vgEAANRHFFcBAEDYGD9+vL9I5HK5FB0drdTUVB155JEaNGiQ8vPzHR1vzpw5uvnmm7VmzRpVVFQEvLZ+/Xqde+65Wr58uXbu3Fmbl1Hn7VuMq2kLVZG5vti36Hygbf369Ye7uyH34Ycf6qKLLlK7du2UnJys6OhoZWRk6KyzzjL9u62oqNCTTz6piy++WB07dlRycrLi4+PVqVMnjRs3TmVlZYfpKgAAAMyiDncHAAAAglVVVaWSkhKVlJRo9erVmjt3rs4++2zNmjVLDRo08Ld75ZVXtGfPHtP+b775pv/rcePG6YwzzlBSUpIk6d133/XvM2DAAI0aNUoejyfguLWpWbNmWrJkiSQpJSUlJOdA3RQdHR3S4/fv39//s/WXv/wlpOeqyYcffqhXXnklIFZUVKQFCxZowYIFmjVrli699FJJ0vbt23XNNdeYjrFq1SpNmDBB+fn5+uijjxQTE3NI+g4AALA/FFcBAEBYOvPMM3XHHXdo+/btevfdd/Xkk0+qoqJC8+fP1xVXXKF58+b523bv3t3yGJs2bfJ/PXToULVu3drytXPOOUe9e/eu/YvYR2xsrE4++eSQniMYXbt21WOPPWaKh6rIXF/sWyzf1/bt2zVo0CDt3r1bkjRixAi1aNEipH1p2rSpmjZtGtJzHEiLFi1000036YQTTlDTpk21adMmPfDAA1q1apUk6bHHHvMXV6W90xv069dPAwcOVLNmzfTOO+/okUcekSR9+umnmjVrloYNG3ZYrgUAACCAAQAAECby8vIMSYYkY8iQIQGvzZ8/3/+aJOPdd9/1v9aqVSt/3DAM4/333w9ou+82ZMiQGl9r1aqV5fGq7bvv+++/74+///77Rp8+fYyGDRsaUVFRRlpamnH88ccbN954o1FcXGwYhmGsW7fOv2/v3r0DjltSUmLccccdRseOHY24uDgjKSnJ6NGjhzF9+nTD5/MFtN23r99//71x9tlnG4mJiUbDhg2Nq6++2ti9e/cB3+dnn322xr78WW30+/zzz/cf44cffjAMwzB27dplREdHm/5f33bbbf62CxYsMAzDMLZu3WpcffXVxl/+8hcjOjraSEpKMtq3b28MGjTIWLx48QGv91A677zz/P3v1KmTsWvXLlv7rVy50jjnnHOMJk2aGFFRUUajRo2MLl26GFdffbXx888/+9v9+WfVMAL/f+bl5QUcd8OGDcb1119vtG3b1oiNjTVSU1ONE044wZgzZ05Auy+//NIYNGiQkZGRYURHRxvNmzc3rrzySmPjxo1Bvxevvfaav19HHXWUP15aWmosXbrU1H7AgAH+9tdee23Q5wUAAKhNjFwFAAD1wl//+lfl5OTo3XfflSS99NJL6tOnz2HulbRmzRr179/fP1JRkrZu3aqtW7fq008/1Q033LDfaQB+//13nXjiiVq9enVAfPny5Vq+fLkWL16sl156yXK/nj17atu2bZKksrIyPfnkk0pLS9N9991XS1dXMyf97tWrl/7zn/9Ikj755BO1a9dOn332mSorKyVJBQUF/v2rv3a73TrppJMkSRdffLHee+89f5vKykr98MMP+uGHH9S2bduQjzq268knn9Rrr70mSYqLi9OcOXMUHx9/wP22bdumM844Q1u2bPHHtm/fru3bt+vLL7/UhRdeGNTj/itXrlSfPn20fft2f6y8vFyffPKJ/vvf/2rgwIGSpP/+978677zzVF5e7m+3adMmPfPMM3rrrbe0dOnSgFHfB+L1erVhwwY999xz/thpp53m/7pBgwbq2bOnab/27dv7v05MTLR9PgAAgFBiQSsAAFBv7FuQWblyZY3tjj32WC1ZskRdu3b1x15++WUtWbJEd955p5YsWRLwyPEdd9yhJUuWmOaMtGPhwoX+wupNN92kRYsW6ZVXXtF9992n7t27y+Vy7Xf/O+64w1+gPOaYY/Sf//xH//rXv9SwYUNJexflmjt3rmm/0tJSNWnSRK+++qomTJjgjz/55JOO+v/BBx+YFmA69dRTD7ifk36fcsop/v2qi6f7FlS///57bdu2TZWVlfrss88kSV26dFFycrJ27Nih999/X9Le/69vvPGG/vvf/2r69Om64IIL6kwRbtWqVRo9erT/+0ceeUTHHHOMrX0LCgr8hdVLLrlECxcu1Lx58zR58mT17t1bHo/HcX8Mw9DgwYP9hdWjjz5aL7zwgt566y2NGzdOjRs3liTt2rVLQ4YMUXl5uaKionT//ffrnXfe0W233SZJKiws1HXXXWf7vBkZGYqKilKbNm00b948RUVF6YorrtDEiRP3u19lZaXmz5/v//7MM890eskAAAAhwchVAABQbzRr1sz/dUlJSY3tUlJSdPLJJweMGO3evbuysrIk7R0hVz0Ctvr7YOdD3XexotatW6tTp07KyMiQJN1555373dfn8wUUTmfPnq2jjz5akrR7927dcMMNkvaO0q0eZbivl156SV27dtX555+vWbNmafXq1dq6datKSkpCumiW035XF0pLS0tNxdWjjjpK3377rQoKCpSenu4vVPfq1UuSFBUVJZfLJcMwlJaWpnbt2ql9+/aKiorS1VdffcC+btiwQRs2bAjqOo844ghbc5mWl5frkksu0a5duyTtXSDtzwXJkpISff311wGxuLg4de/ePeBnKDMzUx06dFDLli3lcrl0yy23BNX3L7/80n++5ORkvffee2rSpImkvQtgVXvnnXf8hd0zzjjDXwg/++yz9e9//1vr16/X22+/ra1btyotLc1xPzwejzwejwzDqLGNz+fTVVdd5S/WX3DBBTr99NMdnwsAACAUKK4CAIB649dff/V/HcrioRPnnnuu7rzzTm3btk2jRo3SqFGj1LBhQ2VnZ+v//u//dNFFF9W475YtW/T7779LkhISEvwFSknq0aOH/+vvv//etG9ycnLAyNzqkYiSVFxcbPv9sVrQ6kD7Ou23x+PRiSeeqPz8fH311VcqKytTQUGBYmJidN111+n666/X0qVLlZ6e7t+3urgaHx+vSy65RLNmzdLChQvVqVMnRUdH66ijjtLZZ5+tW265Zb/9nTFjhu655x5b78WfPfvssxo6dOgB291222368ssvJe0tjj7zzDOmNl988UXAo/GS1KpVK61fv169evVS+/bt9cMPP+ihhx7SQw89pAYNGui4447TZZddpiuvvFJut7MH0vb9mcnOzvYXVvfX7r///a/++9//mtoYhqHVq1fb+gDijTfeUFlZmX766Sf9/e9/17fffquZM2dqx44dliPDKysrdcUVV/iL9b169dLzzz9/wPMAAAAcKhRXAQBAvfHxxx/7v963sFjb9n2U3+v1+h/L3rp1q6ltRkaGVqxYoSeeeEIff/yxVq1apW3btik/P1/5+fl66aWXNGjQIEfntPr+z6ofv68WFfXHn337GyX4Z9WjfINlt9+nnHKK8vPz5fV6NXfuXBUVFSk7O9tfcKweuVqturgq7S1ynnLKKXrrrbf07bffat26dVq5cqVWrlyp5cuXKz8/P+j+H6y33npLjz76qKS9ReRZs2apUaNGjo6RkJCgjz/+WNOnT9fixYv13XffqbCwUB988IE++OADbdu2TWPGjAlF920rKyuz1a66uH7aaafp9NNPV5s2bSRJ//nPf7Rnzx7FxcX52+7Zs0cXXXSR3nzzTUlSnz599PrrryshIaGWew8AABA85lwFAAD1wrx587R48WL/91aPydeWfUdCFhYWSpJ27NgRUNytZhiGWrVqpQcffFBLlizxL2RVrXohJytNmjRRamqqpL3Fq2+//db/2rJly/xfH3HEEUFfSygE0+99i6V///vfJe2dQ7djx45KTU3Vp59+6n9/jzjiiIBCa1RUlEaMGKHXX39da9eu9S+mJe19rH1/hb/x48fLMIygtgONWi0sLAyYu/fuu+8OuM59nXrqqabjr1+/XtLen6EmTZro7rvv1qJFi/Tbb7/pp59+UlJSkqT9/wzVZN/3fvny5ZYfDPy53ZAhQyzfh7KyMuXm5u73fPsu6FZt30K7YRgqLS31f79z506dddZZ/sLqueeeq7feeqvOzKELAABQjZGrAAAgLG3evFkfffSRtm/froULF+qpp57yv3b22WfrjDPOCNm527Vr53/Me/Dgwbrgggv0wgsvqLi42NT2pZde0vTp0zVgwAC1bt1aKSkpASvb77sC+5+53W4NGjRI06dPlyRddtllysvL0++//668vDx/u0suuaSWrqx2BNPvHj16KC4uTnv27NE333wjaW9x1eVy6YQTTlB+fr6/SPrnAmXbtm11wQUXqEuXLmrevLk2b96sdevWSdpbtCsvLz/kRTnDMDRkyBD/fKWtWrXSqaeeqo8++sjU9kBzty5dulQ33nijLrjgArVv315paWn66quv/HO47u9nqCZdunTR0UcfrW+++UYlJSXq06ePbrvtNjVq1EgrVqzQ77//rkceeURnnHGGmjRpoi1btuj5559Xo0aNdMYZZ8jr9Wr9+vX6+OOP9eWXX+q7777b7/latGihyy+/XD169FCzZs20ceNGPfLII/7XMzMz/VMT7N69W2eccYY++eQTSVLnzp01atSogA8l0tPT1b59e8fXDQAAUNsorgIAgLBU0/yPZ511lmbNmhXSc48YMUKvvvqqJOm9997Te++9p6ioKLVr105r164NaOvz+bRkyRItWbLE8lgHKozef//9Wrx4sVavXq0vv/xS559/fsDrgwYN0sUXX3wQVxMaTvsdExOjHj166MMPP/THevbs6f/vvo/2/7m4umHDBk2ePNmyH7m5uY4fw68NS5cu1TvvvOP//ueff9app55q2fZAc7cahqHPP/9cn3/+ueXrwRTXXS6XnnvuOfXp00fFxcX66quvdPnll/tfHzJkiCQpMTFRM2fO1Pnnn6/y8nL9/e9/948srtaqVasDnu/33383zd1bLTo6Wo8//rh/JGtRUZG/sCpJX331lWk+2iFDhmjmzJm2rhUAACCUmBYAAACELbfbrQYNGuiII47QRRddpPnz52v+/Plq0KBBSM/bt29fTZ06VS1btlRsbKx69Oiht99+WyeddJKpbc+ePXXTTTfpuOOOU1pamjwej1JSUtSrVy/NnTv3gPOtNmrUSJ988onGjh2rDh06KDY2VomJiTr++OP1xBNPaPbs2Qecf/VwCKbf1SvRS3tHOmZmZkr6o8ha7c/F1QceeEC5ubn+/x+xsbHq0KGD/va3v+nll18O0RXuX2VlZa0d64gjjtDtt9+uE044Qenp6YqKilJSUpKOP/54TZs2TbfffntQxz3uuOP05Zdf6tprr1WbNm0UExOj1NRUnXDCCTrzzDP97fr376/PPvtMV1xxhVq2bKno6GilpaWpa9euGj16tK33OC8vT71791azZs0UHR2t+Ph4tW/fXldeeaU+++wznXPOOUFdAwAAwOHmMpysaAAAAAAAAAAAkMTIVQAAAAAAAAAICsVVAAAAAAAAAAgCxVUAAAAAAAAACALF1QiTlZW139VoUbNTTz21xlV+a9vixYvlcrm0ePHiQ3I+AIg05EMAAA6MfAkAB0ZxtZ6YOXOmXC6X5TZmzJjD3b0A1YVDl8ulF1980bLNSSedJJfLpaOPPvoQ986+TZs2afz48Vq5cuXh7goA4H/CJR9ec801iomJ0TfffGN6raqqSp07d1ZWVpbKysoOQ+8i2wMPPKB58+Yd7m4AQEiFS76UpLvuuqvGgSdz5syRy+XS448/fug7BknSggULNH78+MPdDeCwijrcHUDtuvfee9W6deuAWF0tUMbFxWn27Nm6/PLLA+Lr16/X0qVLFRcXd5h6Zu2dd94J+H7Tpk265557lJWVpa5dux6eTgEALNX1fPjggw/q9ddf1zXXXKMlS5bI5XL5X/v73/+ur7/+Wm+99ZYSExMPYy8j0wMPPKALL7xQAwYMONxdAYCQq+v5UtpbXJ0zZ46uueYaffXVV4qJiZEkFRcX6+abb9bxxx+v66677jD3MnItWLBA06ZNo8CKiEZxtZ4588wz1b1798PdDVv69++vN954Q1u3blVaWpo/Pnv2bKWnp6t9+/b6/fffD2MPA1UncQBA3VfX82Fqaqr+8Y9/aODAgXr66ac1YsQISdKGDRt0zz336OKLL1b//v0Pcy8BAPVdXc+X0t5BOU888YT69u2riRMnKi8vT5I0ZswYbdmyRf/973/ldvNQLoDDh99A0E8//aSLLrpIjRo1UkJCgk444QS99dZb/tcNw1BaWppGjx7tj/l8PqWmpsrj8ai4uNgfnzRpkqKiorRz584Dnvfcc89VbGysXn755YD47NmzdfHFF8vj8Zj2efbZZ3X66aeradOmio2NVadOnfTEE0+Y2vl8Po0fP17NmzdXQkKCTjvtNH333XemOYOqH4f5+OOPNXr0aDVp0kSJiYk677zztGXLloBj7jvn6uLFi3X88cdLkoYNG+Z/hGbmzJmSap6byGre1l9++UUDBgxQYmKimjZtqptvvlnl5eWW79myZcvUr18/paSkKCEhQb1799bHH39s2RYA4MyhzofVBdQxY8Zo8+bNkqQbbrhB0dHR+sc//rHfvlaP1snKylJsbKxatmypwYMHa+vWrf42mzdv1pVXXqn09HTFxcWpS5cueu655wKOs379erlcLk2ePFnTpk1TmzZtlJCQoL59+2rjxo0yDEMTJkxQy5YtFR8fr3PPPVfbt28POEZWVpb++te/6p133lHXrl0VFxenTp066T//+Y/j91j6Y/qgf//737r//vvVsmVLxcXFqU+fPlq7dq3pmHZy4/jx4+VyubR27VoNHTpUqampSklJ0bBhw7Rr1y5/O5fLpbKyMj333HP+3M5cgwAQ6HDcP55xxhm69NJLNXHiRH3//fcqKCjQU089pZtuusn2U4QvvviievTooYSEBDVs2FCnnHKK6enEf/7znzrqqKMUGxur5s2b6/rrrw/or7T3nu7oo4/WV199pd69eyshIUHt2rXTK6+8Ikn64IMPlJ2drfj4eHXo0EHvvvtuwP7VOWn16tW6+OKLlZycrMaNG+umm27Snj17AtpWVVVpwoQJatu2rWJjY5WVlaU77rjDdL9YnYs/+ugj9ejRQ3FxcWrTpo2ef/550/tQXFysUaNGKTMzU7GxsWrXrp0mTZokn8/nb7Pv3wdPPfWU//zHH3+8Pv30U3+7oUOHatq0aZIUMLUEEGkortYzJSUl2rp1a8C2P0VFRTrxxBP19ttv67rrrtP999+vPXv26JxzztFrr70mae8vyZNOOkkffvihf7+vvvpKJSUlkhRwA7NkyRIde+yxSkpKOmBfExISdO655+qll17yx7788kt9++23uvTSSy33eeKJJ9SqVSvdcccdeuSRR5SZmanrrrvO/wu92tixY3XPPfeoe/fuevjhh9W+fXvl5ubWOHfdDTfcoC+//FJ5eXm69tprNX/+fI0cObLGvh955JG69957JUkjRozQCy+8oBdeeEGnnHLKAa97X7t371afPn309ttva+TIkbrzzju1ZMkS3Xbbbaa27733nk455RSVlpYqLy9PDzzwgIqLi3X66adr+fLljs4LAPVduOTDf/7zn6qoqNDNN9+s119/XW+88YYefPBBZWRk1LjPzp071atXLz322GPq27ev/vGPf+iaa67R6tWr9csvv0jam19OPfVUvfDCC7rsssv08MMPKyUlRUOHDrUs3M6aNUv//Oc/dcMNN+iWW27RBx98oIsvvlh33XWX8vPzdfvtt2vEiBGaP3++br31VtP+P/zwgwYOHKgzzzxTEydOVFRUlC666CItXLjQ0Xu8rwcffFCvvfaabr31Vo0dO1affPKJLrvssoA2TnPjxRdfrB07dmjixIm6+OKLNXPmTN1zzz3+11944QXFxsaqV69e/tx+9dVX1/j/AgDCXbjkS0maMmWKEhISdPXVV+vqq69Wy5YtA36H788999yjK664QtHR0br33nt1zz33KDMzU++9956/zfjx43X99derefPmeuSRR3TBBRfoySefVN++fVVZWRlwvN9//11//etflZ2drYceekixsbEaNGiQ5s6dq0GDBql///568MEHVVZWpgsvvFA7duww9eniiy/Wnj17NHHiRPXv31+PPvqo/0mWaldddZXGjRun4447Tn//+9/Vu3dvTZw4UYMGDTIdb+3atbrwwgt1xhln6JFHHlHDhg01dOhQffvtt/42u3btUu/evfXiiy9q8ODBevTRR3XSSSdp7NixAcXwarNnz9bDDz+sq6++Wvfdd5/Wr1+v888/3/9+XH311TrjjDMkyZ83X3jhBVv/T4B6xUC98OyzzxqSLLd9tWrVyhgyZIj/+1GjRhmSjCVLlvhjO3bsMFq3bm1kZWUZXq/XMAzDePjhhw2Px2OUlpYahmEYjz76qNGqVSujR48exu23324YhmF4vV4jNTXVuPnmm/fb1/fff9+QZLz88svGm2++abhcLmPDhg2GYRjG3/72N6NNmzaGYRhG7969jaOOOipg3127dpmOl5ub69/HMAyjsLDQiIqKMgYMGBDQbvz48YakgOuvft9ycnIMn8/nj998882Gx+MxiouL/bHevXsbvXv39n//6aefGpKMZ5991tSnP7/PNR1j6tSphiTj3//+tz9WVlZmtGvXzpBkvP/++4ZhGIbP5zPat29v5ObmBvRz165dRuvWrY0zzjjDdC4AiEThlA+rTZ482ZBkNGrUyDjppJMCfs9bGTdunCHJ+M9//mN6rXrf6vzy4osv+l+rqKgwevbsaSQlJfn7v27dOkOS0aRJk4CcN3bsWEOS0aVLF6OystIfv+SSS4yYmBhjz549/lirVq0MScarr77qj5WUlBjNmjUzjj32WH/M7ntc/XfCkUceaZSXl/vb/uMf/zAkGV9//bX/Wu3mxry8PEOS8X//938B79d5551nNG7c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zp07yZtALWPO1QjXv39/LV++XAUFBf5YWVmZnnrqKWVlZQWMIu3Vq5fKy8s1depUnXzyyf5fotUr6m7atMnRfDnVXC6XHn30UeXl5emKK66osV31p2b7fkpWUlKiZ599NqBdnz59FBUVpSeeeCIg/vjjjzvu2/4kJiZKkmURtW3btvrkk09UUVHhj7355pvauHFjQLv+/ftr06ZNeuWVV/yxXbt26amnngpo161bN7Vt21aTJ0/Wzp07TefbsmXLwVwKAES8upAP/ywnJydgqx7JesEFF+jLL7/0r8q8r+oc2b9/fxUWFmru3Ln+16qqqvTYY48pKSlJvXv3Puj+7WvTpk0B/SktLdXzzz+vrl27KiMjw98nu++xHaHKjYmJiZa5HQBwePKl1+vV1VdfrWbNmmnChAmS9v6ufuyxx/TNN9/o73//u6S9c47umze7desmSRowYIDcbrfuvfde09OO1XkzJydHMTExevTRRwPuN5955hmVlJTorLPOCubt2q9p06YFfP/YY49Jks4880xJe99rSZo6dWpAuylTpkhSUH26+OKLVVBQoLffftv0WnFxsaqqqhwfc3/3xUCkYORqhBszZoxeeuklnXnmmbrxxhvVqFEjPffcc1q3bp1effXVgNEuPXv2VFRUlNasWROw4NIpp5ziL2QGezN57rnn6txzz91vm759+yomJkZnn322rr76au3cuVNPP/20mjZtqt9++83fLj09XTfddJMeeeQRnXPOOerXr5++/PJL/fe//1VaWlqtfbLWtm1bpaamavr06WrQoIESExOVnZ2t1q1b66qrrtIrr7yifv366eKLL9aPP/6oF1980T/Kptrw4cP1+OOPa/DgwVqxYoWaNWumF154QQkJCQHt3G63/vWvf+nMM8/UUUcdpWHDhqlFixb69ddf9f777ys5OVnz58+vlesCgEhUV/KhHX/729/0yiuv6KKLLtL//d//qVu3btq+fbveeOMNTZ8+XV26dNGIESP05JNPaujQoVqxYoWysrL0yiuv6OOPP9bUqVPVoEGDWu3TEUccoSuvvFKffvqp0tPTNWPGDBUVFQV8AOrkPbYjVLmxW7duevfddzVlyhQ1b95crVu3tpxfEAAi0eHIl48++qg+//xzvfrqqwH565xzztE555yje+65RwMHDrScc1TaOy/4nXfeqQkTJqhX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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Visualize flow magnitude and direction at mid-Z\n", "mid_z = gt_instances.shape[0] // 2\n", "fg = gt_instances > 0\n", "\n", "flow_mag = np.sqrt((flows ** 2).sum(axis=0))\n", "\n", "fig, axes = plt.subplots(1, 3, figsize=(14, 4))\n", "\n", "# Flow magnitude\n", "ax = axes[0]\n", "im = ax.imshow(flow_mag[mid_z], cmap=\"hot\", interpolation=\"nearest\")\n", "ax.set_title(\"Flow Magnitude\")\n", "ax.axis(\"off\")\n", "plt.colorbar(im, ax=ax, shrink=0.8)\n", "\n", "# Flow Y component\n", "ax = axes[1]\n", "im = ax.imshow(flows[1, mid_z], cmap=\"RdBu_r\", vmin=-1, vmax=1, interpolation=\"nearest\")\n", "ax.set_title(\"Flow Y-component\")\n", "ax.axis(\"off\")\n", "plt.colorbar(im, ax=ax, shrink=0.8)\n", "\n", "# Flow X component\n", "ax = axes[2]\n", "im = ax.imshow(flows[2, mid_z], cmap=\"RdBu_r\", vmin=-1, vmax=1, interpolation=\"nearest\")\n", "ax.set_title(\"Flow X-component\")\n", "ax.axis(\"off\")\n", "plt.colorbar(im, ax=ax, shrink=0.8)\n", "\n", "fig.suptitle(f\"Diffusion Flows — Z-slice {mid_z}\", fontweight=\"bold\")\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "90212935", "metadata": {}, "source": [ "## 3. Postprocess: Flow Tracking + Clustering\n", "\n", "The postprocessing pipeline:\n", "1. **Euler integration**: each foreground voxel follows the flow for `n_steps`\n", "2. **Convergence clustering**: voxels that end up near each other are grouped\n", "3. **Small instance filtering**: clusters below `min_size` are removed" ] }, { "cell_type": "code", "execution_count": 5, "id": "00e39e7b", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:51.254049Z", "iopub.status.busy": "2026-03-17T22:54:51.253811Z", "iopub.status.idle": "2026-03-17T22:54:51.320936Z", "shell.execute_reply": "2026-03-17T22:54:51.319967Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Recovered instances: 4\n", "GT instances: 4\n" ] } ], "source": [ "from topo import postprocess_single\n", "\n", "result = postprocess_single(\n", " sem_mask=fg,\n", " flow=flows,\n", " n_steps=100,\n", " step_size=1.0,\n", " convergence_radius=4.0,\n", " min_size=50,\n", " group=1, # convex morphology group\n", ")\n", "print(f\"Recovered instances: {result.max()}\")\n", "print(f\"GT instances: {n_inst}\")" ] }, { "cell_type": "code", "execution_count": 6, "id": "9bc25580", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:51.323069Z", "iopub.status.busy": "2026-03-17T22:54:51.322854Z", "iopub.status.idle": "2026-03-17T22:54:51.431111Z", "shell.execute_reply": "2026-03-17T22:54:51.430024Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyUAAAGNCAYAAAAPRN41AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAANr1JREFUeJzt3Xl0FFXCxuE3IRskYU2AsBgChC0EUBhQiCYKioLsyCKOLEEHBQMMOqIom4KCCCjKNo5BQWQTARdAkE1w1xEURUgIIHyyr7KT3O+PnNSk6QY6kHCB/J5zOKe7+qbqVlVTt9+qurd8jDFGAAAAAGCJr+0KAAAAAMjfCCUAAAAArCKUAAAAALCKUAIAAADAKkIJAAAAAKsIJQAAAACsIpQAAAAAsIpQAgAAAMAqQgkAAAAAqwglAK5506ZNk4+Pj3x8fDR06FBnekJCgjN927Zt1uonyalHhQoVrNbDlqu9/tu2bXOWmZCQ4EwfOnSoM33atGlXpS43klWrVjnbr1u3brarAyAfIZQAyDXZfxB6+le0aFEr9erWrZtTh8GDB3ssM2XKFKfM3XfffZVreO3xtP8CAgIUGRmpHj16aOvWrbareM2rUKGC2zYMCgpS5cqV9dhjj2nXrl22q+i1bdu2aejQoRo6dKgWLFhguzoAbkCEEgA3vM6dOzuv586d67FM9umdOnXK8zpdj86ePasdO3YoOTlZN998s37++Wfnsy+++EJffPGF5s2bZ7GGUo8ePZy6NGvWzGpdPDl9+rRSU1M1efJkNWzYUMeOHbNdJa9s27ZNw4YN07BhwwglAPKEn+0KALgx3XfffXr22Wddpvn52TnkNG7cWOHh4dq3b582bdqkDRs2qFatWs7n+/bt06pVqyRJAQEBatu2rZV6Xqvmzp2r0qVLa9u2bRo4cKB27dqlo0eP6plnntHHH38sSYqLi7Ncy0w33XSTbrrpJtvVcPP666+rVq1a2rBhgwYMGOAEvIULF+qhhx6yXT0AsI4rJQDyRMmSJRUXF+fy79Zbb5V08fvW86Jvgp+fn9q3b++8nzNnjsvn8+fPV3p6uiSpadOmKlasmCTp6NGjGjRokKpXr66CBQsqNDRUDRo00JQpU2SMueRyL9S/4ULrn/02s8WLFyspKUklSpRQ8eLF1adPH50+fVo7duxQy5YtFRISotKlS+u5555TRkaGy3KNMUpOTlajRo1UuHBhFSxYULVr19Zrr73mVtYb9erVU1xcnB566CGNGDHCmf7FF184rz3tt/P7As2YMUMxMTEKCgpSjRo1NHPmTLdl/fXXXxo6dKhq1qypggULqnDhwkpISNDixYu9quuFtnn2W6l2796tv//97ypWrJhCQ0PVsWNHHTx40G1eCxcuVJMmTVSsWDEFBgaqatWqGjZsmE6ePOlVXbKLjY1VfHy8nnjiCd17773O9D/++MOlXE723fr169WqVSuVLFlS/v7+KlGihOrUqaNevXppx44dki7c9+b8bXIxCQkJuvPOO53377zzDv1OAOQ6rpQAyBc6d+6sSZMmSco88//iiy86n2UPKVm3bh06dEgNGzbUpk2bXObz7bff6ttvv9WqVav0/vvv51l9n3jiCaWmpjrv33zzTR09elRr165VWlqaJOn48eMaMWKEKlSooJ49ezplu3Xrpnfffddlfhs2bFC/fv301VdfadasWZddryJFijivz5w54/XfzZo1S7///rvz/rffflOXLl3k4+Pj3F535MgR3X777S63hZ06dUqrV6/W6tWr9eabb+rxxx+/7LpnadSokUufmDlz5sjf318zZsxwpg0ePFgvvPCCy99t3rxZQ4cO1eeff67ly5crICDgspafPdCWKVPG5TNv992BAwd09913a9++fU65gwcP6uDBg1q/fr3at29/TV4xAoAL4UoJgDyR/WzqtXBWNS4uTuXKlZOU+ePyp59+kpR569bq1aslSYUKFVLLli0lSc8++6wTSGJjYzV//ny99dZbzlWUWbNmafbs2XlW3927d2vq1Kl666235OubeaiePn26Tp48qVmzZrmMQjZlyhTn9bx585wftVWrVtX777+vjz76yLlKNXv27Muu9/bt2zVmzBjnfWxsrNd/+/vvv6tv37765JNPXG5X+uc//6mzZ89KkgYNGuQEkmbNmumTTz7Ru+++q9KlS0uS+vfv73Zl4XKcPHlSM2bM0MSJE51gMWvWLB05ckSS9N133zmBJCIiQv/5z3+0ZMkSNW/eXFLmFaJx48blaJk///yz1qxZowkTJmjp0qWSMq8mtmnTximTk3331VdfOYGkc+fOWrZsmRYsWKAxY8YoPj5eBQoUuKxt48mECRP0+uuvO+/vu+8+p9/OoEGDcm05API3QgmAG8qW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kpKSVKZMGU2fPl0rVqzwatt++eWXkqRbbrnF4+fjx4/XoUOH9Nxzz2n+/PlezfNiDh06pHvvvVdt27ZVhw4dNG/ePD399NOKjY3VfffdJynzNumkpCS1b99effv21alTp7RhwwZ98803evDBB9W2bVtt3rxZ77//vsaNG6ewsDBJck50Tpo0STExMWrZsqX8/Pz00Ucf6fHHH1dGRoZ69+7tUp+UlBS1b99eiYmJ6tq1q95++21169ZNdevWVUxMjCTvvkPe7vONGzfq/vvvV61atTR8+HAFBgYqJSVF69atc9tWdevW1cKFC3X06FEVLlz4irf9DcXkA0eOHDGSTOvWrd0+O3TokNm3b5/z78SJE85nXbt2NZLMwIEDXf5mwYIFRpJ58cUXXaa3b9/e+Pj4mJSUFGOMMWlpaUaSSU5OdluuJDNkyBDn/ZAhQ4wk06NHD5dybdq0MSVKlHDe//TTT0aSefzxx13KPfjgg27zvJS5c+caSWblypVu9ejcubNb+fj4eBMfH+82vWvXriYyMtJ5v2/fvgvWJWubDh8+3GX6zTffbOrWrXvJOpcrV860a9fO42dvvPGGKVKkiNm7d69T35iYmEvO09M6ZO27EiVKmIMHDzrTFy5caCSZjz76yBiT+f2RZF555ZWLzj8mJsbjtjt16pRJT093mZaWlmYCAwNdttHKlSuNJFO9enVz+vRpZ/prr71mJJmff/7ZGGPMuXPnTFRUlImMjDSHDh1ymW9GRobzunHjxiY2NtacOnXK5fOGDRua6OhoZ1rt2rVN8+bNL7puWe655x5TvXp1r8oCyD+Sk5ONJLN8+XKzb98+88cff5h58+aZ8PBwExgYaP744w+nrLfHpsGDBxtJZv78+W7LyzrWjR8/3kgyM2bMcD47c+aMue2220xISIg5evSoMcaYpUuXuhzXszRr1sxUrFjReT99+nTj6+trvvjiC5dykydPNpLMunXrnGmSjK+vr9m4caNL2cTERBMREWH279/vMr1Tp06mSJEizm+QrLrPmTPHKXP8+HFTuXJlt3bbk+eee85IMseOHXP77M8//zShoaFmypQpxpj/7Z/vvvvuovM05n9tUfblx8fHG0nm3XffdaadPn3alC5d2qW9btWq1SXb5FdeecVIMmlpaW6fZf99lqVp06Yu+8gYYyIjI40ks2bNGmfa3r17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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Compare GT vs recovered\n", "fig, axes = plt.subplots(1, 2, figsize=(10, 4))\n", "\n", "ax = axes[0]\n", "ax.imshow(gt_instances[mid_z], interpolation=\"nearest\", cmap=\"nipy_spectral\")\n", "ax.set_title(f\"Ground Truth ({n_inst} instances)\")\n", "ax.axis(\"off\")\n", "\n", "ax = axes[1]\n", "ax.imshow(result[mid_z], interpolation=\"nearest\", cmap=\"nipy_spectral\")\n", "ax.set_title(f\"Recovered ({result.max()} instances)\")\n", "ax.axis(\"off\")\n", "\n", "fig.suptitle(\"Full-Volume Pipeline Result\", fontweight=\"bold\")\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "c0455842", "metadata": {}, "source": [ "## Summary\n", "\n", "The full-volume pipeline correctly recovers all instances:\n", "\n", "| Step | Output |\n", "|------|--------|\n", "| Input | Synthetic instance mask (64x64x64, 4 instances) |\n", "| Diffusion flows | [3, 64, 64, 64] unit vector field |\n", "| Postprocessing | Instance labels matching GT |\n", "\n", "For larger volumes that don't fit in memory, see the\n", "[Tiled Stitching Tutorial](tutorial_tiled_stitching) which splits the volume\n", "into overlapping sub-crops and stitches the results." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.20" } }, "nbformat": 4, "nbformat_minor": 5 }