Mahotas - 影像區域極小值



影像中的區域極小值是指畫素強度值最低的點。在影像中,形成區域極小值的區域是所有其他區域中最暗的。區域極小值也稱為全域性極小值。

區域極小值考慮整個影像,而區域性極小值僅考慮區域性鄰域,以找到強度最低的畫素。

區域極小值是區域性極小值的一個子集,因此所有區域極小值都是區域性極小值,但並非所有區域性極小值都是區域極小值。

一張影像可以包含多個區域極小值,但所有區域極小值的強度都相同。發生這種情況是因為區域極小值只考慮最低強度值。

Mahotas 中的影像區域極小值

在 Mahotas 中,我們可以使用 **mahotas.regmin()** 函式來查詢影像中的區域極小值。區域極小值透過影像內的強度谷來識別,因為它們表示低強度區域。

區域極小值點以白色突出顯示在黑色背景上,黑色背景表示正常點。

mahotas.regmin() 函式

mahotas.regmax() 函式從輸入灰度影像獲取區域極小值。它輸出一個影像,其中 1 表示區域極小值點的存在,0 表示正常點。

regmin() 函式使用基於形態學重建的方法來查詢區域極小值。在這裡,每個區域性極小值區域的強度值與其相鄰的區域性極小值區域進行比較。

如果發現鄰居具有較低的強度,則它將成為新的區域極小值。此過程持續進行,直到沒有強度較低的區域剩餘,這表明已識別出區域極小值。

語法

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

mahotas.regmin(f, Bc={3×3 cross}, out={np.empty(f.shape, bool)})

其中,

  • **f** - 輸入灰度影像。

  • **Bc(可選)** - 用於連線的結構元素。

  • **out(可選)** - 布林資料型別的輸出陣列(預設為與 f 大小相同的新的陣列)。

示例

在以下示例中,我們使用 mh.regmin() 函式獲取影像的區域極小值。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('sea.bmp')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Getting the regional minima
regional_minima = mh.regmin(image)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the regional minima
axes[1].imshow(regional_minima, cmap='gray')
axes[1].set_title('Regional Minima')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

輸出

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

Minima Image

使用自定義結構元素

我們還可以使用自定義結構元素從影像中獲取區域極小值。

在 Mahotas 中,從影像中獲取區域極小值時,我們可以使用自定義結構元素來定義相鄰畫素的連線方式。我們可以使用它來根據我們的需要獲取結果影像。可以透過將結構元素傳遞給 regmin() 函式中的 **Bc** 引數來實現。

例如,讓我們考慮自定義結構元素:**[[1, 1, 1, 1, 0], [1, 1, 0, 1,1], [0, 1, 1, 1, 1], [1, 1, 1, 0, 1], [1, 0, 1, 1, 1]]。**此結構元素表示水平和垂直連線。這意味著只有水平左側或右側以及垂直上方或下方的畫素被視為其鄰居。

示例

在這裡,我們使用自定義結構元素來獲取影像的區域極小值。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('tree.tiff')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Setting custom structuring element
struct_element = np.array([[1, 1, 1, 1, 0],[1, 1, 0, 1, 1],
[0, 1, 1, 1, 1],[1, 1, 1, 0, 1],[1, 0, 1, 1, 1]])
# Getting the regional minima
regional_minima = mh.regmin(image, Bc=struct_element)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the regional minima
axes[1].imshow(regional_minima, cmap='gray')
axes[1].set_title('Regional Minima')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

輸出

上述程式碼的輸出如下:

Structuring Element Image Mahotas

使用影像的特定區域

我們還可以找到影像特定區域的區域極小值。影像的特定區域是指較大影像的一小部分。可以透過裁剪原始影像以去除不必要的區域來提取特定區域。

在 Mahotas 中,我們可以使用影像的一部分並獲取其區域極小值。首先,我們透過提供 x 和 y 軸的尺寸從原始影像中獲取特定區域。

然後我們使用裁剪後的影像並使用 regmin() 函式獲取區域極小值。

例如,假設我們將 **[:900, :800]** 指定為 x 和 y 軸的尺寸。然後,特定區域將在 x 軸的 0 到 900 畫素和 y 軸的 0 到 800 畫素範圍內。

示例

在下面提到的示例中,我們正在獲取影像特定區域內的區域極小值。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('sun.png')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Using specific regions of the image
image = image[:900, :800]
# Getting the regional minima
regional_minima = mh.regmin(image)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the regional minima
axes[1].imshow(regional_minima, cmap='gray')
axes[1].set_title('Regional Minima')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

輸出

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

Specific Region Image Mohatas
廣告