テクスチャ合成のアルゴリズムと応用 - パッチベースから深層学習まで
テクスチャ合成とは - 基本概念と応用分野
テクスチャ合成 (Texture Synthesis) とは、小さなサンプル画像から視覚的に同等の大きなテクスチャを自動生成する技術です。ゲーム開発、映画の VFX、建築ビジュアライゼーション、3D モデリングなど幅広い分野で活用されています。
テクスチャ合成が解決する問題: 実世界のテクスチャ (レンガ壁、木目、布地など) を撮影しても、解像度やサイズに制限があります。そのまま繰り返し配置 (タイリング) すると継ぎ目が目立ち、不自然な見た目になります。テクスチャ合成は統計的な特徴を保持しながら任意サイズのテクスチャを生成し、この問題を解決します。
テクスチャの分類:
- 確率的テクスチャ: 砂、雲、ノイズなど規則性が低いもの。統計的手法で比較的容易に合成可能
- 構造的テクスチャ: レンガ、タイル、織物など明確なパターンを持つもの。構造の保持が課題
- 準構造的テクスチャ: 木目、石壁など部分的な規則性を持つもの。最も合成が困難
テクスチャ合成の品質評価には、人間の知覚的な類似性が重要です。SSIM や FID (Frechet Inception Distance) などの定量指標に加え、主観評価が不可欠とされています。近年では 4K 以上の高解像度テクスチャの需要が増加し、効率的な合成アルゴリズムの重要性が高まっています。
ピクセルベース手法 - Efros-Leung アルゴリズム
ピクセルベースのテクスチャ合成は、1999 年に Efros と Leung が提案した手法が基礎となっています。出力画像の各ピクセルを 1 つずつ、入力テクスチャから最も類似した近傍パターンを検索して決定します。
アルゴリズムの手順:
- 出力画像の未生成ピクセルの周囲 (例: 11x11 の近傍窓) を取得する
- 入力テクスチャ内で同サイズの窓をスライドさせ、SSD (Sum of Squared Differences) が最小となるパッチを検索する
- 最も類似したパッチの中心ピクセル値を出力に書き込む
- ラスタスキャン順またはオニオンピール順で全ピクセルを処理する
近傍窓サイズの影響: 窓サイズが小さい (5x5 程度) と局所的な特徴しか捉えられず、大域的な構造が崩れます。大きい (23x23 以上) と構造は保持されますが、計算コストが O(N²) で増大し、入力テクスチャの単純なコピーに近づきます。実用的には 9x9 から 15x15 が推奨されます。
計算コストの問題: 256 × 256の出力を生成する場合、65,536 ピクセルそれぞれについて入力テクスチャ全体を走査する必要があり、128 × 128の入力に対して約 10 億回の比較演算が必要です。ANN (Approximate Nearest Neighbor) や Tree-Structured Vector Quantization による高速化が提案されていますが、リアルタイム処理には不向きです。処理時間は 256 × 256の生成で数分から数十分を要します。
パッチベース手法 - Image Quilting と GraphCut
パッチベース手法はピクセル単位ではなくパッチ (矩形ブロック) 単位で合成を行い、品質と速度の両方を大幅に改善しました。2001 年の Image Quilting (Efros-Freeman) と 2003 年の GraphCut Textures が代表的です。
Image Quilting のアルゴリズム:
- 出力画像をオーバーラップ領域付きのグリッドに分割する (例: パッチサイズ 36x36、オーバーラップ 6 ピクセル)
- 各グリッド位置で、既に配置済みのパッチとのオーバーラップ領域の SSD が閾値以下のパッチを入力から検索する
- オーバーラップ領域で最小コストの境界線 (Minimum Error Boundary Cut) を動的計画法で計算する
- 境界線に沿ってパッチを切り貼りし、継ぎ目を最小化する
GraphCut による改良: GraphCut Textures は、パッチ間の最適な境界をグラフカット (最大フロー/最小カット) 問題として定式化します。Image Quilting の 1 次元の境界線ではなく、2 次元的に最適な境界を求めるため、より自然な合成結果が得られます。計算コストは増加しますが、構造的テクスチャでの品質向上が顕著です。
実用的なパラメータ設定: パッチサイズはテクスチャの特徴的なスケールの 1.5-2 倍が目安です。レンガ壁なら 1 個のレンガを含むサイズ、木目なら木目の繰り返し周期の 2 倍程度を設定します。オーバーラップはパッチサイズの 1/6 から 1/4 が一般的で、大きすぎると計算コストが増加し、小さすぎると継ぎ目が目立ちます。
統計的手法 - Gram 行列とニューラルスタイル転送
2015 年に Gatys らが提案したニューラルスタイル転送は、CNN の中間層から抽出した特徴マップの Gram 行列でテクスチャの統計的特徴を表現します。この手法はテクスチャ合成にも直接応用可能で、パラメトリックなテクスチャモデルとして機能します。
Gram 行列によるテクスチャ表現: VGG-19 ネットワークの各畳み込み層の特徴マップ (サイズ C×H×W) を C×(H*W) の行列に変形し、その行列の内積 (C×C の Gram 行列) を計算します。Gram 行列はチャネル間の相関を捉え、テクスチャの空間的な統計量を位置に依存しない形で表現します。
テクスチャ合成の手順:
- ランダムノイズ画像から開始する
- 入力テクスチャと生成画像の各層の Gram 行列の差 (スタイルロス) を計算する
- L-BFGS または Adam オプティマイザで生成画像のピクセル値を反復更新する
- 通常 300-500 イテレーションで収束する
利点と限界: この手法は確率的テクスチャ (雲、水面、砂利) で優れた結果を生みますが、構造的テクスチャ (レンガ、格子) では長距離の空間的規則性を保持できない欠点があります。Gram 行列は位置情報を捨てるため、周期的パターンの再現が困難です。計算コストも高く、512 × 512の生成に GPU で約 30 秒を要します。
改良手法として、フィードフォワードネットワークで直接テクスチャを生成する手法 (Ulyanov et al., 2016) が提案され、推論時間を数ミリ秒に短縮しています。
GAN ベースのテクスチャ合成 - 高品質かつ高速な生成
GAN (Generative Adversarial Network) を用いたテクスチャ合成は、高品質な結果をリアルタイムに近い速度で生成できる最新のアプローチです。PSGAN、SinGAN、StyleGAN ベースの手法が代表的です。
SinGAN (2019): 単一の画像から多スケールの GAN を学習し、任意サイズのテクスチャを生成します。粗いスケールから細かいスケールへ段階的に生成するピラミッド構造を採用し、大域的な構造と局所的なディテールの両方を保持します。学習には単一画像のみで十分ですが、学習時間が画像あたり約 30 分 (GPU) かかります。
StyleGAN ベースの手法: StyleGAN2 のアーキテクチャを活用し、潜在空間からテクスチャを生成します。スタイルベクトルの操作により、テクスチャの属性 (色調、粗さ、方向性) を連続的に制御可能です。大規模なテクスチャデータセットで事前学習し、少数のサンプルでファインチューニングする転移学習アプローチが実用的です。
実用的な比較:
- 品質: GAN ベース > Gram 行列 > パッチベース > ピクセルベース (構造的テクスチャの場合)
- 速度 (推論): GAN ベース (10ms) > パッチベース (1s) > Gram 行列 (30s) > ピクセルベース (数分)
- 制御性: GAN ベースは潜在空間操作で高い制御性を持つ
- 学習コスト: GAN は事前学習に数時間から数日を要する
産業応用では、ゲームエンジン (Unreal Engine 5、Unity) がリアルタイムテクスチャ合成を組み込み始めており、Nanite と組み合わせた動的テクスチャ生成が注目されています。
実践的なテクスチャ合成 - ツールとワークフロー
テクスチャ合成を実務で活用するための具体的なツール、ライブラリ、ワークフローを紹介します。用途に応じた最適な選択肢を示します。
オープンソースライブラリ:
- OpenCV:
cv2.inpaint()でテクスチャベースの修復が可能。Telea 法と Navier-Stokes 法を実装 - scikit-image:
skimage.restorationモジュールでパッチベースの合成が利用可能 - PyTorch: Gram 行列ベースの合成を
torchvision.models.vgg19で実装可能。GPU 加速で 512 × 512を約 30 秒で生成 - Substance Designer: プロシージャルテクスチャ生成の業界標準ツール。ノードベースのワークフローで非破壊編集が可能
シームレステクスチャの作成手順:
- 入力画像の端をオーバーラップさせてブレンドする (クロスフェード法)
- Image Quilting でシームレスな境界条件を設定して合成する
- 周波数ドメインでの位相調整により周期的な連続性を確保する
品質チェックのポイント: 合成結果を 2x2 や 3x3 にタイリングして継ぎ目を確認します。また、ヒストグラム比較で入力と出力の色分布が一致しているか検証します。構造的テクスチャでは FFT のパワースペクトルを比較し、周期性が保持されているか確認することが重要です。FID スコアが 50 以下であれば高品質と判断できます。
パフォーマンス最適化: 4K テクスチャの生成では、マルチスケールアプローチが有効です。まず 256 × 256で粗い合成を行い、段階的にアップサンプリングしながらディテールを追加します。この手法により、直接 4K を生成する場合と比較して 5-10 倍の高速化が可能です。