vol_label_shape_stats — VOLCOLOR measure op

• 資料種類:labels → table

• 呼叫: import fullseye as fs; fs.ledger.vol_label_shape_stats(labels, spacing=None, shape: 'bool' = True)(要直接呼叫實作,import volcolor; volcolor.vol_label_shape_stats(labels, spacing=None, shape: 'bool' = True);從台帳取用則 opsvolcolor.get("vol_label_shape_stats"))

• GPU:無(僅 CPU 參考實作)

用法

每個成分線性時間可得的定量值(體積・重心・包圍盒・主成分形狀指標)。

volops.vol_region_props 的姊妹,但有 不同的目的:

• 它給出了“表面積”和 Wadell“球度”。為了這個目的由於行進立方體針對每個元件運行,因此 Python 循環與元件數量成正比。轉動(隨著 1 體素 1 標籤的病理輸入很快變得沉重)。

• 這僅限於僅需要「np.bincount」加權和的金額。 1 個標籤數組 10bincount(件數 1,座標和 3,協方差 6)= O(N + n)。實測(連通性=26,1 體素 1 標籤 = 病理輸入的棋盤圖案): 163 = 4096 體素/512 個分量 = 0.0037 s,323 = 32768 / 4096 = 0.0350 秒,643 = 262144 / 32768 = 0.2556 秒,1283 = 2097152 / 262144 = 2.3122秒。 每 8 個體素 9.5 / 7.3 / 9.0 次(二次方 64 次),整個區域大約為 1.1 微秒/體素。同樣的1283著色是0.0357 s。

(供參考:volops.vol_region_props(surface="faces") 是相同的 163

0.0121 秒-由於每個元件的 Python 循環而延長了 3.5 倍。行進立方體

預設使用 surface="auto" 甚至更重。 )

標籤體素計數體積質心bbox volops.vol_region_props 相同的定義和相同的值(tests/test_volcolor.py::test_stats_agree_with_vol_region_props_exactly 是(固定為精確匹配)。 bbox 是(z0, z1, y0, y1, x0, x1) 且上限是排除的。

我們還回傳什麼:

centroid_mm (z, y, x) 物理座標(與沒有間距的體素相同)

extent bbox 的物理尺寸(dz, dy, dx) · equivalent_diameter

(6V/pi)(1/3) · touches_border bbox 是否觸及音量邊緣? ·

principal_extent 協方差特徵值的平方根(s1 >= s2 >= s3)(物理單位)·

線性度 (l1-l2)/l1 · 平面性 (l2-l3)/l1 · 各向同性

“l3/l1”·“伸長率”“sqrt(l1/l2)”。

伸長率可以是無限的(合約):l1 > 0 和l2 == 0,換句話說,厚度為 1 體素的完美直線分量回傳「inf」。事故除以 0 相反,事實是在第二軸方向上沒有擴展,並且當倒圓時,細長的順序發生變化。他們默默地交換位置。單一體素(“l1 == 0”)是一個各向同性點,因此它是“1.0”。

如果忘記傳遞空格,數字和結論將會改變。實際測量-半徑為6毫米的球體間距 = (3.0, 1.0, 1.0) 當使用 mm 的各向異性網格(z 粗化 3 倍)進行採樣時,它變成 293 個體素。閉合形式的真值是「4/3 pi 63 = 904.78 mm3」:

• 當「間距」 = 879.0 mm3(誤差-2.85 %)時,各向同性 = 0.7349(近似各向同性 = 正確)。

• 無「間距」 = 293.0(以體素為單位。當讀作毫米3時,錯誤-67.62%),各向同性 = 0.0817 -- 球體看起來像一塊「板」。忽略各向異性形狀索引被破壞,但傳回一個有限且合理的值。

*等效直徑也相差 1.44 倍,即 11.8849 毫米與 8.2406 毫米。

數值說明:二階矩計算為“E[x2] - E[x]2”,因此座標對於具有較大和較小分佈的元件,可能會發生精度損失。上限:資料:MAX_COLOR_VOXELS (一側高達 ~2000),「E[x2] ~ 4e6” 的 float64 的相對精度為 1e-16 = 絕對 1e-10,體素變異數有 10 個數量級的餘裕。比那個大體積應該是切完ROI之後才可以通過的(這也是上限的原因)。

將 *shape* 設定為「False」將忽略協方差(bincount 為 10 中的 6),principal_extent 不要傳回以下 5 項-只需要體積過濾器有時 O(N) 臨時數組可以減少為 1。

以升序標籤順序返回list[dict](僅實際標籤)--- 即使數字中有間隙,labels.max() 也不會傳回空字典)。

參考(範例資料、文獻)

• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。

• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。

• 演算法的正典(作者、年份)與用途見上面的族使用指南。

可執行的範例(實際呼叫該運算子並已驗證的樣例)

• poc_cold_chain_excursion — py -3.11 examples/poc_cold_chain_excursion.py

• voxel_labels_color — py -3.11 examples/voxel_labels_color.py

型別可銜接的下一個運算子(可接受 table 作為輸入)

—

同類別(measure)

vol_label_legend


*Provenance: volcolor.py — VOLCOLOR 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.