synth op• 데이터 종류: 없음 → depth(인자만으로 정해지는 연산자 —— 이미지나 데이터 입력을 받지 않습니다)
• 호출: import roughness; roughness.surface_synth_psd(n, dx, hurst, lambda_lo, lambda_hi, sq, seed=0)(또는 opsroughness.get("surface_synth_psd"))
> 이 연산자의 설명은 아직 번역이 없습니다. 원문을 그대로 싣습니다.
指定した PSD から高さ場を合成する。`(z, sq_analytic)` を返す。
帯域 `lambda_lo <= λ <= lambda_hi` の各モードに振幅
`A(q) ∝ q^-(H+1)(= 面 PSD C(q) ∝ q^-2(H+1)`、自己アフィン)を置き、
位相だけ乱数にする。全体を `sq` に規格化して返す。
引数
n 格子の大きさ。整数なら `n x n、(ny, nx)` でも可。
dx 標本間隔(正方画素)。
hurst Hurst 指数 H(0 < H < 1)。大きいほど滑らか。
lambda_lo 帯域の短い側の波長。
lambda_hi 帯域の長い側の波長。
sq 目標 Sq(帯域内の rms 高さ)。
seed 位相の乱数種。
★ 解析 Sq を一緒に返すのが肝
振幅を固定して位相だけ振るので、Parseval から
`<h²> = (1/(ny nx))² Σ_k A_k²` が 位相の引き方によらず決まる。
つまり Sq の真値が乱数に依存しない。実測: `z.std()` と
`sq_analytic` の相対差は seed・H・帯域・寸法を振っても
最大 2.2e-16(下の表)。ここを「乱数を振って rms を測る」で
済ませると、真値そのものが実現ごとにばらついて後段の誤差と混ざる。
n H λ帯域 sq |std/analytic-1| 尖度 PTV/rms
128 0.30 4-32 0.5000 2.2e-16 3.084 7.97
256 0.50 4-64 0.0800 0.0e+00 3.005 7.85
256 0.80 2-64 0.0800 2.2e-16 2.893 6.92
512 0.80 2-64 0.0800 0.0e+00 3.113 8.25
512 0.95 8-256 2.0000 0.0e+00 2.542 5.69
★ PoC が踏んだ落とし穴を実装側に閉じ込めてある
係数をエルミートにするために位相を `phi = (u - u[-k]) / 2` で
反対称化すると、確かに反対称にはなるが位相が一様でなくなる
(三角分布になって 0 の近くに寄る)。すると全モードが原点で同位相に
足され、高さ場に 1 本のスパイクが立つ。同じ種・同じ帯域で測った実測
(512², H=0.8, 帯域 2-64):
位相の作り方 PTV/rms 尖度 |std/analytic-1|
(u - u[-k])/2 で反対称化 55.00 71.81 0.0e+00
共役対の片方だけに一様乱数 8.47 2.95 0.0e+00 ← 正しい
どちらも Sq は解析値と厳密に一致する。 分散だけ見ていたら
気づけない壊れ方なので、この関数は共役対の片方だけに一様乱数を引く
実装に固定し、テストで尖度と PTV/rms も見る。自己共役モード
(k = -k、4 点)は係数が実でなければならないので、位相ではなく
符号 ±1 を振る(位相 0 に固定すると全部 +A に偏るため)。
fail-closed
• `n が 8 未満 / dx が非正 / hurst` が (0, 1) の外。
• `lambda_lo >= lambda_hi`。
• `lambda_lo が Nyquist 波長 2*dx` 未満(実現できない帯域)。
• `lambda_hi` が評価長さ超(1 周期も入らない)。
• `sq` が非正。
• 帯域に 1 モードも入らない(格子が粗すぎる / 帯域が狭すぎる)。
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• poc_surface_roughness — py -3.11 examples/poc_surface_roughness.py
depth 를 입력으로 받는 것)surface_form_remove · surface_filter · surface_params · surface_psd
synth)—
*Provenance: roughness.py — ROUGHNESS 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.