dichromatic oprgbimage → rgbimageimport fullseye as fs; fs.ledger.specular_free_transform(image_rgb, illuminant_rgb=(1.0, 1.0, 1.0)) (実装を直接呼ぶなら import specularity; specularity.specular_free_transform(image_rgb, illuminant_rgb=(1.0, 1.0, 1.0))、台帳から引くなら opsspecular.get("specular_free_transform"))Project out the illuminant direction: the part of the image a highlight cannot touch. → (H, W, 3).
I - (I.G) G for the unit illuminant colour G. Under the dichromatic
model the interface term is m_s * G, so it lies entirely in the removed
direction and the result is invariant to any specular term whatsoever —
exactly, for any lobe shape, any strength, any spatial pattern. That is the
specular-invariant subspace of Mallick et al. (2005); this operator is the
projection itself, with no rotation into named channels, so it stays in RGB
and composes with the rest of the family.
Use it when the shape of the specular lobe is unknown or the surface is
textured — feature matching, edge detection and correlation all work in this
subspace without any of the assumptions
:func:specular_diffuse_split needs.
This is a projection, not a picture. The result loses one of three
degrees of freedom (its component along G is exactly zero everywhere)
and, for an image with negative values after black-level subtraction, keeps
them. It is not a displayable “highlight-removed photo” and does not claim
to be; for that, use :func:specular_diffuse_split.
Raises ValueError: image_rgb is not a valid (H, W, 3) linear
RGB image (see :func:specular_diffuse_split); illuminant_rgb is not a
non-zero 3-vector.
py -3.11 examples/poc_leaf_disease_area.pypy -3.11 examples/specular_photometric.pyrgbimage を入力に取れる)specular_diffuse_split · specular_coefficient_map · illuminant_from_dichromatic_planes
dichromatic)specular_diffuse_split · specular_coefficient_map · illuminant_from_dichromatic_planes
Provenance: specularity.py — SPECULAR operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.