graycode_decode — 3D structured_light op

• Data kinds: images → image2d

• Call: import fullseye as fs; fs.ledger.graycode_decode(bit_images, thresh=0.5) -> 'np.ndarray' (implementation को सीधे call करना हो तो import fringe; fringe.graycode_decode(bit_images, thresh=0.5) -> 'np.ndarray', registry से लेना हो तो ops3d.get("graycode_decode"))

उपयोग

Gray code bit image series → integer fringe order map (absolute order)।

bit_images: length K की sequence (हर एक 2D image, उजला=1 / अँधेरा=0)। MSB first (bit_images[0]

सबसे बड़ा bit है)। thresh से binarise किया जाता है।

thresh: binarisation threshold (pixel value >= thresh हो तो 1)।

processing: हर bit plane को binarise करना → MSB first क्रम में Gray value बनाना → Gray→binary conversion

(binary = gray ^ (gray>>1) ^ ... ^ (gray>>(K-1))) से absolute order (integer) लौटाना।

return value: dtype int64 का 2D order map (range 0..2**K-1)।

validation (ValueError): None / (K, H, W) में बदला न जा सके / K < 1 / K > 62 (int64 में नहीं समाता) / NaN या Inf हो। thresh की जाँच नहीं होती (इसे pixel values के scale पर ही दें; [0, 1] image के लिए 0.5 default है)।

binarisation सिर्फ़ fixed threshold >= thresh से होता है — inverted pattern (negative image) से तुलना या local threshold नहीं होता। shadow या कम reflectance से अँधेरे दिखने वाले pixels 0 bit के रूप में decode होते हैं और बिना error के गलत order देते हैं, इसलिए modulation आदि से बना reliability mask caller को अलग से रखना चाहिए।

order का अर्थ: Gray code में पड़ोसी codes सिर्फ़ 1 bit से अलग होते हैं, इसलिए boundary pixel पर binarisation की गलती order को सिर्फ़ ±1 खिसकाती है (binary code में बड़ा उछाल आता)। लौटाए गए integer को projector column number या fringe के absolute order के रूप में, absolute_phase के coarse (2π * order से phase में बदलकर) या triangulate_column के column में इस्तेमाल करें।

पृष्ठभूमि guides (इस op के पीछे की physics और conventions)

• depth_sensors — Depth sensors — ranging के सिद्धांत, असली devices के आँकड़े, dropouts कैसे दिखते हैं

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

• graycode_structured_light — py -3.11 examples_3d/graycode_structured_light.py

• structured_light_scan — py -3.11 examples_3d/structured_light_scan.py

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

fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade

इसी category के (structured_light)

wrapped_phase · unwrap_phase_2d · decode_fringe · synthesize_fringes · absolute_phase · triangulate_column


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

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