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.