fullseye

レーザー光切断の誤差の床はスペックルが決める(コヒーレント結像・スペックルの統計・三角測量の不確かさ)

できること

レーザーで照らした粗面を、コヒーレント結像で撮ります。面の凹凸が波長より大きいと反射光の位相は場所ごとにでたらめになり、カメラの開口(瞳)で帯域を切られた複素振幅が干渉して粒々の模様(スペックル)になります。光切断やレーザー変位計の高さの誤差の下限は、画素の雑音ではなくこの粒で決まります。

What it does

Coherent imaging of rough surfaces under laser light: an amplitude/phase object through the coherent transfer function (verified against Bessel closed forms to 1e-12), laser speckle from a random phase screen with finite roughness, polarisation and pattern diversity and pixel integration, speckle statistics (contrast, Kolmogorov–Smirnov against the exponential and gamma laws, autocorrelation width compared with the Airy pattern), a speckled sheet-of-light laser line, and the speckle-limited height uncertainty of triangulation, δz = C·λ/(2π sin u sin θ). The exponents (+1 in wavelength, −1 in the observation aperture and the triangulation angle) are gated against centroids measured on rendered lines; the constant is disclosed (measured / formula = 0.84–0.91), because the primary paper’s text was not available to check its 2π factor. Static speckle does not average away over frames; a moving part does, as 1/√N.

向くところ / 向かないところ

最初の 1 本

import numpy as np
import fullseye as fs

# 完全発達のスペックル: コントラスト 1、指数分布、粒径 0.5145/ρc 画素
st = fs.ledger.speckle_statistics(fs.ledger.speckle_field((256, 256), cutoff=0.1, seed=0))
print("C = %.3f / KS p = %.2f / 粒 %.2f 画素(式 %.2f)"
      % (st["contrast"], st["ks_p_exponential"], st["speckle_fwhm_px"], 0.5145 / 0.1))

# 光切断の光条(λ 0.65 µm、sin u 0.03、θ 30°、物体側の画素 5 µm)と誤差の床
img = fs.ledger.laser_line_coherent(shape=(49, 256), wavelength_um=0.65, sin_u_obs=0.03,
                                    pixel_um=5.0, line_width_um=14.0, sin_theta=0.5, seed=1)
lim = fs.ledger.triangulation_speckle_limit(0.65, 0.03, 0.5)
print("δz の床 %.2f µm、粒 %.1f µm" % (lim["delta_z_um"], lim["speckle_fwhm_um"]))

裏づけ