pixelshift op• Data kinds: rgbimage × matrix → video
• Call: import fullseye as fs; fs.ledger.pixel_shift_capture(scene, factor, shifts, pattern='RGGB', fill_factor=1.0, per_frame=False, margin=None) (implementation को सीधे call करना हो तो import pixelshift; pixelshift.pixel_shift_capture(scene, factor, shifts, pattern='RGGB', fill_factor=1.0, per_frame=False, margin=None), registry से लेना हो तो opsoptics.get("pixel_shift_capture"))
shift किए गए sensor से capture: scene को pixel aperture (वर्गाकार box) पर ठीक-ठीक integrate करके Bayer या monochrome raw frames लौटाता है।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
*scene*: 細かく描いたシーン。(Hs, Ws)(白黒)か (Hs, Ws, 3)(RGB)、有限の実数。1 センサ画素 = *factor* × *factor* 標本。per_frame=True なら先頭に枚数の軸 (N, Hs, Ws[, 3]) を持ち、枚ごとに違うシーン(搬送中のワーク・動く被写体)を撮る。*factor*: 1 センサ画素あたりのシーンの標本数(2〜64 の整数)。Hs・Ws はその倍数。*shifts*: (N, 2) の実際のシフト (dr, dc)[センサ画素] (pixel_shift_pattern の誤差込み)。センサが +dc 動くと、画素 (r, c) はシーンの c + dc を見る。*pattern*: "RGGB" などの Bayer(色フィルタはセンサと一緒に動く)か None(白黒。RGB のシーンなら各画素で 3 色を取る理想センサ = 真値づくり用で、返り値は (N, H, W, 3))。*fill_factor*: 画素の開口の一辺 / 画素の間隔(0 < f ≤ 1)。開口の MTF は |sinc(f · fill)|(f は cyc/px)。
*margin*: センサの (0, 0) 画素を置くシーンの升の番号 m(整数)。None なら m = ⌈max |shift|⌉(全シフトで開口がシーンの内側に残る最小の余白)。★真値(シフト 0 の理想センサ)と比べるときは、比べる相手と同じ m を明示すること —— シフト列が違うと既定の m が違い、同じ添字の画素がシーンの別の場所を指す。
画素 (r, c) の中心はシーンの座標(升の辺を整数にとる)で ((r + m + ½ + dr)·factor, (c + m + ½ + dc)·factor)。返す画像は H = Hs/factor − 2m、W = Ws/factor − 2m。積分は面積の総和表の双線形補間で行い、シーンを「升ごとに一定」とみなす限り誤差は丸めだけ(テストで 1e-12)。
返り値 (N, H, W) float64(Bayer か白黒)/ (N, H, W, 3)(pattern=None で RGB のシーン)。雑音は足さない(EMVA 1288 の雑音を足すなら呼び手で。この op は幾何と開口だけ)。
Raises ValueError: シーンの形・次元・非有限 / factor・fill_factor の範囲 / Hs・Ws が factor の倍数でない / シフトの形・大きさ / margin が負・シフトに足りない / per_frame で枚数がシフトと合わない / Bayer なのにシーンが RGB でない(Bayer は色を撮る)/ 残る画素が 8 × 8 未満。
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_pixel_shift — py -3.11 examples/poc_pixel_shift.py
video को input के रूप में लेते हैं)pixel_shift_merge · pixel_shift_motion_mask
pixelshift)pixel_shift_pattern · pixel_shift_merge · pixel_shift_motion_mask · false_color_metric · pixel_shift_resolution_budget
*Provenance: pixelshift.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.