Mahotas - 影像橢圓軸



橢圓是一種幾何形狀,定義為平面中圍繞兩個焦點的一條曲線,使得對於曲線上的每個點,到兩個焦點的距離之和都是常數。

橢圓的長軸是指最長的直徑,它穿過橢圓上最遠的兩點。另一方面,短軸是最短的直徑,並且垂直於長軸,在橢圓的中心與長軸相交。

這些軸提供了有關物件或區域的大小、方向和縱橫比的資訊。

Mahotas中的影像橢圓軸

在Mahotas中處理橢圓時,軸被指定為兩個值的元組——長半軸和短半軸的長度。

Mahotas 提供了`mahotas.ellipse_axes()`函式,可以輕鬆地檢測影像中的橢圓並獲取其長軸和短軸長度。

使用ellipse.axes()函式

Mahotas中的`ellipse_axes()`函式用於檢測影像中的橢圓。此函式接受二值影像作為輸入,並返回長軸和短軸的長度。

語法

以下是查詢Mahotas中影像橢圓軸的基本語法:

mahotas.features.ellipse_axes(bwimage)

其中,`'bwimage'`是影像的單通道陣列,解釋為布林值。

示例

在下面的示例中,我們將學習如何在mahotas中查詢影像橢圓軸:

import mahotas as mh
import numpy as np
image=mh.imread('nature.jpeg', as_grey = True)
smajor,sminor = mh.features.ellipse_axes(image)
print(smajor,sminor)
輸出

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

739.0056545212358 336.5943563176811

將橢圓擬合到一組點

我們還可以透過在影像內生成隨機點來將橢圓擬合到特定的興趣點。使用NumPy庫中的`np.random.rand()`函式,在0和1之間均勻分佈生成隨機點。每個隨機數代表特定軸上的座標值。

為了確保生成的點落在影像邊界內:

  • 我們將隨機生成的數值乘以影像的形狀。
  • 影像的形狀表示影像的維度,作為一個元組(高度,寬度)。
  • 透過將隨機生成的數值乘以影像的形狀,我們有效地縮放點以匹配影像的維度。

生成的點表示為(x, y)座標,其中x代表影像的列索引,y代表影像的行索引。

示例

在這裡,我們嘗試將橢圓擬合到一組給定的點:

import numpy as np
import mahotas as mh
image = mh.imread('tree.tiff', as_grey=True)
# Generating a set of random points
np.random.seed(0)
points = np.random.rand(87, 2) * image.shape[:2]
# Fitting an ellipse to the set of points
# calculating the axes
major_axis, minor_axis = mh.features.ellipse_axes(points)
print(major_axis, minor_axis)

輸出

上述程式碼的輸出如下:

50.226155204899634 1.0

使用ROI將橢圓擬合到灰度影像

我們可以透過生成隨機興趣點來使用感興趣區域(ROI)將橢圓擬合到灰度影像。然後,我們需要建立一個二值影像,其中點設定為白色(畫素值255),背景為黑色(畫素值0)。

我們可以透過以下方式實現:

  • 初始化一個與原始影像形狀相同的零陣列。
  • 然後,將陣列中興趣點的索引設定為255,有效地將這些位置標記為興趣點。
  • 這個二值影像使我們能夠在擬合橢圓時隔離並關注我們想要分析的特定點,使我們能夠根據選擇的點準確地估計橢圓的引數。

示例

在這裡,我們使用感興趣區域將橢圓擬合到灰度影像:

import numpy as np
import mahotas as mh
image = mh.imread('sun.png', as_grey=True)
# Generating a binary image with points of interest
np.random.seed(0)
points = np.random.rand(100, 2) * image.shape[:2]
points = points.astype(int)
binary_image = np.zeros(image.shape, dtype=np.uint8)
binary_image[points[:, 0], points[:, 1]] = 255
# Fitting an ellipse to the points of interest
major_axis, minor_axis = mh.features.ellipse_axes(binary_image)
print(major_axis, minor_axis)

輸出

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

722.1261184969184 479.52790970346524
廣告