fullseye

sfp_render — OPTICS shape_from_polarization op

使い方

Render the images a 4-direction polarisation camera records of a dielectric surface with the given normal map (the forward model of shape from polarisation).

Each pixel is I(t) = (S0/2) (1 + rho cos 2(t - psi)) with rho from :func:sfp_dolp_model and psi the normal’s azimuth (diffuse) or the azimuth plus 90 degrees (specular). Orthographic camera looking down -z; angles in the module’s convention (x toward y).

The pixel is the Stokes sum of a specular part (unpolarised environment light reflected once off the surface, radiance specular_radiance) and a diffuse part (light scattered inside the body and refracted out, radiance diffuse_radiance). The defaults (1, 0) give a pure specular surface (black gloss, glass); (0, 1) a pure diffuse one. Anything in between is a mixed pixel: the two polarisations are 90 degrees apart and partly cancel, which is exactly why such a pixel misleads either single model. Both radiances are scalars or (H, W) maps, >= 0, not both zero. Pixels outside mask are black.

Returns (N, H, W) float64 — the polsweep sort, in the order of angles_deg (default 0/45/90/135, :func:optics.polarization_demosaic’s order), ready for :func:sfp_normals and the specularity polarisation ops.

Raises ValueError: normals not a finite (H, W, 3) field of unit normals facing the camera; index not > 1; negative, non-finite or all-zero radiance; fewer than 3 or non-finite angles.

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

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

詳しい使い方ガイド

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

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

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

sfp_normals

同カテゴリ(shape_from_polarization)

sfp_dolp_model · dolp_to_zenith · aolp_to_azimuth · sfp_normals · sfp_disambiguate · sfp_estimate_index · sfp_height


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

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