surface_params — ROUGHNESS measure op

Data kinds: depthtable

Call: import roughness; roughness.surface_params(z, dx=1.0, dy=None, assume_filtered=False) (or opsroughness.get("surface_params"))

Usage

> This operator's description has not been translated yet. The original text follows as it is.

面の粗さパラメータ 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 を含む。

• `dxdy` が非正・非有限。

• 帯域処理済みに見えない(`assume_filtered=False` のとき)。

• 全点が同じ高さ(Sq=0 で Ssk/Sku が定義できない)。

Detailed usage guide

surface_roughness family guide

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

poc_surface_roughnesspy -3.11 examples/poc_surface_roughness.py

Ops the type connects to (they accept table as input)

Same category (measure)

profile_params · surface_psd


*Provenance: roughness.py — ROUGHNESS operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

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