deflectometry_render — SPECULAR deflectometry op

• 데이터 종류: image2d → images

• 호출: import fullseye as fs; fs.ledger.deflectometry_render(height, rig=None, period_mm=10.0, n_steps=4, direction='x', kind='fringe', slope_x=None, slope_y=None, diffuse_fraction=0.0, scatter_rad=0.0, back_thickness_mm=None, refractive_index=1.52, focus='surface', aperture_samples=None, noise_sigma=0.0, bits=None, seed=0)(구현을 직접 호출하려면 import deflectometry; deflectometry.deflectometry_render(height, rig=None, period_mm=10.0, n_steps=4, direction='x', kind='fringe', slope_x=None, slope_y=None, diffuse_fraction=0.0, scatter_rad=0.0, back_thickness_mm=None, refractive_index=1.52, focus='surface', aperture_samples=None, noise_sigma=0.0, bits=None, seed=0), 원장에서 가져오려면 opsspecular.get("deflectometry_render"))

사용법

높이 장 → 카메라가 찍는 '화면의 거울상'(순방향 시뮬레이션). → 이미지 목록(각 (H, W), [0, 1]).

> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.

height (H, W) [mm] は rig の視野(一辺 field_mm、格子間隔 field / (W − 1))に張った面の高さ。カメラの画像も (H, W) で、視野の四隅が収まる焦点距離を選ぶ(画素と面の格子は斜めから見るので 1 対 1 ではない —— deflectometry_phase_to_slope が投影して読み直す)。各画素の視線を面に当て(z = h の交点を反復で)、法線で鏡面反射して(match3d.reflect)画面に当て、画面の輝度(deflectometry_screen_pattern と同じ式)を読む。kind="fringe" なら n_steps 枚、それ以外は 1 枚。

傾きは slope_x = ∂h/∂x、slope_y = ∂h/∂y を渡せば解析値を使い(真値を厳密にするため)、省略すると height の中心差分。

物理の効果(どれも既定は「理想の鏡」):

• diffuse_fraction = k_d ∈ [0, 1): 面の拡散成分。I = (1 − k_d)·鏡面 + k_d·画面の平均輝度。縞の振幅が (1 − k_d) 倍に落ち、位相の雑音は 1 / (1 − k_d) 倍になる(ざらついた塗装)。

• scatter_rad: 鏡面ローブの広がり(面の法線の標準偏差 [rad])。反射光は 2 倍広がり、画面上で σ = 2·scatter·(面から画面の距離)のガウスで縞がぼける → 振幅 exp(−2π²σ²/周期²)。

• back_thickness_mm / refractive_index: 透明板(カバーガラス)の裏面反射(屈折率は数か材料表の名前 —— 名前なら d 線 587.56 nm の n)。表で屈折(glassmirror.refract_rays)→ 平らな裏面で反射 → 表から出る光が、ずれた画面の点を映す。重みは Fresnel(glassmirror.fresnel_dielectric)。カメラの露出は表と裏の和で正規化する。

• focus: "surface"(面にピント)/ "screen"(画面の虚像 = 主光線に沿って L + d にピント)/ 0〜1 の数(その間の比 D_f = L + α d)。開口 rig["aperture_mm"] = A の薄レンズで、距離 D の物体の錯乱円の直径は A·|D − D_f| / D_f。面にピント(α = 0)で開口積分を指定しないときは、面の 1 点から出た光が画面上で直径 A·d/L の円板に広がるだけなので、縞に一様円板の MTF 2 J1(πc/p) / (πc/p) を掛ける(閉形式、負なら位相が反転)。それ以外は開口積分: 開口上の aperture_samples 点(既定 16、Vogel の螺旋)から、主光線上のピントの点へ向かう光線を 1 本ずつ面に当てて反射させ、画面の輝度を平均する —— 画面側のぼけ(縞の振幅)と面側のぼけ(面の傾きの平均 = 凹みがぼける)が同時に出る。

★2026-10-15: 初版は面側のぼけを「画像を円板で畳み込む」近似にしていて、画面にピントを合わせても

縞の振幅が 0.59 倍に落ちた(縞そのものまでぼかしていた)。画面に合っていれば縞はくっきりで、ぼける

のは縞を曲げる面の傾きのほう —— 開口積分に直した。

• noise_sigma(画素の加法ガウス雑音、[0, 1] の単位)と bits(量子化、例 8)。seed で再現。

画面の外に当たる画素は 0(黒)。fringe.modulation で低い変調の画素を除くこと。

Raises: ValueError —— height が 2-D の有限な配列でない(2 × 2 未満も)、傾きの形が違う・有限でない、周期が正でない、N < 3、方向・kind・focus が不正、k_d が [0, 1) の外、散乱が負、板厚が正でない、屈折率が 1 以下、雑音が負、bits が 1〜16 の整数でない、aperture_samples が 1〜256 の整数でも None でもない、rig が不正。

자세한 사용 가이드

• specular_photometric 패밀리 가이드

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• poc_phase_measuring_deflectometry — py -3.11 examples/poc_phase_measuring_deflectometry.py

타입이 이어지는 다음 연산자(images 를 입력으로 받는 것)

photometric_stereo_robust · photometric_residual

같은 카테고리(deflectometry)

deflectometry_rig · deflectometry_screen_pattern · deflectometry_phase_to_slope · slope_to_curvature · deflectometry_sensitivity


*Provenance: deflectometry.py — SPECULAR 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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