region_growing — 3D segment op

• Data kinds: points → labels

• Call: import fullseye as fs; fs.ledger.region_growing(points, normals=None, angle_thresh_deg: 'float' = 15.0, k: 'int' = 20, min_region_size: 'int' = 3) -> 'np.ndarray' (implementation को सीधे call करना हो तो import segment3d; segment3d.region_growing(points, normals=None, angle_thresh_deg: 'float' = 15.0, k: 'int' = 20, min_region_size: 'int' = 3) -> 'np.ndarray', registry से लेना हो तो ops3d.get("region_growing"))

• GPU: नहीं (केवल CPU reference implementation)

उपयोग

normal similarity से region growing करता है और जुड़े हुए smooth regions को समान label देता है (curvature gate के बिना variant)।

हर point को k-nearest-neighbour graph पर BFS से बढ़ाता है, और पड़ोसी point q को उसी region में तभी जोड़ता है जब "normals n_p और n_q के बीच का कोण angle_thresh_deg से कम हो"। एक plane के अंदर normals लगभग समानांतर होते हैं, इसलिए वे एक ही region में जुड़ते हैं; अलग दिशा वाले faces की सीमा पर कोण खुल जाता है और जुड़ाव टूट जाता है → हर face के लिए अलग region। Normals का sign तय नहीं होता (PCA से आते हैं), इसलिए |n_p·n_q| से जाँचता है (आगे और पीछे को एक ही माना जाता है)।

Args:

points: (N,3) point cloud।

normals: (N,3) unit normals। None होने पर pointcloud.estimate_normals से PCA द्वारा अनुमान लगाया जाता है।

angle_thresh_deg: पड़ोसी normals के कोण की स्वीकार्य ऊपरी सीमा [degree]। सीमा (0,180)।

k: neighbours की संख्या (kNN graph की degree)।

Returns:

labels: (N,) int। हर जुड़े हुए smooth region को 0,1,2,... देता है। min_region_size से छोटे regions (isolated points, असंगत दिशा वाला कचरा) को -1 (noise/unassigned) मिलता है = एकीकृत contract (-1=noise) के अनुसार।

खाली input पर shape (0,) लौटाता है।

खाली इनपुट (points में 0 तत्व) पर खाली परिणाम लौटता है (कारण: खाली क्लाउड में लेबल करने को कुछ नहीं है, इसलिए लंबाई 0 का लेबल ऐरे सही उत्तर है; पहले के फ़िल्टर खाली क्लाउड दे सकते हैं)।

संदर्भ (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 करते हैं)

• sensor_seg — py -3.11 examples_3d/sensor_seg.py

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

fuse_to_voxel · vol_region_props

इसी category के (segment)

euclidean_cluster · plane_segmentation · vol_watershed


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

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