vol_granulometry — 3D feature op

• Data kinds: voxel → measurement

• Call: import fullseye as fs; fs.ledger.vol_granulometry(vol_binary, radii=None, spacing=None) (implementation को सीधे call करना हो तो import volops; volops.vol_granulometry(vol_binary, radii=None, spacing=None), registry से लेना हो तो ops3d.get("vol_granulometry"))

• Ledger के ज़रिए return value: fullseye.ledger.vol_granulometry(...) केवल घोषित out type measurement का value लौटाता है (मूल function सहायक जानकारी भी लौटाता है)। जो हिस्सा छोड़ दिया गया है उसकी ज़रूरत हो तो fullseye.ledger.vol_granulometry.raw(...) का उपयोग करें, या volops.vol_granulometry को सीधे call करें।

• मूल function का return: 中央径

उपयोग

binary volume का pore / particle size distribution (opening series)।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

Opening by a ball of radius r deletes every feature narrower than 2r. Tracking the surviving volume fraction as r grows gives the cumulative size distribution F(r); its negative increment is the size density — the fraction of material that sits in features of that size. This is Matheron's granulometry, the measurement behind every "pore size distribution" plot in casting, foam and powder work.

Computed from the local-thickness volume rather than by repeated openings:

the two agree exactly (a voxel survives the opening of radius r iff its local thickness is at least 2r) and one distance transform replaces N morphological passes.

*radii* are in the units of *spacing* (millimetres when *spacing* is given, voxels otherwise); leave it None for min(spacing)-steps up to the largest thickness present. Returns {"radii": [...], "surviving_fraction": [...], "density": [...], "mean_size": float, "d50": float, "units": "mm"|"voxel"}

where sizes are diameters (2r), because that is what a pore diameter means.

Applicability. (1) A distribution is only as good as the threshold that made the binary volume — report it. (2) Features touching the volume border are truncated and bias the distribution downward; crop or state it.

(3) d50 is interpolated between the two bracketing radii, so it is no

finer than the radius step.

HALCON has no granulometry operator.

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• ct_porosity_and_fibre_morphometry — py -3.11 examples_3d/ct_porosity_and_fibre_morphometry.py

वे अगले ops जिनसे type जुड़ता है (measurement को input के रूप में लेते हैं)

vol_gaussian_psf · fuse_to_voxel · fresnel_reflectance · snell_angle

इसी category के (feature)

sobel3d · hessian3d · curvature_maps · edt_jfa · edt_jfa_vector · vol_frangi · vol_local_std · vol_local_thickness


*Provenance: volops.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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