moire_align op• Data kinds: image2d → table
• Call: import fullseye as fs; fs.ledger.moire_phase(image, period_px=None, axis=1, region=None, window='hann', method='lockin') (implementation को सीधे call करना हो तो import moirealign; moirealign.moire_phase(image, period_px=None, axis=1, region=None, window='hann', method='lockin'), registry से लेना हो तो opsoptics.get("moire_phase"))
fringe की phase (image origin x = 0 के सापेक्ष), उसका amplitude और fringes की संख्या पढ़ता है।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
method="lockin": 区画を縞に沿って平均した 1 次元の輪郭に、既知の周期 period_px の (1, cos, sin) を窓の重みで最小二乗に当てる(複素復調 Σ w(x) p(x) e^{−i2πx/P} と同じ量を、縞の本数が整数でないときの負の周波数の漏れまで含めて解いたもの。正弦 1 本 + 直流なら厳密)。窓 "hann" は照明むら・高調波の漏れを抑えるが、雑音の分散は一様窓の約 1.5 倍(moire_phase_crlb に同じ係数)。window="none" は白色雑音だけなら最良。method="fft": Takeda ら(1982)の FFT 法 —— complexops.cx_fft の側帯域だけを残して逆変換し、位相の地図を complexops.phase_unwrap で繋ぐ。地図の傾きから周期を測り直す(period_fit_px、倍率や回転の誤差が見える)。period_px を省くと輪郭の FFT の山を放物線で補間して推定する(period_estimated = True)。
region = (r0, r1, c0, c1)(省略で全面)、axis = 1 は縞が x に並ぶ(線は縦)、0 は y に並ぶ。
返り値: dict(phase_rad(−π..π)、amplitude(縞の余弦の振幅)、mean、n_fringes、period_px、period_estimated、fft のときは period_fit_px と phase_map も)。Raises ValueError: 2 次元でない・NaN/Inf、period_px < 2(ナイキスト超え)、区画に縞が 1 周期未満、区画が空、綴り違い。
optics के सभी ops गणना से पहले input की जाँच करते हैं (कुछ भी चुपचाप पास नहीं होता):
• Unit argument के नाम में ही लिखी होती है — _mm / _um / _deg / _mrad। mm और µm की गड़बड़ी crash नहीं करती, बल्कि "सही दिखने वाला पर गलत उत्तर" देती है, इसलिए नाम से इसे रोका जाता है। मान के आकार से unit का अनुमान बिल्कुल नहीं लगाया जाता।
• String से ValueError — float('50') सफल हो जाता है, इसलिए बिना parse किया config value length के रूप में निकल जाता (मापा गया: thin_lens('50', '200') सही दिखने वाला 66.667 mm लौटा रहा था)। bool को भी True == 1 वाले implicit promotion के रूप में अस्वीकार किया जाता है।
• complex / masked array से ValueError (केवल real-valued slots; imaginary part को चुपचाप छोड़ना या mask हटाना अस्वीकार)। हर input पर NaN/Inf से ValueError।
• शून्य से भाग और उससे जुड़े मामलों को नाम लेकर अस्वीकार किया जाता है: focal length 0, radius of curvature 0, refractive index <= 0, पूरी तरह opaque aperture (सब 0, इसलिए normalisation 0/0), ऐसा PSF जिसका योग <= 0 हो, S0 = 0 वाला Stokes vector, और front focal point पर रखा object (image अनंत पर)।
• केवल 2 ops non-finite value लौटाते हैं, और वह भी contract के रूप में लिखा हुआ: depth_of_field hyperfocal distance से आगे far_mm = inf (hyperfocal distance की परिभाषा यही है) और gaussian_beam waist पर wavefront_radius_mm = inf (plane wavefront की radius of curvature)। दोनों साथ में एक finite साथी (far_is_infinite / curvature_per_mm) भी लौटाते हैं। इसके अलावा कोई भी चुपचाप आया NaN/Inf अंदर ही पकड़ा जाता है और ValueError देता है — "float64 overflow हुआ" और "उत्तर अनंत है" अलग-अलग दावे हैं, इसलिए पहले को दूसरे का चेहरा पहनाकर नहीं लौटाया जाता।
• Size की सीमा: generate होने वाले grid के लिए optics.MAX_GRID (4096), दिए गए field/PSF/aperture के लिए optics.MAX_FIELD_ELEMENTS (2^24), ABCD element chain के लिए optics.MAX_SYSTEM_ELEMENTS (1024), Zernike के लिए MAX_ZERNIKE_TERMS (512) / MAX_ZERNIKE_ORDER (40) / MAX_ZERNIKE_BASIS (2^25)। छोटे argument से बहुत बड़ा internal allocation होने वाले रास्तों (मापा गया: n_max=40 × 4096² पर 108 GB) को fail-closed ढंग से बंद किया गया है।
• भौतिक रूप से असंभव states भी अस्वीकार: degree of polarisation > 1 वाला Stokes vector, ऋणात्मक transmittance, ऋणात्मक intensity, और n-|m| odd जैसे अमान्य Zernike indices।
• 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 में दिए गए हैं।
• poc_moire_alignment — py -3.11 examples/poc_moire_alignment.py
• poc_moire_screen — py -3.11 examples/poc_moire_screen.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
moire_align)moire_magnification · moire_talbot_gap · moire_overlay_image · moire_phase_to_shift · moire_differential_shift · moire_mark_read · moire_phase_crlb
*Provenance: moirealign.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.