diff --git a/docs/notebooks/blob_detection.ipynb b/docs/notebooks/blob_detection.ipynb index 86f6d94691fed612a44439db08d3382fa2d47c6b..d23662f96887ba47594d1cf426a7aa8164655b8e 100644 --- a/docs/notebooks/blob_detection.ipynb +++ b/docs/notebooks/blob_detection.ipynb @@ -73,13 +73,13 @@ "cement = qim3d.examples.cement_128x128x128\n", "\n", "# Visualize slices of the original cement volume\n", - "qim3d.viz.slices(cement, n_slices = 5, show = True)\n", + "qim3d.viz.slices_grid(cement, n_slices = 5, show = True)\n", "\n", "# Apply Gaussian filter to the cement volume\n", "cement_filtered = qim3d.processing.gaussian(cement, sigma = 2)\n", "\n", "# Visualize slices of the filtered cement volume\n", - "qim3d.viz.slices(cement_filtered)" + "qim3d.viz.slices_grid(cement_filtered)" ] }, { diff --git a/docs/notebooks/local_thickness.ipynb b/docs/notebooks/local_thickness.ipynb index 717c854639f539f7035e42efdcf27048e180189b..ee405d830d89bad317b4871764bb1b3a7a0077f0 100644 --- a/docs/notebooks/local_thickness.ipynb +++ b/docs/notebooks/local_thickness.ipynb @@ -179,13 +179,13 @@ "cement = qim3d.examples.cement_128x128x128\n", "\n", "# Visualize slices of the original cement volume\n", - "qim3d.viz.slices(cement, n_slices = 5, show = True)\n", + "qim3d.viz.slices_grid(cement, n_slices = 5, show = True)\n", "\n", "# Apply Gaussian filter to the cement volume\n", "cement_filtered = qim3d.processing.gaussian(cement, sigma = 2)\n", "\n", "# Visualize slices of the filtered cement volume\n", - "qim3d.viz.slices(cement_filtered)" + "qim3d.viz.slices_grid(cement_filtered)" ] }, { diff --git a/docs/releases.md b/docs/releases.md index ff67814f84c819bfd5923c13182adb85a307cfea..cee2d6a410e228ecd75e4d9a1f1b4d84e26e146f 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -114,7 +114,7 @@ This version focus on the increased usability of the `qim3d` library - Online documentation available at [https://platform.qim.dk/qim3d](https://platform.qim.dk/qim3d) - Virtual stacks also available for `txm` files - Updated GUI launch pipeline -- New functionalities for `qim3d.viz.slices` +- New functionalities for `qim3d.viz.slices_grid` - Introduction of `qim3d.processing.filters` 🎉 - Introduction of `qim3d.viz.vol` 🎉 @@ -140,7 +140,7 @@ Includes new develoments toward the usability of the library, as well as its int - For the local thicknes GUI, now it is possible to pass and receive numpy arrays instead of using the upload functionality. - Improved data loader - Now the extensions `tif`, `h5` and `txm` are supported. -- Added `qim3d.viz.slices` for easy slice visualization. +- Added `qim3d.viz.slices_grid` for easy slice visualization. - U-net model creation - Model availabe from `qim3d.models.UNet` - Data augmentation class at `qim3d.utils.Augmentation` diff --git a/qim3d/filters.py b/qim3d/filters.py index 3c3c1a5b02e432e53a0fe1358e9db81a306272c4..f5e7a9c1ac88446a2fadf6d22b3de46a258fa659 100644 --- a/qim3d/filters.py +++ b/qim3d/filters.py @@ -119,7 +119,7 @@ class Pipeline: vol = qim3d.examples.fly_150x256x256 # Show original - qim3d.viz.slices(vol, axis=0, show=True) + qim3d.viz.slices_grid(vol, axis=0, show=True) # Create filter pipeline pipeline = Pipeline( @@ -134,7 +134,7 @@ class Pipeline: vol_filtered = pipeline(vol) # Show filtered - qim3d.viz.slices(vol_filtered, axis=0) + qim3d.viz.slices_grid(vol_filtered, axis=0) ```   diff --git a/qim3d/generate/blob_.py b/qim3d/generate/blob_.py index 153bdcfc86c898f3802dc18a3450efba24fe4e10..dcfa48a81730cda181ea4e80e1630419c497dcce 100644 --- a/qim3d/generate/blob_.py +++ b/qim3d/generate/blob_.py @@ -52,7 +52,7 @@ def blob( ```python # Visualize slices - qim3d.viz.slices(synthetic_blob, vmin = 0, vmax = 255, n_slices = 15) + qim3d.viz.slices_grid(synthetic_blob, vmin = 0, vmax = 255, n_slices = 15) ```  @@ -76,7 +76,7 @@ def blob( ```python # Visualize slices - qim3d.viz.slices(vol, n_slices=15, axis=1) + qim3d.viz.slices_grid(vol, n_slices=15, axis=1) ```  @@ -100,7 +100,7 @@ def blob( ```python # Visualize - qim3d.viz.slices(vol, n_slices=15) + qim3d.viz.slices_grid(vol, n_slices=15) ```  """ diff --git a/qim3d/generate/collection_.py b/qim3d/generate/collection_.py index dc54da7e5efa65ee5dea5643fa7eed26fe90e475..63a01de1fc3156bf37139dbbc6ea85de5c12e61d 100644 --- a/qim3d/generate/collection_.py +++ b/qim3d/generate/collection_.py @@ -255,7 +255,7 @@ def collection( ```python # Visualize slices - qim3d.viz.slices(vol, n_slices=15) + qim3d.viz.slices_grid(vol, n_slices=15) ```  @@ -285,7 +285,7 @@ def collection( ```python # Visualize slices - qim3d.viz.slices(vol, n_slices=15, axis=1) + qim3d.viz.slices_grid(vol, n_slices=15, axis=1) ```  """ diff --git a/qim3d/processing/operations.py b/qim3d/processing/operations.py index bf6f16f4b33c2d7b9606f0ba57bff2aa35732f9f..d55684b15c13e2c7a6809c27e9c894525f055eed 100644 --- a/qim3d/processing/operations.py +++ b/qim3d/processing/operations.py @@ -29,7 +29,7 @@ def remove_background( import qim3d vol = qim3d.examples.cement_128x128x128 - qim3d.viz.slices(vol, vmin=0, vmax=255) + qim3d.viz.slices_grid(vol, vmin=0, vmax=255) ```  @@ -37,7 +37,7 @@ def remove_background( vol_filtered = qim3d.processing.operations.remove_background(vol, min_object_radius=3, background="bright") - qim3d.viz.slices(vol_filtered, vmin=0, vmax=255) + qim3d.viz.slices_grid(vol_filtered, vmin=0, vmax=255) ```  """ diff --git a/qim3d/segmentation/standard.py b/qim3d/segmentation/standard.py index 333b2da0ad6009f0f6851299e49fcef9c81d9679..c817238331eb44bdad4c57ea3ce4dfc1e926a7a1 100644 --- a/qim3d/segmentation/standard.py +++ b/qim3d/segmentation/standard.py @@ -26,7 +26,7 @@ def watershed(bin_vol: np.ndarray, min_distance: int = 5) -> tuple[np.ndarray, i vol = qim3d.examples.cement_128x128x128 binary = qim3d.processing.filters.gaussian(vol, sigma = 2)<60 - qim3d.viz.slices(binary, axis=1) + qim3d.viz.slices_grid(binary, axis=1) ```  @@ -34,7 +34,7 @@ def watershed(bin_vol: np.ndarray, min_distance: int = 5) -> tuple[np.ndarray, i labeled_volume, num_labels = qim3d.processing.operations.watershed(binary) cmap = qim3d.viz.colormaps.objects(num_labels) - qim3d.viz.slices(labeled_volume, axis = 1, cmap = cmap) + qim3d.viz.slices_grid(labeled_volume, axis = 1, cmap = cmap) ```  diff --git a/qim3d/tests/viz/test_img.py b/qim3d/tests/viz/test_img.py index bcbed39d1cfca3dc5179c8b33c19527a9a5db81e..ec9599105a9cdccb3d44fdfa048f0a452cd47c8a 100644 --- a/qim3d/tests/viz/test_img.py +++ b/qim3d/tests/viz/test_img.py @@ -52,14 +52,14 @@ def test_grid_pred(): # unit tests for slices function def test_slices_numpy_array_input(): example_volume = np.ones((10, 10, 10)) - fig = qim3d.viz.slices(example_volume, n_slices=1) + fig = qim3d.viz.slices_grid(example_volume, n_slices=1) assert isinstance(fig, plt.Figure) def test_slices_wrong_input_format(): input = "not_a_volume" with pytest.raises(ValueError, match="Data type not supported"): - qim3d.viz.slices(input) + qim3d.viz.slices_grid(input) def test_slices_not_volume(): @@ -68,7 +68,7 @@ def test_slices_not_volume(): ValueError, match="The provided object is not a volume as it has less than 3 dimensions.", ): - qim3d.viz.slices(example_volume) + qim3d.viz.slices_grid(example_volume) def test_slices_wrong_position_format1(): @@ -77,7 +77,7 @@ def test_slices_wrong_position_format1(): ValueError, match='Position not recognized. Choose an integer, list of integers or one of the following strings: "start", "mid" or "end".', ): - qim3d.viz.slices(example_volume, position="invalid_slice") + qim3d.viz.slices_grid(example_volume, position="invalid_slice") def test_slices_wrong_position_format2(): @@ -86,7 +86,7 @@ def test_slices_wrong_position_format2(): ValueError, match='Position not recognized. Choose an integer, list of integers or one of the following strings: "start", "mid" or "end".', ): - qim3d.viz.slices(example_volume, position=1.5) + qim3d.viz.slices_grid(example_volume, position=1.5) def test_slices_wrong_position_format3(): @@ -95,7 +95,7 @@ def test_slices_wrong_position_format3(): ValueError, match='Position not recognized. Choose an integer, list of integers or one of the following strings: "start", "mid" or "end".', ): - qim3d.viz.slices(example_volume, position=[1, 2, 3.5]) + qim3d.viz.slices_grid(example_volume, position=[1, 2, 3.5]) def test_slices_invalid_axis_value(): @@ -104,14 +104,14 @@ def test_slices_invalid_axis_value(): ValueError, match="Invalid value for 'axis'. It should be an integer between 0 and 2", ): - qim3d.viz.slices(example_volume, axis=3) + qim3d.viz.slices_grid(example_volume, axis=3) def test_slices_interpolation_option(): example_volume = np.ones((10, 10, 10)) img_width = 3 interpolation_method = "bilinear" - fig = qim3d.viz.slices( + fig = qim3d.viz.slices_grid( example_volume, n_slices=1, img_width=img_width, @@ -130,7 +130,7 @@ def test_slices_multiple_slices(): example_volume = np.ones((10, 10, 10)) img_width = 3 n_slices = 3 - fig = qim3d.viz.slices(example_volume, n_slices=n_slices, img_width=img_width) + fig = qim3d.viz.slices_grid(example_volume, n_slices=n_slices, img_width=img_width) # Add assertions for the expected number of subplots in the figure assert len(fig.get_axes()) == n_slices @@ -141,13 +141,13 @@ def test_slices_axis_argument(): img_width = 3 # Call the function with different values of the axis - fig_axis_0 = qim3d.viz.slices( + fig_axis_0 = qim3d.viz.slices_grid( example_volume, n_slices=1, img_width=img_width, axis=0 ) - fig_axis_1 = qim3d.viz.slices( + fig_axis_1 = qim3d.viz.slices_grid( example_volume, n_slices=1, img_width=img_width, axis=1 ) - fig_axis_2 = qim3d.viz.slices( + fig_axis_2 = qim3d.viz.slices_grid( example_volume, n_slices=1, img_width=img_width, axis=2 ) diff --git a/qim3d/viz/cc.py b/qim3d/viz/cc.py index b7dd999ec409e8094aac1b04f02f23d21173966a..5870a6f7323599c56974968c6a09fbcdd0b8c3d6 100644 --- a/qim3d/viz/cc.py +++ b/qim3d/viz/cc.py @@ -30,7 +30,7 @@ def plot_cc( cmap (str, optional): Specifies the color map for the image. Defaults to "viridis". vmin (float, optional): Together with vmax define the data range the colormap covers. By default colormap covers the full range. Defaults to None. vmax (float, optional): Together with vmin define the data range the colormap covers. By default colormap covers the full range. Defaults to None - **kwargs: Additional keyword arguments to pass to `qim3d.viz.slices`. + **kwargs: Additional keyword arguments to pass to `qim3d.viz.slices_grid`. Returns: figs (list[plt.Figure]): List of figures, if `show=False`. @@ -75,14 +75,14 @@ def plot_cc( else: cc = connected_components.get_cc(component, crop=False) overlay_crop = np.where(cc == 0, 0, overlay) - fig = qim3d.viz.slices(overlay_crop, show=show, cmap = cmap, vmin = vmin, vmax = vmax, **kwargs) + fig = qim3d.viz.slices_grid(overlay_crop, show=show, cmap = cmap, vmin = vmin, vmax = vmax, **kwargs) else: # assigns discrete color map to each connected component if not given if "cmap" not in kwargs: kwargs["cmap"] = qim3d.viz.colormaps.objects(len(component_indexs)) # Plot the connected component without overlay - fig = qim3d.viz.slices( + fig = qim3d.viz.slices_grid( connected_components.get_cc(component, crop=crop), show=show, **kwargs ) diff --git a/qim3d/viz/colormaps.py b/qim3d/viz/colormaps.py index 807a083885544eb2901ccb86261f1fd834b12100..d7e00fe81da9b71534459cf9224bf5e83e24afdd 100644 --- a/qim3d/viz/colormaps.py +++ b/qim3d/viz/colormaps.py @@ -89,7 +89,7 @@ def objects( Tip: It can be easily used when calling visualization functions as ```python - qim3d.viz.slices(segmented_volume, cmap = 'objects') + qim3d.viz.slices_grid(segmented_volume, cmap = 'objects') ``` which automatically detects number of unique classes and creates the colormap object with defualt arguments. diff --git a/qim3d/viz/data_exploration.py b/qim3d/viz/data_exploration.py index f2b958ac5dbbec378426ae700d3109c2f526aa22..8db6ade9c484da0864819778583ee82db02fc3b8 100644 --- a/qim3d/viz/data_exploration.py +++ b/qim3d/viz/data_exploration.py @@ -77,7 +77,7 @@ def slices_grid( import qim3d vol = qim3d.examples.shell_225x128x128 - qim3d.viz.slices_grid(vol, num_slices=15) + qim3d.viz.slices_grid_grid(vol, num_slices=15) ```  """ @@ -690,7 +690,7 @@ def chunks(zarr_path: str, **kwargs): viz_widget = widgets.Output() with viz_widget: viz_widget.clear_output(wait=True) - fig = qim3d.viz.slices_grid(chunk, **kwargs) + fig = qim3d.viz.slices_grid_grid(chunk, **kwargs) display(fig) elif visualization_method == "volume": viz_widget = widgets.Output() diff --git a/qim3d/viz/detection.py b/qim3d/viz/detection.py index fcf493cd7e550aa183f09e2dbae56c9e7bc3de7c..6b3e606635b4c4802753d99e2354e9987e1e0e39 100644 --- a/qim3d/viz/detection.py +++ b/qim3d/viz/detection.py @@ -29,7 +29,7 @@ def circles(blobs, vol, alpha=0.5, color="#ff9900", **kwargs): def _slicer(z_slice): clear_output(wait=True) - fig = qim3d.viz.slices( + fig = qim3d.viz.slices_grid( vol, n_slices=1, position=z_slice,