skimage.metrics
#
對應影像的度量,例如距離度量、相似度等。
計算 SNEMI3D 比賽定義的調整蘭德誤差。 |
|
傳回匹配分割中所有區域的列聯表。 |
|
計算給定影像的非零元素之間的 Hausdorff 距離。 |
|
傳回給定影像的非零元素之間 Hausdorff 距離的點對。 |
|
計算兩個影像之間的均方誤差。 |
|
計算正規化互信息 (NMI)。 |
|
計算兩個影像之間的正規化均方根誤差 (NRMSE)。 |
|
計算影像的峰值訊號雜訊比 (PSNR)。 |
|
計算兩個影像之間的平均結構相似性指數。 |
|
傳回與 VI 相關的對稱條件熵。 |
- skimage.metrics.adapted_rand_error(image_true=None, image_test=None, *, table=None, ignore_labels=(0,), alpha=0.5)[原始碼]#
計算 SNEMI3D 比賽定義的調整蘭德誤差。 [1]
- 參數:
- image_true整數的 ndarray
真值標籤影像,與 im_test 的形狀相同。
- image_test整數的 ndarray
測試影像。
- tablescipy.sparse 以 crs 格式表示的陣列,可選
使用 skimage.evaluate.contingency_table 建立的列聯表。如果為 None,則會即時計算。
- ignore_labels整數序列,可選
要忽略的標籤。使用這些值標記的真值影像的任何部分都不會計入分數中。
- alpha浮點數,可選
在調整蘭德誤差計算中,給予精確度和召回率的相對權重。
- 傳回:
- are浮點數
調整蘭德誤差。
- prec浮點數
調整蘭德精確度:這是測試標籤影像和真值影像中具有相同標籤的像素對的數量,除以測試影像中的數量。
- rec浮點數
調整蘭德召回率:這是測試標籤影像和真值影像中具有相同標籤的像素對的數量,除以真值影像中的數量。
備註
真值分割中標籤為 0 的像素將在分數中忽略。
調整蘭德誤差的計算方式如下
\(1 - \frac{\sum_{ij} p_{ij}^{2}}{\alpha \sum_{k} s_{k}^{2} + (1-\alpha)\sum_{k} t_{k}^{2}}\),其中 \(p_{ij}\) 是像素在測試影像和真值影像中具有相同標籤的機率,\(t_{k}\) 是像素在真值影像中具有標籤 \(k\) 的機率,而 \(s_{k}\) 是像素在測試影像中具有標籤 \(k\) 的機率。
預設行為是在調整蘭德誤差計算中,均等地權衡精確度和召回率。當 alpha = 0 時,調整蘭德誤差 = 召回率。當 alpha = 1 時,調整蘭德誤差 = 精確度。
參考文獻
[1]Arganda-Carreras I, Turaga SC, Berger DR, 等人。(2015) 群眾外包建立連線體的影像分割演算法。Front. Neuroanat. 9:142。 DOI:10.3389/fnana.2015.00142
- skimage.metrics.contingency_table(im_true, im_test, *, ignore_labels=None, normalize=False, sparse_type='matrix')[原始碼]#
傳回匹配分割中所有區域的列聯表。
- 參數:
- im_true整數的 ndarray
真值標籤影像,與 im_test 的形狀相同。
- im_test整數的 ndarray
測試影像。
- ignore_labels整數序列,可選
要忽略的標籤。使用這些值標記的真值影像的任何部分都不會計入分數中。
- normalize布林值
決定是否依像素計數正規化列聯表。
- sparse_type{"matrix", "array"},可選
cont
的傳回類型,可以是scipy.sparse.csr_array
或scipy.sparse.csr_matrix
(預設)。
- 傳回:
- contscipy.sparse.csr_matrix 或 scipy.sparse.csr_array
列聯表。
cont[i, j]
將等於在im_true
中標記為i
且在im_test
中標記為j
的體素數量。視sparse_type
而定,這可以當作scipy.sparse.csr_array
傳回。
- skimage.metrics.hausdorff_distance(image0, image1, method='standard')[原始碼]#
計算給定影像的非零元素之間的 Hausdorff 距離。
- 參數:
- image0、image1ndarray
在
True
表示包含在點集中的點的陣列。兩個陣列都必須具有相同的形狀。- method{'standard'、'modified'},可選,預設值 = 'standard'
用於計算 Hausdorff 距離的方法。
standard
是標準 Hausdorff 距離,而modified
是修改後的 Hausdorff 距離。
- 傳回:
- distance浮點數
使用歐幾里得距離,
image0
和image1
中非零像素的坐標之間的 Hausdorff 距離。
備註
Hausdorff 距離 [1] 是
image0
上任何點與image1
上最接近的點之間的最大距離,反之亦然。Dubuisson 等人的以下研究 [2] 顯示,修改後的 Hausdorff 距離 (MHD) 的效能優於有向 Hausdorff 距離 (HD)。此函數會計算向前和向後平均距離,並傳回兩者中較大者。參考文獻
[2]M. P. Dubuisson 和 A. K. Jain。用於物件匹配的修改後的 Hausdorff 距離。在 ICPR94 中,第 A:566-568 頁,耶路撒冷,以色列,1994。 DOI:10.1109/ICPR.1994.576361 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.1.8155
範例
>>> points_a = (3, 0) >>> points_b = (6, 0) >>> shape = (7, 1) >>> image_a = np.zeros(shape, dtype=bool) >>> image_b = np.zeros(shape, dtype=bool) >>> image_a[points_a] = True >>> image_b[points_b] = True >>> hausdorff_distance(image_a, image_b) 3.0
- skimage.metrics.hausdorff_pair(image0, image1)[原始碼]#
傳回給定影像的非零元素之間 Hausdorff 距離的點對。
Hausdorff 距離 [1] 是
image0
上任何點與image1
上最接近的點之間的最大距離,反之亦然。- 參數:
- image0、image1ndarray
在
True
表示包含在點集中的點的陣列。兩個陣列都必須具有相同的形狀。
- 傳回:
- point_a、point_b陣列
彼此之間具有 Hausdorff 距離的一對點。
參考文獻
範例
>>> points_a = (3, 0) >>> points_b = (6, 0) >>> shape = (7, 1) >>> image_a = np.zeros(shape, dtype=bool) >>> image_b = np.zeros(shape, dtype=bool) >>> image_a[points_a] = True >>> image_b[points_b] = True >>> hausdorff_pair(image_a, image_b) (array([3, 0]), array([6, 0]))
- skimage.metrics.mean_squared_error(image0, image1)[原始碼]#
計算兩個影像之間的均方誤差。
- 參數:
- image0、image1ndarray
影像。任何維度,都必須具有相同的形狀。
- 傳回:
- mse浮點數
均方誤差 (MSE) 度量。
備註
在 0.16 版本中變更:此函數已從
skimage.measure.compare_mse
重新命名為skimage.metrics.mean_squared_error
。
- skimage.metrics.normalized_mutual_information(image0, image1, *, bins=100)[原始碼]#
計算正規化互信息 (NMI)。
\(A\) 和 \(B\) 的正規化互信息量由下式給出:
.. math::
Y(A, B) = frac{H(A) + H(B)}{H(A, B)}
其中 \(H(X) := - \sum_{x \in X}{x \log x}\) 是熵。
Colin Studholme 及其同事提出此方法可用於影像配準 [1]。其值介於 1(完全不相關的影像值)到 2(完全相關的影像值,無論是正相關還是負相關)。
- 參數:
- image0、image1ndarray
要比較的影像。兩個輸入影像必須具有相同的維度數量。
- binsint 或 int 序列,選填
聯合直方圖每個軸的 bin 數量。
- 傳回:
- nmifloat
兩個陣列之間的正規化互信息量,以
bins
給定的粒度計算。較高的 NMI 值表示輸入影像更相似。
- 引發:
- ValueError
如果影像的維度數量不相同。
備註
如果兩個輸入影像的形狀不相同,則較小的影像會以零填充。
參考文獻
[1]C. Studholme, D.L.G. Hill, & D.J. Hawkes (1999). An overlap invariant entropy measure of 3D medical image alignment. Pattern Recognition 32(1):71-86 DOI:10.1016/S0031-3203(98)00091-0
- skimage.metrics.normalized_root_mse(image_true, image_test, *, normalization='euclidean')[原始碼]#
計算兩個影像之間的正規化均方根誤差 (NRMSE)。
- 參數:
- image_truendarray
真實影像,與 im_test 具有相同的形狀。
- image_testndarray
測試影像。
- normalization{‘euclidean’, ‘min-max’, ‘mean’},選填
控制 NRMSE 分母中使用的正規化方法。文獻中沒有標準的正規化方法 [1]。此處可用的方法如下
‘euclidean’:以
im_true
的平均歐幾里得範數進行正規化NRMSE = RMSE * sqrt(N) / || im_true ||
其中 || . || 表示 Frobenius 範數,且
N = im_true.size
。此結果等同於NRMSE = || im_true - im_test || / || im_true ||.
‘min-max’:以
im_true
的強度範圍進行正規化。‘mean’:以
im_true
的平均值進行正規化
- 傳回:
- nrmsefloat
NRMSE 指標。
備註
在 0.16 版本中變更: 此函式已從
skimage.measure.compare_nrmse
更名為skimage.metrics.normalized_root_mse
。參考文獻
- skimage.metrics.peak_signal_noise_ratio(image_true, image_test, *, data_range=None)[原始碼]#
計算影像的峰值訊號雜訊比 (PSNR)。
- 參數:
- image_truendarray
真實影像,與 im_test 具有相同的形狀。
- image_testndarray
測試影像。
- data_rangeint,選填
輸入影像的資料範圍(最小值和最大值之間的距離)。預設情況下,這是從影像資料類型估算的。
- 傳回:
- psnrfloat
PSNR 指標。
備註
在 0.16 版本中變更: 此函式已從
skimage.measure.compare_psnr
更名為skimage.metrics.peak_signal_noise_ratio
。參考文獻
- skimage.metrics.structural_similarity(im1, im2, *, win_size=None, gradient=False, data_range=None, channel_axis=None, gaussian_weights=False, full=False, **kwargs)[原始碼]#
計算兩個影像之間的平均結構相似性索引。請注意浮點影像的
data_range
參數。- 參數:
- im1, im2ndarray
影像。具有相同形狀的任何維度。
- win_sizeint 或 None,選填
比較中使用的滑動視窗的邊長。必須是奇數值。如果
gaussian_weights
為 True,則會忽略此值,視窗大小將取決於sigma
。- gradientbool,選填
如果為 True,則也傳回相對於 im2 的梯度。
- data_rangefloat,選填
輸入影像的資料範圍(最大值和最小值之間的差異)。預設情況下,這是從影像資料類型估算的。此估計對於浮點影像資料可能不正確。因此,建議始終明確傳遞此純量值(請參閱以下說明)。
- channel_axisint 或 None,選填
如果為 None,則假設影像為灰階(單通道)影像。否則,此參數指示陣列的哪個軸對應於通道。
在 0.19 版本中新增: 在 0.19 版本中新增了
channel_axis
。- gaussian_weightsbool,選填
如果為 True,則每個 patch 的平均值和變異數會在空間上由寬度 sigma=1.5 的正規化高斯核心加權。
- fullbool,選填
如果為 True,則也傳回完整的結構相似性影像。
- 傳回:
- mssimfloat
影像上的平均結構相似性索引。
- gradndarray
im1 和 im2 之間結構相似性的梯度 [2]。僅當
gradient
設定為 True 時,才會傳回此值。- Sndarray
完整的 SSIM 影像。僅當
full
設定為 True 時,才會傳回此值。
- 其他參數:
備註
如果未指定
data_range
,則會根據影像資料類型自動猜測範圍。但是,對於浮點影像資料,此估計會產生所需範圍值的兩倍,因為skimage.util.dtype.py
中的dtype_range
定義的間隔為 -1 到 +1。這會產生 2 的估計值,而不是 1,這在使用影像資料時最常需要(因為負光強度沒有意義)。在使用類似 YCbCr 的色彩資料時,請注意這些範圍在每個通道中都不同(Cb 和 Cr 的範圍是 Y 的兩倍),因此不能使用單次呼叫此函式來計算通道平均 SSIM,因為假設每個通道的範圍都相同。若要符合 Wang 等人的實作 [1],請將
gaussian_weights
設定為 True,sigma
設定為 1.5,use_sample_covariance
設定為 False,並指定data_range
引數。在 0.16 版本中變更: 此函式已從
skimage.measure.compare_ssim
更名為skimage.metrics.structural_similarity
。參考文獻
[1] (1,2,3)Wang, Z., Bovik, A. C., Sheikh, H. R., & Simoncelli, E. P. (2004). 影像品質評估:從誤差可見性到結構相似性。(Image quality assessment: From error visibility to structural similarity). IEEE 影像處理期刊, 13, 600-612. https://ece.uwaterloo.ca/~z70wang/publications/ssim.pdf, DOI:10.1109/TIP.2003.819861
[2]Avanaki, A. N. (2009). 為結構相似性優化的精確全域直方圖規範。(Exact global histogram specification optimized for structural similarity). 光學評論, 16, 613-621. arXiv:0901.0065 DOI:10.1007/s10043-009-0119-z
- skimage.metrics.variation_of_information(image0=None, image1=None, *, table=None, ignore_labels=())[原始碼]#
回傳與資訊變異相關的對稱條件熵。[1]
資訊變異定義為 VI(X,Y) = H(X|Y) + H(Y|X)。如果 X 是真實分割,則 H(X|Y) 可以解釋為欠分割的量,而 H(Y|X) 可以解釋為過分割的量。換句話說,完美的過分割將會使 H(X|Y)=0,而完美的欠分割將會使 H(Y|X)=0。
- 參數:
- image0, image1int 類型 ndarray
標籤影像/分割,必須具有相同的形狀。
- tablescipy.sparse 稀疏陣列,採用 csr 格式,可選
使用 skimage.evaluate.contingency_table 建立的列聯表。如果為 None,則會使用 skimage.evaluate.contingency_table 計算。如果提供,則會從此表計算熵,並忽略任何影像。
- ignore_labels整數序列,可選
要忽略的標籤。使用這些值標記的真值影像的任何部分都不會計入分數中。
- 傳回:
- vifloat 類型 ndarray,形狀 (2,)
image1|image0 和 image0|image1 的條件熵。
參考文獻
[1]Marina Meilă (2007), 比較聚類—基於資訊的距離, 多變量分析期刊, 第 98 卷,第 5 期,第 873-895 頁, ISSN 0047-259X, DOI:10.1016/j.jmva.2006.11.013。