fullseye

mueller_from_intensities — OPTICS polarization op

使い方

Recover a Mueller matrix from intensities measured through known generator / analyser states (polarimetric least squares).

Model: the detector behind a polarisation-state analyser sees I_i = (A_i @ M @ G_i)[0, 0] = a_i^T M g_i where g_i = G_i[:, 0] is the Stokes vector the generator emits from unpolarised light and a_i = A_i[0, :] is the analyser’s first row. That is linear in the 16 entries of M: I_i = w_i . vec(M) with w_i = outer(a_i, g_i).ravel(). Stacking the N measurements gives W (N x 16), solved by least squares.

intensities is (N,) (one detector) or (N, ...) (an image per state: the same system solved per pixel, so the result is (4, 4, ...)). psg and psa are sequences of N Mueller matrices (4x4) — build them with :func:mueller_element and matrix products.

Fail-closed on an under-determined design: if W has rank < 16 the design cannot see every entry (the classic case — linear polarisers only, no retarder — leaves the S3 row and column unobservable, rank 9) and the function raises with the rank instead of returning a pseudo-inverse answer that would look plausible and be wrong in the unobserved entries.

Ground truth in the tests: a known M (retarder then polariser), 36 generator/analyser pairs with quarter-wave plates, intensities computed by the forward model → M recovered to 1e-10; the same with polarisers only → rank 9, refused.

Raises ValueError: shapes disagree, fewer than 16 measurements, non-finite input, or rank < 16.

Provenance: the observation matrix outer(a, g) is the standard formulation (Chipman, “Polarimetry”, Handbook of Optics ch. 15); the pinv variant is what Polanalyser’s calcMueller does. Re-implemented with an explicit rank check.

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

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

詳しい使い方ガイド

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

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

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

abcd_trace · emva_filter_distortion · mueller_apply · mueller_checks · pixel_shift_capture · pixel_shift_merge · pixel_shift_motion_mask · oct_from_spectra

同カテゴリ(polarization)

jones_element · jones_apply · stokes_from_jones · mueller_element · mueller_apply · stokes_analyze · polarization_demosaic · polarization_demosaic_color


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

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