Mahotas - Euler Number of an Image



Imazine you have a drawing with different shapes on it. The Euler number allows us to count how many holes are in those shapes and how many separate parts they can be divided into (connected components). This can help in analyzing and characterizing the structure of the image.

Mathematically, it can be defined as −

E = C - H

where, E is the Euler number, C is the number of connected components, and H is the number of holes in the image.

Euler Number of an Image in Mahotas

In Mahotas, you can calculate the Euler number using the mahotas.euler() function. This function takes a binary image as input, where the objects of interest are represented by white pixels and the background is represented by black pixels. It then calculates the Euler number based on the connectivity and holes in the objects present in the image.

Using the mahotas.euler() Function

The mahotas.euler() function takes a binary image as input and returns the Euler characteristic value as an integer.

The Euler characteristic is a topological measure that describes the connectivity and shape of objects in an image. It is defined as the difference between the number of connected components and the number of holes in the image.

Following is the basic syntax of euler() function in mahotas −

mahotas.euler(f, n=8)

Where, 'f' is a 2−D binary image and 'n' is the connected component in integer which is either 4 or 8 (default is 8).

Example

In the following example, we are computing the Euler number of a binary image 'nature.jpeg' by loading it as a grayscale image and then thresholding it to create a binary image −

import mahotas as mh
import numpy as np
# Load binary image as a NumPy array
binary_image = mh.imread('nature.jpeg', as_grey=True) > 0
# Compute Euler number
euler_number = mh.euler(binary_image)
# Print result
print("Eu
ler Number:", euler_number)
Output

Following is the output of the above code −

Euler Number: -2.75

Euler Number with Different Connectivity

We can also calculate the Euler number with different connectivity in Mahotas using the euler() function. The connectivity parameter determines which neighboring pixels are considered in the calculation.

For example, using connectivity−4 considers only the immediate horizontal and vertical neighbors, while connectivity−8 includes diagonal neighbors as well.

Example

Here, we are calculating the Euler number with different connectivity for the "nature.jpeg" image −

import mahotas as mh
import numpy as np
# Load the image as a grayscale image
image = mh.imread('sun.png', as_grey=True)
# Threshold the image to create a binary image
thresholded_image = image > 0
# Compute the Euler number with 4-connectivity
euler_number_4conn = mh.euler(thresholded_image, 4)
# Compute the Euler number with 8-connectivity
euler_number_8conn = mh.euler(thresholded_image, 8)
# Print the results
print("Euler Number (4-connectivity):", euler_number_4conn)
print("Euler Number (8-connectivity):", euler_number_8conn)

Output

Output of the above code is as follows −

Euler Number (4-connectivity): -4.75
Euler Number (8-connectivity): -4.75

Euler Number Calculation with Labelled Image

A labeled image assigns unique integer labels to connected components in a binary image.

In Mahotas, the euler function takes a labelled image as input and returns the Euler number for the entire image. The calculation takes into account the number of objects, holes, and tunnels between objects.

Example

In here, we are calculating the Euler number of a labeled image derived from the "sea.bmp" image −

import mahotas as mh
import numpy as np
# Load the image as a grayscale image
image = mh.imread('sea.bmp', as_grey=True)
# Threshold the image to create a binary image
thresholded_image = image > 0
# Label the connected components in the binary image
labeled_image, num_labels = mh.label(thresholded_image)
# Compute the Euler number of the labeled image
euler_number = mh.euler(labeled_image)
# Print the result
print("Euler Number:", euler_number)

Output

After executing the above code, we get the following output −

Euler Number: -44.75

Euler Number Calculation with Binary Image

In Mahotas, the Euler number of a binary image can be calculated using the euler() function. By loading the binary image and converting it to a boolean format, the euler function takes the image as input and returns the Euler number as an integer.

Example

In the example given below, we are calculating the Euler number of a binary image created from the "nature.jpeg" image using Mahotas −

import mahotas as mh
# load binary image and convert to boolean format
image = mh.imread('sun.png', as_grey= True)
image = image.astype(bool)
# calculate the Euler number
euler_number = mh.euler(image)
# print the result
print("Euler number of the binary image is:", euler_number)

Output

The result obtained is as follows −

Euler number of the binary image is: -4.75
Advertisements