Mahotas - 標籤區域的權重



在影像分析的背景下,影像可以分割成感興趣的區域。這些區域通常用唯一的識別符號或標籤進行標記。標籤區域的權重提供了一個聚合值,表示該區域內所有畫素的綜合貢獻。

換句話說,影像中標記區域的權重是指該區域內畫素強度的總和。

為了計算權重,我們將標記區域內的畫素強度相加。畫素強度是指與影像中每個畫素相關的數值,它可以表示亮度或顏色等屬性。

透過對畫素強度求和,我們得到一個單一的值,表示標記區域內的整體“質量”或“數量”。

Mahotas中標記區域的權重

在Mahotas中,可以使用`mahotas.labeled_sum()`函式計算標記區域的權重。

Mahotas中的標記區域由標記影像表示,其中每個畫素都分配了一個唯一的標籤,對應於它所屬的區域。

為了更清晰地理解這一點,讓我們考慮一個灰度影像,其中每個畫素代表一個標量強度值。標記影像透過將此灰度影像分割成不同的區域併為每個區域分配一個唯一標籤而獲得。

`mahotas.labeled_sum()`函式

`mahotas.labeled_sum()`函式接受輸入陣列和標記陣列作為輸入。它根據標記陣列中對應的標籤,計算輸入陣列中每個標記區域的畫素值之和。

生成的陣列包含每個標記區域的畫素值之和,陣列的每個元素對應一個唯一的標籤。

語法

以下是Mahotas中`labeled_sum()`函式的基本語法:

mahotas.labeled_sum(array, labeled, minlength=None)

其中,

  • array − 表示影像或資料的NumPy陣列。

  • labeled − 與`array`形狀相同的標記陣列,其中每個區域都分配了一個唯一的整數標籤。

  • minlength (可選) − 指定結果陣列最小長度的整數。如果提供,則該函式會用零填充結果陣列以達到此長度。

示例

以下是確定影像標記區域權重的基本示例:

import mahotas as mh
import numpy as np
from pylab import imshow, show
# Generate a grayscale image
image = mh.imread('tree.tiff')
# Generate a labeled array
labeled = mh.imread('sea.bmp')
# Calculate the sum of pixel values for each labeled region
result = mh.labeled_sum(image, labeled)
print(result)
輸出

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

[ 30 115  58 157 226 154 169  24  63  48 124 123 159 146  44 163 202 174
 208  30  39 109 100 221 245 101  16 162  42   0 214  71  46  31 110 197
  91 137 118 192 104 119 139  23 198 176 219 192  60   1 218 143  67 122
 249  14 165  70 159  16  18 204 135 185  74 175 110  39   8  98 208 238
  86 169  42  21  39 129 100 146 162  48 217 228 204  30  54 164 174  80
 144 172 232 115  48 165 136 234  37 147 195 242   2 227  75   6  95 100
  92 230 200  96  93  59  30  28  60 122 213  65 133  53  58  91 191  36
 174 106  95  25 201  70  73 234  59  76   2 207 238  66  87 140 174 222
 122 239  37  79 220  57 126  38 150 236  60  37 196  58 236 241 148 207
 253  56 103  79  72  71  47 242 169   8  88  19 176  16 195  88 134 188
 205  78 248  96 156  86  35  57  69 241 142 203 198 182 165  31 127  36
 227  47 195  47 117 217 134  45  50  95  76  47  34 182  21 140 138 192
  17 232 158 182 162 136 104 145 229 165  33 107  14 117 185 115  73 129
 217 105 244   0  63 124   0   0 109  56   0 107]

具有最小長度的標記區域的權重

要計算具有最小長度的標記區域的權重,我們需要將'minlength'引數傳遞給Mahotas中的`labeled_sum()`函式。

透過設定最小長度值,只有長度等於或大於指定最小長度的區域才會在權重計算過程中被考慮。

此功能允許我們過濾掉較小的區域,並關注較大且可能更重要的區域。

如果任何區域不滿足最小長度要求,則該區域的權重被賦值為'0'。

示例

在這裡,我們透過指定最小長度來計算標記區域的權重:

import mahotas as mh
import numpy as np
image = mh.imread('tree.tiff')
# Perform labeling to obtain the labeled image
labeled_img, n_labels = mh.label(image)
# Calculate the weight of each labeled region with a minimum length of 2
weights = mh.labeled_sum(image, labeled_img, minlength=2)
# Print the weights of each labeled region
for label, weight in enumerate(weights, start=1):
   print(f"Weight of region {label}: {weight}")

輸出

上述程式碼的輸出如下:

Weight of region 1:  0
Weight of region 2: 40
Weight of region 3: 86
Weight of region 4: 37

具有自定義標籤的標記區域的權重

要計算具有自定義標籤的標記區域的權重,首先,生成一個自定義標記影像,其中每個區域都分配了一個特定的標籤。

標記影像將具有與原始影像相同的尺寸,每個畫素根據其所屬的區域分配相應的標籤值。然後,計算標記區域的權重。

示例

現在,我們嘗試計算具有自定義標籤的標記區域的權重:

import mahotas as mh
import numpy as np
# Generate a binary image
binary_img = np.array([[0, 1, 0, 0],[1, 1, 1, 0],[0, 0, 0, 1]])
# Generate a custom labeled image with specific labels
labeled_img = np.array([[0, 1, 0, 0],[2, 2, 2, 0],[0, 0, 0, 3]])
# Calculate the weight of each labeled region
weights = mh.labeled_sum(binary_img, labeled_img)
# Print the weights of each labeled region
for label, weight in enumerate(weights, start=1):
   print(f"Weight of region {label}: {weight}")

輸出

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

Weight of region 1: 0
Weight of region 2: 1
Weight of region 3: 3
Weight of region 4: 1
廣告