Detecting blobs on an image#

This example shows how to detect blobs on an image with DataLab, and also covers other features such as the plugin system:

  • Add a new plugin to DataLab

  • Denoise an image

  • Detect blobs on an image

  • Save the workspace to a file

First, we open DataLab, and open the settings dialog (using ā€œFile > Settingsā€¦ā€, or the libre-gui-settings icon in the toolbar).

../../_images/01.png

In the ā€œGeneralā€ tab, we can see the ā€œPlugins pathā€ field. This is the path where DataLab will look for plugins. We can add a new plugin by copying/pasting the plugin file in this directory.#

See also

The plugin system is described in the Plugins section.

Letā€™s add the cdl_example_imageproc.py plugin to DataLab (this is an example plugin that is shipped with DataLab source package, or may be downloaded from here on GitHub).

If we close and reopen DataLab, we can see that the plugin is now available in the ā€œPluginsā€ menu: there is a new ā€œExtract blobs (example)ā€ entry.

../../_images/02.png

The ā€œAbout DataLabā€ dialog shows the list of available plugins.#

../../_images/03.png

Letā€™s click on ā€œExtract blobs (example) > Generate test imageā€#

For information, the image is generated by the plugin using the following code:

def generate_test_image(self) -> None:
    """Generate test image"""
    # Create a NumPy array:
    arr = np.random.normal(10000, 1000, (2048, 2048))
    for _ in range(10):
        row = np.random.randint(0, arr.shape[0])
        col = np.random.randint(0, arr.shape[1])
        rr, cc = skimage.draw.disk((row, col), 40, shape=arr.shape)
        arr[rr, cc] -= np.random.randint(5000, 6000)
    icenter = arr.shape[0] // 2
    rr, cc = skimage.draw.disk((icenter, icenter), 200, shape=arr.shape)
    arr[rr, cc] -= np.random.randint(5000, 8000)
    data = np.clip(arr, 0, 65535).astype(np.uint16)

    # Create a new image object and add it to the image panel
    image = cdl.obj.create_image("Test image", data, units=("mm", "mm", "lsb"))
    self.proxy.add_object(image)
../../_images/04.png

The plugin has generated a test image, and added it to the ā€œImagesā€ panel. The image shows a few blobs, with a central dark disk, and a noisy background.#

The plugin has other features, such as denoising the image, and detecting blobs on the image, but we wonā€™t cover them here: we will use the same DataLab native features as the plugin, manually.

The image is a bit noisy, and also quite large. Letā€™s reduce the size of the image while denoising it a bit by binning the image by a factor of 2.

../../_images/05.png

Click on ā€œOperations > Pixel binningā€.#

../../_images/06.png

The ā€œBinningā€ dialog opens. Set the binning factor to 2, and click on ā€œOKā€.#

../../_images/07.png

The binned image is added to the ā€œImagesā€ panel. It is now easier to see the blobs (even if they were already quite visible on the original image: this is just an example), and the image will be faster to process.#

Letā€™s apply a moving median filter to the image, to denoise it a bit more.

../../_images/08.png

Click on ā€œProcessing > Moving medianā€ entry, and set the window size to 5.#

../../_images/09.png

The filtered image is added to the ā€œImagesā€ panel. Denoising is quite efficient.#

Now, letā€™s detect the blobs on the image.

../../_images/10.png

Click on ā€œComputing > Blob detection > Blob detection (OpenCV)ā€.#

../../_images/11.png

The ā€œBlob detection (OpenCV)ā€ dialog opens. Set the parameters as shown on the screenshot, and click on ā€œOKā€.#

../../_images/12.png

The ā€œResultsā€ dialog opens, showing the detected blobs: one line per blob, with the blob coordinates and radius.#

Note

If you want to show the computing results again, you can select the ā€œShow resultsā€ show_results entry in the ā€œComputingā€ menu, or the ā€œShow resultsā€ show_results button, below the image list:

../../_images/121.png
../../_images/13.png

The detected blobs are also added to the image metadata, and can be seen in the visualization panel on the left.#

Finally, we can save the workspace to a file. The workspace contains all the images that were loaded in DataLab, as well as the processing results. It also contains the visualization settings (colormaps, contrast, etc.), the metadata, and the annotations. To save the workspace, click on ā€œFile > Save to HDF5 fileā€¦ā€, or the filesave_h5 button in the toolbar.

If you want to load the workspace again, you can use the ā€œFile > Open HDF5 fileā€¦ā€ (or the fileopen_h5 button in the toolbar) to load the whole workspace, or the ā€œFile > Browse HDF5 fileā€¦ā€ (or the h5browser button in the toolbar) to load only a selection of data sets from the workspace.