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 無法定義)。
• 範例資料目錄(下載 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)*Provenance: roughness.py — ROUGHNESS 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.