fullseye

surface_params — ROUGHNESS measure op

使い方

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

詳しい使い方ガイド

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(table を入力に取れる)

同カテゴリ(measure)

profile_params · surface_psd


Provenance: roughness.py — ROUGHNESS operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

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