measure op• Datenarten: depth → table
• Aufruf: import roughness; roughness.surface_params(z, dx=1.0, dy=None, assume_filtered=False) (oder opsroughness.get("surface_params"))
> Für diesen Operator gibt es noch keine Übersetzung. Es folgt der Originaltext unverändert.
面の粗さパラメータ 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 が定義できない)。
• Leitfaden zur Familie surface_roughness
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• poc_surface_roughness — py -3.11 examples/poc_surface_roughness.py
table als Eingabe)—
measure)*Provenance: roughness.py — ROUGHNESS Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.