csi_contrast_map — INTERFEROMETRY surface op

数据种类:zscanimage2d

调用: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*.

详细使用指南

coherence_scanning 族使用指南

参考(示例数据・文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

• 算法的正典(作者・年份)与用途见上面的族使用指南

可运行的示例(实际调用该算子并已验证的样例)

coherence_scanningpy -3.11 examples/coherence_scanning.py

类型可衔接的下一个算子(可接受 image2d 作为输入)

同类别(surface)

csi_height_map


*Provenance: interferometry.py — INTERFEROMETRY 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

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