photometric op• 데이터 종류: images → normalmap
• 호출: import fullseye as fs; fs.ledger.photometric_stereo(images, lights, mask=None, normalize=True, *, lit_only=False, lit_thresh=0.001)(구현을 직접 호출하려면 import photometric; photometric.photometric_stereo(images, lights, mask=None, normalize=True, *, lit_only=False, lit_thresh=0.001), 원장에서 가져오려면 ops3d.get("photometric_stereo"))
• 원장 경유의 반환값: fullseye.ledger.photometric_stereo(...) 는 선언된 out 형 normalmap 의 값만 반환합니다(실제 함수는 보조 정보도 반환). 버려진 쪽이 필요하면 fullseye.ledger.photometric_stereo.raw(...) 를 쓰거나 photometric.photometric_stereo 를 직접 호출하세요.
Lambert 광도 스테레오: 알려진 광원 방향의 N 장에서 법선과 알베도를 복원. → (normals HxWx3, albedo HxW).
I_n = albedo * max(N·L_n, 0). 각 화소에서 g = albedo*N을 최소제곱 g = pinv(L) @ I로 풀고, albedo=|g|, normal=g/|g|. N>=3 필요. albedo~0이나 mask 밖의 화소는 normal=(0,0,1). normalize=True이면 광원 벡터를 단위 방향으로 정규화한다(render_lambertian과 동일한 규약 = 알베도 절댓값이 올바르게 나온다). 강도 가중 광원을 쓴다면 normalize=False로 하고, 합성 쪽도 원시 벡터로 맞출 것.
lit_only(2026-09-04 추가): 부착 그림자(attached shadow)를 제외하고 푼다. 모델의 max(·, 0)은 비선형이므로, N·L < 0인 관측(참값은 0)을 선형 최소제곱에 그대로 넣으면해가 치우친다 ―― 실측: 그림자도 AO도 없는 구에서 중앙값 9°, 켜진 광원만으로 풀면 0.000°. 기본값은 False(기존 동작을 바꾸지 않는다). True로 하면 화소마다 I > lit_thresh인 광원만 사용해 다시 푼다. 같은 점등 패턴의 화소를 묶어서 1 회의 의사역행렬로 처리하므로, 추가 비용은 광원 수에 따른 패턴 수에 비례하는 정도(6 등이면 최대 64 그룹). 켜진 광원이 3 개 미만인 화소는 전체 광원의 해로 되돌린다(fail-open:
풀 수 없는 화소를 NaN으로 하기보다, 치우쳐 있더라도 값이 있는 편이 하류의 적분이 깨지지 않는다).
lit_thresh: "켜져 있다"고 간주하는 휘도의 하한. 촬영 잡음보다 위에 둔다.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• photometric_stereo — py -3.11 examples_3d/photometric_stereo.py
normalmap 를 입력으로 받는 것)fuse_to_voxel · render_shaded · phong_shade · matcap_shade · brdf_lommel_seeliger · brdf_hapke · bump_normals_fbm · integrate_normals
photometric)surface_normals · integrate_normals · render_lambertian
*Provenance: photometric.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.