{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "06270b57", "metadata": {}, "outputs": [], "source": [ "# imports\n", "import pathlib\n", "import numpy as np\n", "from scipy import ndimage\n", "import skimage.measure\n", "import dask.array as da\n", "import napari" ] }, { "cell_type": "code", "execution_count": 2, "id": "4c2bbccb", "metadata": {}, "outputs": [], "source": [ "class_names_colors = {\n", " \"bronchioles\": [150, 99, 23, 255], # brown\n", " \"alveoli\": [23, 80, 150, 255], # dark blue\n", " #\"alveoli\": [23, 80, 150, 0], # dark blue\n", " \"vasculature\": [150, 31, 23, 255], # dark red\n", " \"cancer\": [199, 196, 147, 255], # v dark purple\n", " \"nonexpanded\": [23, 80, 150, 255], # dark blue\n", " #\"nonexpanded\": [23, 80, 150, 0], # dark blue\n", " #\"whitespace\": [255, 255, 255, 255], # white\n", " \"whitespace\": [255, 255, 255, 0], # white\n", " \"collagen\": [242, 167, 227, 255], # light pink\n", " #\"collagen\": [242, 167, 227, 0], # light pink\n", "}" ] }, { "cell_type": "code", "execution_count": 3, "id": "4b3114b9", "metadata": {}, "outputs": [], "source": [ "registered_labels_zarr_path = (\n", " pathlib.Path().resolve().parent.parent\n", " / \"testing_python_FULL_20250929\"\n", " / \"registered_class_labels.zarr\"\n", " # / \"registered_class_labels_2_mpp.zarr\"\n", ")" ] }, { "cell_type": "code", "execution_count": 4, "id": "695184c7", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/margareteminizer/miniconda3/envs/coda-visual/lib/python3.10/site-packages/zarr/creation.py:614: UserWarning: ignoring keyword argument 'read_only'\n", " compressor, fill_value = _kwargs_compat(compressor, fill_value, kwargs)\n" ] } ], "source": [ "labels_data = da.from_zarr(str(registered_labels_zarr_path/\"arr_0\"))\n", "labels_data = labels_data.transpose(2, 0, 1) # Change shape from (y, x, z) to (z, y, x)\n", "labels_data = labels_data.compute()" ] }, { "cell_type": "code", "execution_count": null, "id": "5c4067c5", "metadata": {}, "outputs": [], "source": [ "colors = {\n", " i: tuple([v / 255.0 for v in color])\n", " for i, color in enumerate(class_names_colors.values(), start=1)\n", "}\n", "colors[0] = (0, 0, 0, 0) # Make background transparent\n", "colors[None] = (0, 0, 0, 0) # Also make None transparent\n", "\n", "labels = dict(enumerate(class_names_colors.keys(), start=1))\n", "labels[0] = \"unassigned\"\n", "\n", "viewer = napari.Viewer()\n", "viewer.add_labels(\n", " labels_data,\n", " name=\"Registered Class Labels\",\n", " colormap=colors,\n", " axis_labels=(\"z\", \"y\", \"x\"),\n", " opacity=1.0,\n", " scale=(2.0, 1.0, 1.0),\n", ")\n", "napari.run()" ] }, { "cell_type": "code", "execution_count": 5, "id": "5dd373ea", "metadata": {}, "outputs": [], "source": [ "surface_meshes = {}\n", "for i_class, class_name in enumerate(class_names_colors.keys(), start=1):\n", " if class_name in (\"whitespace\", \"alveoli\", \"nonexpanded\"):\n", " continue # Skip whitespace class\n", " class_mask = labels_data == i_class\n", " verts, faces, _, _ = skimage.measure.marching_cubes(class_mask, level=0.5)\n", " surface_meshes[class_name] = (verts, faces)" ] }, { "cell_type": "code", "execution_count": 6, "id": "150ce1c2", "metadata": {}, "outputs": [], "source": [ "viewer = napari.Viewer()\n", "for class_name, (verts, faces) in surface_meshes.items():\n", " color = tuple([v / 255.0 for v in class_names_colors[class_name]])\n", " viewer.add_surface((verts, faces), name=class_name, colormap=color)\n", "napari.run()" ] }, { "cell_type": "code", "execution_count": null, "id": "cd848e2b", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "coda-visual", "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.18" } }, "nbformat": 4, "nbformat_minor": 5 }