surface_synth_psd — ROUGHNESS synth op

• 数据种类:无 → depth(仅由参数决定的算子 —— 不接受图像或数据输入)

• 调用: import fullseye as fs; fs.ledger.surface_synth_psd(n, dx, hurst, lambda_lo, lambda_hi, sq, seed=0)(要直接调用实现,import roughness; roughness.surface_synth_psd(n, dx, hurst, lambda_lo, lambda_hi, sq, seed=0);从台账取用则 opsroughness.get("surface_synth_psd"))

• 经台账调用的返回值: fullseye.ledger.surface_synth_psd(...) 只返回声明的 out 类型 depth 的值(底层函数还会返回辅助信息)。需要被丢弃的部分时,使用 fullseye.ledger.surface_synth_psd.raw(...),或直接调用 roughness.surface_synth_psd。

• 底层返回: (z, sq_analytic)

用法

由指定的 PSD 合成高度场。返回 (z, sq_analytic)。

在频带 lambda_lo <= λ <= lambda_hi 内的每个模态上放置振幅 A(q) ∝ q^-(H+1)(= 面 PSD C(q) ∝ q^-2(H+1),自仿射),只让相位随机。整体归一化到 sq 后返回。

参数

n 网格大小。整数时为 n x n,也可为 (ny, nx)。

dx 采样间隔(正方形像素)。

hurst Hurst 指数 H(0 < H < 1)。越大越平滑。

lambda_lo 频带短波一侧的波长。

lambda_hi 频带长波一侧的波长。

sq 目标 Sq(频带内的 rms 高度)。

seed 相位的随机种子。

★ 同时返回解析 Sq 是关键

因为振幅固定、只改变相位,由 Parseval 可知

<h²> = (1/(ny nx))² Σ_k A_k² 与相位的抽取方式无关地确定。

也就是说 Sq 的真值不依赖随机数。实测:z.std() 与

sq_analytic 的相对差,即使改变 seed、H、频带、尺寸,

最大也只有 2.2e-16(下表)。若这里用“改变随机数再测 rms”来

应付,真值本身就会随每次实现而波动,与后级的误差混在一起。

n H λ频带 sq |std/analytic-1| 峰度 PTV/rms

128 0.30 4-32 0.5000 2.2e-16 3.084 7.97

256 0.50 4-64 0.0800 0.0e+00 3.005 7.85

256 0.80 2-64 0.0800 2.2e-16 2.893 6.92

512 0.80 2-64 0.0800 0.0e+00 3.113 8.25

512 0.95 8-256 2.0000 0.0e+00 2.542 5.69

★ PoC 踩过的坑已封装在实现内部

为了让系数满足厄米对称而用 phi = (u - u[-k]) / 2 把相位

反对称化时,确实会变成反对称,但相位不再均匀

(变成三角分布,向 0 附近集中)。于是所有模态在原点以同相位

叠加,高度场上竖起 1 根尖峰。用相同种子、相同频带测得的实测

(512², H=0.8, 频带 2-64):

相位的生成方式 PTV/rms 峰度 |std/analytic-1|

用 (u - u[-k])/2 反对称化 55.00 71.81 0.0e+00

仅对共轭对的一方取均匀随机数 8.47 2.95 0.0e+00 ← 正确

两者的 Sq 都与解析值严格一致。 只看方差就

察觉不到这种损坏,因此本函数固定为只对共轭对的一方取均匀随机数的

实现,测试中也检查峰度和 PTV/rms。自共轭模态

(k = -k,4 个点)的系数必须为实数,所以不随机相位,而是

随机符号 ±1(若把相位固定为 0,则全部偏向 +A)。

fail-closed(失败即拒绝)

• n 小于 8 / dx 非正 / hurst 在 (0, 1) 之外。

• lambda_lo >= lambda_hi。

• lambda_lo 小于 Nyquist 波长 2*dx(无法实现的频带)。

• lambda_hi 超过评定长度(连 1 个周期都放不下)。

• sq 非正。

• 频带内连 1 个模态都没有(网格太粗 / 频带太窄)。

详细使用指南

• surface_roughness 族使用指南

参考(示例数据、文献)

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

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

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

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

• poc_polish_wipe_measure — py -3.11 examples/poc_polish_wipe_measure.py

• poc_surface_roughness — py -3.11 examples/poc_surface_roughness.py

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

surface_form_remove · surface_filter · surface_params · surface_psd

同类别(synth)

—


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

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