fullseye

lockin_ring_normals — OPTICS lockin op

使い方

Surface normals from the first-harmonic response of a dipole-modulated ring -> dict of maps.

For a Lambertian pixel with unit normal n = (n_x, n_y, n_z) under a ring of sources at zenith angle zeta modulated with multipole 1, the response at the modulation frequency is z = A exp(j phi) = (rho / 2) sin(zeta) (n_x - j n_y) and the DC is rho cos(zeta) n_z (per unit ring power). The albedo rho cancels: (n_x - j n_y) / n_z = 2 z / (DC tan zeta). demod is the table of :func:lockin_demodulate. The result has height_gradient_x / height_gradient_y (-n_x / n_z, -n_y / n_z), normal (H, W, 3), tilt_deg, azimuth_deg (direction of the height gradient) and valid. A pixel is valid only if no source of the ring is in shadow, which is A / DC < 1/2 (tilt below 90 - zenith_deg); the other pixels, and pixels with DC <= 0, are NaN in every map and False in valid: the model does not apply there.

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

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

詳しい使い方ガイド

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

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

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

abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd

同カテゴリ(lockin)

lockin_demodulate · lockin_amplitude · lockin_phase · lockin_noise_floor · lockin_walsh_codes · lockin_separate · lockin_ring_synthesize · lockin_thermal_wave


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

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