normals_to_egi — REPRCONV direction op

• Data kinds: normals → image2d

• Call: import fullseye as fs; fs.ledger.normals_to_egi(normals, n_az=36, n_el=18) (implementation को सीधे call करना हो तो import reprconv; reprconv.normals_to_egi(normals, n_az=36, n_el=18), registry से लेना हो तो opsreprconv.get("normals_to_egi"))

उपयोग

normal (N,3) → extended Gaussian image, (n_el, n_az) का image2d।

दिशाओं का 2-D histogram (Horn, *Extended Gaussian Images*, Proc. IEEE 72(12) 1984)। "किस दिशा की surface कितनी है" का नक़्शा; जिन object में plane हावी हों उनमें 1 bin में peak खड़ा होता है। irreversible -- bin width जितना direction resolution छोड़ दिया जाता है। छोड़ी गई मात्रा मापी जा सकती है: सबसे भरे bin की केंद्र दिशा और input की औसत दिशा के बीच का कोण quantization error है, default (36, 18) पर 10 degree bin width के मुक़ाबले measured 3.7 degree (selftest देता है)।

elevation के bin sin(el) में बराबर बाँटे जाते हैं (बराबर solid angle)। degree में बराबर बाँटने पर pole बहुत ज़्यादा बारीक हो जाते हैं, और "surface उत्तरी ध्रुव पर केंद्रित हैं" वाला झूठा peak खड़ा होता है।

★ position का point cloud देने पर भी exception नहीं आता। backends_typed.TYPE_TO_SORT normals को points में मिला देता है, इसलिए न evolver और न ledger दोनों में अंतर करते हैं। यह op केवल दिशा देखता है (length छोड़ देता है), इसलिए (N,3) के coordinate देने पर "origin से हर point को देखने की दिशा" वाला histogram विश्वसनीय दिखते हुए लौटता है। measured (2026-09-08, 200 point का curve बनाम सब सीधे ऊपर की ओर वाले normal): non-zero bin केवल 1 → 12, सबसे बड़ा bin 200 → 44 बदलता है, और योग दोनों में 200 है। "योग point की संख्या से मेल खाता है, इसलिए सही है" से इनमें अंतर नहीं किया जा सकता। fullseye.set_system("extra_checks", "on") करने पर unit length से हटे हुए vector अस्वीकार किए जाते हैं (नीचे Raises देखें)।

Args:

normals: (N, 3)।

n_az: azimuth के bin की संख्या (default 36 = 10 degree के step)।

n_el: elevation के bin की संख्या (default 18)।

Returns:

(n_el, n_az) float64 count map (row = elevation, column = azimuth)।

Raises:

ValueError: bin की संख्या 1 से कम / सीमा से अधिक / input ग़लत।

ValueError: extra_checks='on' पर, जब ऐसे vector हों जिनकी length 1 से 1e-6 से अधिक हटी हो

(position के point cloud को normal के रूप में देने की दुर्घटना पकड़ता है)।

संदर्भ (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 के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

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

• representation_conversion — py -3.11 examples/representation_conversion.py

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

keypoints_from_image2d

इसी category के (direction)

normals_to_angles · angles_to_normals


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

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