画像修復 (Inpainting) の技術と応用 - 古典手法から深層学習まで
画像修復 (Inpainting) とは - 欠損を自然に埋める技術
画像修復 (Inpainting) は、画像中の指定された領域 (マスク) を周囲の情報から自然に復元する技術です。写真からの不要物除去、古い写真の傷修復、ウォーターマーク除去、テキストオーバーレイの除去など、幅広い応用を持つ画像処理の重要分野です。
Inpainting の入力と出力:
- 入力 1: 修復対象の画像 (欠損領域を含む)
- 入力 2: マスク画像 (修復すべき領域を白で指定)
- 出力: 欠損領域が自然に埋められた画像
技術的な課題: Inpainting は本質的に不良設定問題 (ill-posed problem) です。欠損領域の「正解」は存在せず、周囲の文脈から最も自然に見える内容を推定する必要があります。小さな傷 (数ピクセル) の修復は比較的容易ですが、大きな領域 (画像の 20% 以上) の修復は非常に困難で、意味的な理解が必要になります。
手法の分類:
- 拡散ベース: 周囲のピクセル値を欠損領域に拡散させる (Navier-Stokes、Telea)
- パッチベース: 画像内の類似パッチを検索してコピーする (PatchMatch、Criminisi)
- 深層学習ベース: ニューラルネットワークで意味的に整合する内容を生成する (Partial Conv、LaMa)
修復領域のサイズと内容の複雑さに応じて、適切な手法を選択することが重要です。小さな傷には拡散ベース、中程度のテクスチャ領域にはパッチベース、大きな構造的欠損には深層学習ベースが適しています。
古典的手法 - Navier-Stokes 法と Telea 法
OpenCV に実装されている 2 つの古典的 Inpainting アルゴリズムを解説します。どちらも小さな欠損 (傷、テキスト、細い線) の修復に適しており、計算コストが低く実装が容易です。
Navier-Stokes 法 (cv2.INPAINT_NS): Bertalmio et al. (2001) が提案した手法で、流体力学の Navier-Stokes 方程式に着想を得ています。画像の等照度線 (isophote: 同じ輝度値を持つ曲線) を欠損領域の境界から内部に向かって伝播させます。
原理: 欠損領域の境界での勾配方向と大きさを計算し、その情報を内部に向かって反復的に伝播させます。等照度線の曲率を保存するため、エッジの連続性が自然に維持されます。
Telea 法 (cv2.INPAINT_TELEA): Alexandru Telea (2004) が提案した FMM (Fast Marching Method) ベースの手法です。欠損領域の境界から内部に向かって、距離に基づく重み付き平均で値を埋めていきます。
原理: 境界に近いピクセルから順に処理し、既知ピクセルの加重平均 (距離が近いほど重み大) で値を決定します。FMM により処理順序が最適化され、高速に動作します。
OpenCV での実装:
result = cv2.inpaint(img, mask, inpaintRadius=3, flags=cv2.INPAINT_TELEA)
inpaintRadius は各ピクセルの修復に参照する近傍の半径 (ピクセル) です。3-5 が一般的で、大きくすると滑らかになりますが処理時間が増加します。
性能比較: 1,920 × 1,080画像、マスク面積 1% で、Telea 法は約 50ms、NS 法は約 200ms です。品質は NS 法がエッジ保持に優れ、Telea 法は均一領域の修復に優れます。マスク面積が 5% を超えると両手法とも品質が急激に低下し、ぼけた結果になります。
パッチベース手法 - PatchMatch と Criminisi アルゴリズム
パッチベースの Inpainting は、画像内の既知領域から類似するパッチ (小さな矩形領域) を検索し、欠損領域にコピーする手法です。テクスチャの再現性に優れ、中程度の欠損領域 (画像の 5-15%) に対して高品質な結果を生成します。
Criminisi アルゴリズム (2004): 欠損領域の境界から優先度に基づいて修復を進める手法です。エッジ (構造) が通る境界ピクセルを優先的に処理し、構造の連続性を保証してからテクスチャを埋めます。
処理手順: (1) 境界ピクセルの優先度を計算 (信頼度 × データ項)。(2) 最高優先度のピクセルを中心とするパッチ (9x9 程度) を設定。(3) 既知領域から最も類似するパッチを SSD (Sum of Squared Differences) で検索。(4) 見つかったパッチの対応部分を欠損領域にコピー。(5) 境界を更新して繰り返し。
PatchMatch (2009): Barnes et al. が提案した高速な近似最近傍パッチ検索アルゴリズムです。ランダム初期化 → 伝播 → ランダム探索の 3 ステップを反復し、全パッチの最近傍を準最適に求めます。
- ランダム初期化: 各パッチにランダムなオフセットを割り当て
- 伝播: 隣接パッチの良いマッチを自身に伝播 (良いマッチは空間的に連続する傾向を利用)
- ランダム探索: 現在のマッチ周辺で指数的に縮小する範囲を探索
5-6 回の反復で収束し、全探索の 100-1000 倍高速に近似最近傍を見つけます。Adobe Photoshop の「コンテンツに応じた塗りつぶし」の基盤技術です。
性能: 1,920 × 1,080画像、マスク面積 10% で約 2-5 秒 (CPU)。GPU 実装では 200-500ms に高速化可能です。テクスチャの繰り返しパターン (芝生、壁、空) の修復に特に優れます。
深層学習ベースの Inpainting - 意味的理解による修復
深層学習ベースの Inpainting は、大規模な画像データセットから学習した意味的知識を活用し、従来手法では不可能だった大きな欠損領域の修復や、構造的に複雑な内容の生成を実現します。
Partial Convolution (2018): NVIDIA が提案した手法で、マスクされた領域を無視する特殊な畳み込み演算を使用します。通常の CNN はマスク領域のゼロ値に影響されますが、Partial Conv は有効ピクセルのみで正規化された畳み込みを行い、マスク境界のアーティファクトを抑制します。
Gated Convolution (2019): Partial Conv の改良で、学習可能なゲーティング機構により、各ピクセルの有効性を動的に判断します。不規則な形状のマスクに対してより自然な結果を生成します。
LaMa (Large Mask Inpainting, 2022): 現時点で最高性能の Inpainting モデルの 1 つです。Fast Fourier Convolution (FFC) を使用して大きな受容野を効率的に実現し、画像全体の構造を考慮した修復が可能です。画像の 50% 以上が欠損していても自然な結果を生成できます。
Stable Diffusion Inpainting: 拡散モデルベースの Inpainting で、テキストプロンプトで修復内容を指示できます。「この領域を青空で埋める」「人物を除去して背景を復元する」といった意味的な指示が可能で、クリエイティブな用途に適しています。
性能比較 (FID スコア、低いほど良い):
- Telea 法: FID 45-60 (小さなマスクのみ有効)
- PatchMatch: FID 25-35
- Partial Conv: FID 15-20
- LaMa: FID 8-12
- Stable Diffusion: FID 5-10 (ただし一貫性に課題)
実務での活用パターン - 不要物除去からデータ拡張まで
Inpainting 技術の実務での具体的な活用パターンを、適切な手法の選択指針とともに紹介します。
写真からの不要物除去: 観光写真の通行人除去、電線の除去、ゴミ箱やコーンの除去など。マスクの作成にはセグメンテーションモデル (SAM: Segment Anything Model) を使用し、除去対象を自動検出します。小さな物体は Telea 法で十分ですが、大きな物体 (画像の 10% 以上) は LaMa や Stable Diffusion が必要です。
ウォーターマーク除去: 半透明のウォーターマークは単純なマスクでは対応できません。ウォーターマークのアルファ値を推定し、元画像を逆算する手法 (Blind Watermark Removal) が研究されています。ただし、著作権保護の観点から倫理的な配慮が必要です。
古い写真の修復: スキャンした古い写真の傷、折り目、色褪せを修復します。傷の検出 (エッジ検出 + 形態学的処理) → マスク生成 → Inpainting のパイプラインで自動化可能です。色褪せはヒストグラム補正で対応し、Inpainting は物理的な損傷のみに適用します。
機械学習のデータ拡張: 学習データの多様性を増やすため、画像の一部をランダムにマスクして Inpainting で復元する手法 (Cutout + Inpainting) が使用されます。モデルが欠損に対してロバストになり、汎化性能が向上します。
動画の Inpainting: 動画からの物体除去では、時間的な一貫性が重要です。フレームごとに独立して Inpainting すると、修復結果がフレーム間でちらつきます。光学フロー (Optical Flow) で時間的な整合性を保証する手法 (Video Inpainting) が研究されており、STTN (Spatial-Temporal Transformer Network) などが高品質な結果を示しています。
マスク生成の自動化と品質評価
Inpainting の品質はマスクの精度に大きく依存します。適切なマスク生成手法と、修復結果の品質を定量的に評価する指標を解説します。
手動マスク生成: ブラシツールで修復領域を塗る最も直感的な方法です。Photoshop、GIMP、Web アプリケーションで広く使用されています。精密なマスクが必要な場合に最適ですが、大量処理には不向きです。
自動マスク生成:
- セグメンテーション: SAM (Segment Anything Model) でクリック 1 つで物体のマスクを生成。精度が高く、複雑な形状にも対応。
- 物体検出: YOLO でバウンディングボックスを検出し、内部をマスクとする。高速だが精度は粗い。
- テキスト検出: EAST や CRAFT でテキスト領域を検出し、テキスト除去用マスクを生成。
- 傷検出: 古い写真の傷は、エッジ検出 + 形態学的処理 + 色差分析で自動検出可能。
マスクの膨張: 検出されたマスクは対象物のぎりぎりの境界であることが多く、修復品質を上げるためにマスクを 3-5 ピクセル膨張 (dilate) させるのが一般的です。これにより境界のアーティファクトが軽減されます。
品質評価指標:
- PSNR / SSIM: 元画像が既知の場合の数値的評価。PSNR 30dB 以上、SSIM 0.95 以上が高品質の目安。
- FID (Frechet Inception Distance): 生成画像の分布と実画像の分布の距離。低いほど自然。
- LPIPS (Learned Perceptual Image Patch Similarity): 知覚的な類似度。人間の判断との相関が高い。
主観評価: 最終的には人間の目による評価が最も重要です。数値指標が高くても、意味的に不自然な修復 (存在しないはずの物体が生成される) は品質が低いと判断されます。