Mahotas - 尤拉數



想象一下,你有一幅畫,上面有不同的形狀。尤拉數允許我們計算這些形狀中有多少個孔,以及它們可以分成多少個獨立的部分(連通分量)。這有助於分析和表徵影像的結構。

數學上,它可以定義為:

E = C - H

其中,E 是尤拉數,C 是連通分量的數量,H 是影像中孔的數量。

Mahotas 中的影像尤拉數

在 Mahotas 中,可以使用 mahotas.euler() 函式計算尤拉數。此函式以二值影像作為輸入,其中感興趣的物件由白色畫素表示,背景由黑色畫素表示。然後,它根據影像中存在的物件的連通性和孔來計算尤拉數。

使用 mahotas.euler() 函式

mahotas.euler() 函式以二值影像作為輸入,並返回尤拉特徵值(整數)。

尤拉特徵是一種拓撲度量,用於描述影像中物件的連通性和形狀。它定義為影像中連通分量數量與孔的數量之差。

以下是 mahotas 中 euler() 函式的基本語法:

mahotas.euler(f, n=8)

其中,'f' 是一個二維二值影像,'n' 是連通分量(整數),值為 4 或 8(預設為 8)。

示例

在下面的示例中,我們透過將“nature.jpeg”載入為灰度影像,然後對其進行閾值處理以建立二值影像,來計算二值影像的尤拉數:

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)
輸出

以下是上述程式碼的輸出:

Euler Number: -2.75

不同連通性的尤拉數

我們還可以使用 euler() 函式在 Mahotas 中計算不同連通性的尤拉數。連通性引數決定計算中考慮哪些相鄰畫素。

例如,使用連通性-4 只考慮直接的水平和垂直鄰居,而連通性-8 還包括對角鄰居。

示例

在這裡,我們正在計算“nature.jpeg”影像的不同連通性的尤拉數:

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)

輸出

上述程式碼的輸出如下:

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

使用標記影像計算尤拉數

標記影像將唯一的整數標籤分配給二值影像中的連通分量。

在 Mahotas 中,euler 函式將標記影像作為輸入,並返回整個影像的尤拉數。計算考慮了物件的數量、孔的數量以及物件之間的通道數量。

示例

在這裡,我們正在計算從“sea.bmp”影像派生的標記影像的尤拉數:

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)

輸出

執行上述程式碼後,我們將得到以下輸出:

Euler Number: -44.75

使用二值影像計算尤拉數

在 Mahotas 中,可以使用 euler() 函式計算二值影像的尤拉數。透過載入二值影像並將其轉換為布林格式,euler 函式將影像作為輸入,並返回尤拉數(整數)。

示例

在下面給出的示例中,我們使用 Mahotas 計算從“nature.jpeg”影像建立的二值影像的尤拉數:

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)

輸出

獲得的結果如下:

Euler number of the binary image is: -4.75
廣告