surface_params — ROUGHNESS measure op

• 資料種類:depth → table

• 呼叫: import fullseye as fs; fs.ledger.surface_params(z, dx=1.0, dy=None, assume_filtered=False)(要直接呼叫實作,import roughness; roughness.surface_params(z, dx=1.0, dy=None, assume_filtered=False);從台帳取用則 opsroughness.get("surface_params"))

用法

面粗糙度參數 Sa/Sq/Sp/Sv/Sz/Ssk/Sku/Sdq/Sdr(ISO 25178-2)。

參數

z 經過頻帶處理的高度場(已去除形狀與波紋度)。

dx, dy 取樣間隔。dy=None 為正方形像素。

assume_filtered True 時跳過頻帶檢查。預設為 False = 檢查。

回傳值為 dict。除 9 個參數外,為了用數字留下判斷的依據,還放入 band_long_wave_fraction / band_form_ptv_over_sq / n_points / assume_filtered。

★ 為什麼預設拒絕(實測)

把 512x512、dx=1 µm 的合成面(自仿射 PSD + 加工紋理 λ=32 µm + 深刮痕

4 條 + 波紋度 λ=256 µm + 傾斜 0.050/-0.025)依不同步驟評估。

真值為「刮痕、加工紋理與 PSD 在 λc=80 µm 處截止後的結果」:

步驟 Sq Sq 誤差 Sa Ssk Sku

原始高度場直接使用 8.3057 +1931.4 % 6.9089 +0.05 2.26

僅去除最小平方平面 0.7520 +83.9 % 0.5273 -2.04 10.21

平面 + λc=80µm 高通 0.4104 +0.4 % 0.2501 -2.88 18.76

真值 0.4089 — 0.2502 -2.80 18.52

把原始 rms 稱為 Sq,會偏大到 20.3 倍。Ssk 從 -2.80 變為 +0.05,連符號都消失了,Sku 從 18.5 變為 2.26(低於高斯的 3)。當波紋度與

傾斜支配分布時,深刮痕的資訊會消失得無影無蹤。

只去除平面仍然偏離 1.8 倍。「哪個參數才安全」這樣的

退路並不存在 —— 不宣告頻帶就給出的數字,無法靠參數的

選擇來挽救。

★ 檢查的內容與閾值的依據(實測)

證據有 2 個。長波長比 = 比評定長度的 1/4 更長的波所占的變異數比例。

形狀 PTV/Sq = 最小平方平面本身的高低差除以 rms。

面 長波長比 形狀PTV/Sq 判定

原始高度場 0.9714 4.62 拒絕

僅去除最小平方平面 0.4415 0.00 拒絕

只保留波紋度的面(另一個面) 0.5539 0.15 拒絕

平面 + λc=80µm 高通 0.0086 0.00 通過

真值(λc=80µm) 0.0042 0.00 通過

純正弦波 λ=32(256 見方) 0.0038 0.03 通過

通過一側的餘裕是否無論把 λc 調多高都能保持 —— 確認正當的使用不會被誤拒絕更為重要,因此改變 λc 進行了量測

(512²,含加工紋理 + 1 條刮痕的面):

λc 16 32 64 80 128 170 256(=L/2)

長波長比 0.0005 0.0011 0.0044 0.0085 0.0306 0.0563 0.1056

即使把 λc 提高到評定長度的一半,也只升到 0.106。

希望拒絕的面中最小為 0.4415。閾值 0.25 放在兩者之間(比通過側高 2.4 倍、

比拒絕側低 1.8 倍)。形狀 PTV/Sq 方面,在經過頻帶處理的面上

實測只有 0.001~0.03,在殘留傾斜的面上為 3.46 / 4.62。

閾值 1.0 位於兩者之間(比通過側高 33 倍、比拒絕側低 3.5 倍)。

另外這 2 個以 or 判定 —— 沒有傾斜但殘留波紋度的面

(上表中的「只保留波紋度的面」)不會被形狀 PTV 捕捉,只有長波長比

會示警。只用其中一個就會留下漏洞。

儘管如此,為了不把判斷完全交給機器,可以用 assume_filtered=True

明確關閉(不會悄悄關閉)。證據數值本身也

以 band_long_wave_fraction / band_form_ptv_over_sq 回傳。

★ 陷阱 (a) —— Sz 量測的不是「表面的性質」,而是「看了多長」

保持相同的取樣間隔(1 µm)只擴大評定視窗,Sz 不會飽和,而是

單調增加(實測,去掉刮痕的面):

視窗 32² 64² 128² 256² 512²

視窗數 256 64 16 4 1

Sz平均 0.7112 0.8011 0.8693 0.9248 1.0058

實測/預測 0.5204 0.5295 0.5314 0.5287 0.5420

面積 256 倍時 +41.4 %。預測為高斯極值 2√(2 ln M) · Sq。

比值幾乎與視窗無關、大致恆定(0.520~0.542,在平均值附近 ±2.0 %),所以

增長的形式(區域的對數)是對的,但絕對值偏離 1.9 倍 ——

因為面存在相關性,獨立樣本數少於點數 M。

由於不會飽和,「真正的 Sz」並不存在。報告 Sz 時務必附上視窗大小和視窗數。

★ 陷阱 (b) —— 對取樣間隔最穩健的不是 Sa,而是 Sq

把同一個面用點取樣抽稀,每次用相同步驟(去傾斜 → λc=80 µm 高通)

評估,相對於真值的相對誤差(實測):

dx Sa Sq Sz Ssk Sku

1 µm -0.0 % +0.4 % +0.2 % +2.8 % +1.3 %

2 µm -0.1 % +0.4 % -0.2 % +3.0 % +1.4 %

4 µm -0.3 % +0.4 % -1.3 % +3.4 % +1.7 %

8 µm -3.4 % +0.6 % -19.8 % +2.3 % -3.9 %

16 µm +23.5 % +1.6 % -29.1 % -38.4 % -40.8 %

最先超過 10 % 的是 Sz 在 dx=8 µm 時,Sa / Ssk / Sku 在 dx=16 µm 時,

Sq 直到最後都不超過(最大 1.6 %)。Sq 能保住,是因為混疊只是

把能量折回,保持了 2 階矩。Sa 在分布形狀

改變時會變動,Sz 則是由「刮痕底部是否恰好落在取樣點上」決定的極值。

在 dx=8 µm 時 Sa 以 ±5 % 合格、Sz 不合格 —— 同一份資料,

僅因看的是哪個數字,結論就會反轉。

★ 陷阱 (c) —— Sdq / Sdr 同時受取樣間隔和單位的影響

Sdq 是梯度的 rms,Sdr 是展開界面面積比 mean(√(1+|∇z|²)) - 1。兩者都

用中心差分計算,因此對波長 λ 的正弦,會按 sinc(2 dx/λ) 的量

偏小(實測,λ=32 µm,振幅 1,解析值 Sdq=0.138840):

dx Sdq 實測 實測的誤差 sinc(2dx/λ) 的預測

1 µm 0.138471 -0.27 % -0.64 %

2 µm 0.136212 -1.89 % -2.55 %

4 µm 0.126004 -9.25 % -9.97 %

8 µm 0.088388 -36.34 % -36.34 %

量得越粗,面看起來越平滑。 Sdr 本身的形式是對的,

只要量得夠細,就與解析值在 +0.116 % 內一致(以 λ=32、dx=0.25 實測)。

高度與 dx 的單位不同時,只有這裡會悄悄出錯(Sa/Sq

只使用高度的單位,所以察覺不到)。

邊緣的 1 列 1 行為單側差分,因此不納入評估。

fail-closed(失敗即拒絕)

• 不是 2 維 / 小於 8x8 / 含有 NaN、Inf。

• dx 或 dy 非正、非有限。

• 看起來未經頻帶處理(assume_filtered=False 時)。

• 所有點高度相同(Sq=0,Ssk/Sku 無法定義)。

詳細使用指南

• 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

型別可銜接的下一個運算子(可接受 table 作為輸入)

—

同類別(measure)

profile_params · surface_psd


*Provenance: roughness.py — ROUGHNESS 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

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