From 2293f0eaf0a919cff1e5a6ba1e4a257e42358c09 Mon Sep 17 00:00:00 2001 From: s204159 <s204159@student.dtu.dk> Date: Fri, 12 Apr 2024 13:38:22 +0200 Subject: [PATCH] Cc documentation --- .../assets/screenshots/plot_cc_no_overlay.png | Bin 0 -> 4564 bytes docs/assets/screenshots/plot_cc_overlay.png | Bin 0 -> 6814 bytes docs/releases.md | 8 +++++- docs/stylesheets/extra.css | 4 +++ qim3d/processing/cc.py | 10 ++++++-- qim3d/viz/cc.py | 23 +++++++++++++++--- 6 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 docs/assets/screenshots/plot_cc_no_overlay.png create mode 100644 docs/assets/screenshots/plot_cc_overlay.png diff --git a/docs/assets/screenshots/plot_cc_no_overlay.png b/docs/assets/screenshots/plot_cc_no_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..67724d1bc47e2122b918ae1a62ca18d64f0c1496 GIT binary patch literal 4564 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 D1w^73 literal 0 HcmV?d00001 diff --git a/docs/assets/screenshots/plot_cc_overlay.png b/docs/assets/screenshots/plot_cc_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..7d9a79fd385b29225de6636cc445d68189296385 GIT binary patch literal 6814 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 literal 0 HcmV?d00001 diff --git a/docs/releases.md b/docs/releases.md index 3265d5d2..b4e7ba33 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -9,16 +9,22 @@ As the library is still in its early development stages, **there may be breaking And remember to keep your pip installation [up to date](/qim3d/#upgrade) so that you have the latest features! +### v0.3.4 (coming soon!) +- Documentation for `qim3d.viz.plot_cc` + + ### v0.3.3 (11/04/2024) - Introduction of `qim3d.viz.slicer` (and also `qim3d.viz.orthogonal` ) 🎉 - Introduction of `qim3d.gui.annotation_tool` 🎉 - Introduction of `qim3d.processing.Blob` for blob detection 🎉 - Introduction of `qim3d.processing.local_thickness` 🎉 - Introduction of `qim3d.processing.structure_tensor` 🎉 -- Support for loading DICOM files with `qim3d.io.load`🎉 +- Support for loading DICOM files with `qim3d.io.load` - Introduction of `qim3d.processing.get_3d_cc` for 3D connected components and `qim3d.viz.plot_cc` for associated visualization 🎉 - Introduction of `qim3d.viz.colormaps` for easy visualization of e.g. multi-label segmentation results 🎉 - Introduction of `qim3d.processing.operations.background_removal` 🎉 +- Documentation refactoring +- Fixed bug preventing `Data Explorer` to show files ### v0.3.2 (23/02/2024) diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index ba35334e..d5d3f1dc 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -96,4 +96,8 @@ code { .md-typeset .admonition.example, .md-typeset details.example { border-color: #ff9900; +} + +.md-typeset .example>.admonition-title:after, .md-typeset .example>summary:after { + color: #ff9900; } \ No newline at end of file diff --git a/qim3d/processing/cc.py b/qim3d/processing/cc.py index 0cc7cee7..d6ec0e85 100644 --- a/qim3d/processing/cc.py +++ b/qim3d/processing/cc.py @@ -72,7 +72,7 @@ class CC: def get_3d_cc(image: np.ndarray | torch.Tensor) -> CC: - """ Get the connected components of a 3D volume. + """ Returns an object (CC) containing the connected components of the input volume. Use plot_cc to visualize the connected components. Args: image (np.ndarray | torch.Tensor): An array-like object to be labeled. Any non-zero values in `input` are @@ -80,8 +80,14 @@ def get_3d_cc(image: np.ndarray | torch.Tensor) -> CC: Returns: CC: A ConnectedComponents object containing the connected components and the number of connected components. + + Example: + ```python + import qim3d + vol = qim3d.examples.cement_128x128x128[50:150]<60 + cc = qim3d.processing.get_3d_cc(vol) + ``` """ connected_components, num_connected_components = label(image) log.info(f"Total number of connected components found: {num_connected_components}") - return CC(connected_components, num_connected_components) diff --git a/qim3d/viz/cc.py b/qim3d/viz/cc.py index 0f3ac8fd..7efee492 100644 --- a/qim3d/viz/cc.py +++ b/qim3d/viz/cc.py @@ -1,8 +1,11 @@ -import numpy as np import matplotlib.pyplot as plt +import numpy as np + +from qim3d.io.logger import log +from qim3d.processing.cc import CC from qim3d.viz import slices from qim3d.viz.colormaps import objects as qim3dCmap -from qim3d.processing.cc import CC + def plot_cc( connected_components, @@ -14,11 +17,11 @@ def plot_cc( **kwargs, ) -> list[plt.Figure]: """ - Plot the connected components of an image. + Plots the connected components from a `qim3d.processing.cc.CC` object. If an overlay image is provided, the connected component will be masked to the overlay image. Parameters: connected_components (CC): The connected components object. - components (list | tuple, optional): The components to plot. If None the first max_cc_to_plot=32 components will be plotted. Defaults to None. + component_indexs (list | tuple, optional): The components to plot. If None the first max_cc_to_plot=32 components will be plotted. Defaults to None. max_cc_to_plot (int, optional): The maximum number of connected components to plot. Defaults to 32. overlay (optional): Overlay image. Defaults to None. crop (bool, optional): Whether to crop the image to the cc. Defaults to False. @@ -27,6 +30,18 @@ def plot_cc( Returns: figs (list[plt.Figure]): List of figures, if `show=False`. + + Example: + ```python + import qim3d + vol = qim3d.examples.cement_128x128x128[50:150] + vol_bin = vol<80 + cc = qim3d.processing.get_3d_cc(vol_bin) + qim3d.viz.plot_cc(cc, crop=True, show=True, overlay=None, n_slices=5, component_indexs=[4,6,7]) + qim3d.viz.plot_cc(cc, crop=True, show=True, overlay=vol, n_slices=5, component_indexs=[4,6,7]) + ``` +  +  """ # if no components are given, plot the first max_cc_to_plot=32 components if component_indexs is None: -- GitLab