fullseye

moire_overlay_image — OPTICS moire_align op

使い方

重ねた 2 枚の格子をカメラで撮った像(位置合わせのマーク)を合成する。

像 = [マークの強度(マスクの格子の像 × ウェハの格子の反射率)] をガウスのぼけ(MTF exp(−2π²σ²f²))と 画素の積分(sinc)で撮ったもの。格子はフーリエ級数で持つので、ぼけと画素は閉形式(打ち切りの誤差は n_harmonics と項の大きさの床 1e-12 だけ)。ギャップ gap_um > 0 ではマスクの像を moire_talbot_gap と同じく optics.angular_spectrum_propagate で伝搬する(0/1 の格子だけ、波長 wavelength_um が要る —— ギャップが 0 なら使わない)。ぼけが格子のピッチを潰すので、 像に残るのは差の周波数の縞(モアレ)だけになる —— これが位置合わせのマークの要点。

layout: "single" 全面が 1 対(マスク p_m、ウェハ p_w)、線は縦、x のずれを読む。 "differential" 上半分 = 対 A(p_m, p_w)、下半分 = 対 B(ピッチを入れ替え)。ずれで 2 つの縞は逆に動き、 マーク全体の流れ(drift_nm)では同じ向きに動く。 "quad" 4 象限: 左上 A_x、右上 B_x、左下 A_y、右下 B_y(下は線が横で y のずれ)。 shift_nm と drift_nm は (x, y) の組でもよい。 with_mask=False はマスクを外してウェハの格子だけを撮った直接の像(比べ手の相互相関に使う。ピッチ 2 µm の 格子はぼけで消えて一様な灰色になる —— 直接の像ではずれが見えない、を示す)。縞の周期の検査はしない。 shift_nm は moving(既定 "wafer")の格子のずれ。drift_nm はマーク全体(2 枚とも)がカメラに対して動いた量。 illum_gradient は視野の端から端までの照明の傾き(相対、x と y に同じ量)、noise_sigma は加える白色ガウス雑音の 標準偏差(強度の単位。0/1 の格子 2 枚で平均は 0.25)。

Raises ValueError: 同じピッチ、縞の周期が 2 画素未満(ナイキスト超え)、区画に縞が 1 周期も入らない、 ぼけで消えきらない格子の周波数がナイキストを超える(allow_aliasing=True で許す —— 実際のカメラでは 折り返して縞に混ざる)、ギャップがあるのに profile が "sine"、綴り違い、形が小さすぎる。

ファミリ共通の入力契約(fail-closed)

optics の全 op は入力を検証してから計算する(黙って通さない):

詳しい使い方ガイド

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(image2d を入力に取れる)

fraunhofer_pattern · pupil_psf · pupil_blur · psf_to_mtf · edge_spread · veiling_glare_index · emva_pair_statistics · emva_defect_pixels

同カテゴリ(moire_align)

moire_magnification · moire_talbot_gap · moire_phase · moire_phase_to_shift · moire_differential_shift · moire_mark_read · moire_phase_crlb


Provenance: moirealign.py — OPTICS operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

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