surface op• 데이터 종류: zscan → image2d
• 호출: import interferometry; interferometry.csi_contrast_map(stack, remove_bias=True)(또는 opsinterferometry.get("csi_contrast_map"))
화소별 간섭무늬 변조의 피크 —— 대비(및 유효성) 맵.
> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.
The maximum of each pixel's coherence envelope. Three uses, in order of how
often they matter:
1. Validity. A pixel that never produced fringes — a hole, a steeply
tilted facet that threw the light out of the aperture, a saturated or
dark pixel — has near-zero modulation. This is the map you threshold to
decide which heights from :func:csi_height_map to trust.
2. Reflectance. In the forward model the envelope peak is exactly
`amplitude * reflectivity`, so with a known *amplitude* this map *is*
the reflectivity. Verified in the tests: a known reflectivity map over a
5.0-7.0 um surface is recovered with a maximum error of 7.32e-05 (the
residual is envelope truncation again — the same surface spread over
2.0-10.0 um gives 4.03e-04). It is a contrast map, not a photometric
measurement, and it is accurate to about four decimal places, not to
machine precision.
3. Focus. It is the interferometric analogue of a focus measure, and it
peaks where :func:csi_height_map says the surface is.
Why use 1 rather than trust the height map everywhere: measured on a flat
surface at 6.0 um with a 50x reflectance step across the field (0.02 on
one half, 1.0 on the other) and 1 % noise, the `"gaussian"` height error is
0.146 um RMS on the bright half and 3.03 um RMS on the dark half, and 30 %
of the dark pixels are refused outright. The bias barely moves (+0.14 um);
what explodes is the scatter, because the three-point fit is reading three
samples out of a noise floor. `"centroid"` degrades far more gracefully on
the same data (0.022 -> 0.157 um, 7x rather than 20x), which is the second
place in this module where the estimator ranking depends on the data rather
than on the algebra. This map is what separates the two populations: it reads
0.035 +- 0.004 on the dark half and 0.412 +- 0.007 on the bright one.
It is deliberately not normalised by the pedestal. The classical fringe
*visibility* is `b/a`, and computing it would need the pedestal, which
`remove_bias has just thrown away; returning b` and saying so is honest,
whereas returning `b` and calling it visibility would not be. Divide by
:func:numpy.mean of the stack along axis 0 if you want the ratio.
Returns a float64 `(H, W)` map. Same shape and validation as
:func:csi_height_map.
Raises `ValueError`: a non-3-D stack, fewer than 3 planes, an empty
spatial extent, a stack over :data:MAX_STACK_ELEMENTS, a non-finite /
complex / masked stack, or a non-bool *remove_bias*.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• coherence_scanning — py -3.11 examples/coherence_scanning.py
image2d 를 입력으로 받는 것)—
surface)*Provenance: interferometry.py — INTERFEROMETRY 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.