AIアップスケールのアーティファクト完全ガイド 2025 — 見極め・診断・再処理の実践
公開: 2025年9月22日 · 読了目安: 1 分 · 著者: Unified Image Tools 編集部
“綺麗になったはずが不自然”——その違和感は多くが再現パターン(アーティファクト)として説明できます。本稿は、AIアップスケールで出やすい症状を言語化し、原因の切り分けから再処理レシピ、品質評価、運用チェックリストまでを一気通貫でまとめた実践ガイドです。
先に結論(TL;DR)
-
“症状→原因→対処”の辞書を持つと、無駄なトライ回数が激減
-
再処理順は基本「デノイズ/復元 → シャープ → エンコード」
-
“見た目が正義”。指標(SSIM/LPIPS)は補助輪として活用
-
バンディングにはディザ、ワックス肌にはエッジ保護、リングには半径/量の最適化
-
配信はLCP/INPを壊さない設計で。重い画像は遅延/低優先度
-
内部リンク: INPを悪化させない配信, フォーマット比較, DPRとimage-set
アーティファクトの分類と原因
- リング/ハロー(Ringing/Halo)
- 原因: 過剰シャープ、復元フィルタのオーバーシュート、強いデコンボリューション
- 対策: シャープ半径↓、量↓、ローパス併用、エッジ域の抑制
- のっぺり化(Texture Wash/Wax Skin)
- 原因: 過剰なノイズ除去、過学習モデルの過平滑化
- 対策: 微細ノイズを少量戻す、テクスチャ保護マスク、量子化ステップ(q)を緩める
- 文字のにじみ/ドット抜け(Subpixel/Resampling)
- 原因: サブピクセル情報の破綻、非整数倍率、リサンプリングカーネルの選択ミス
- 対策: 整数倍アップスケール、ベクター化(SVG/Lottie)、NN系/高品質カーネル
- チェッカーボード/モアレ
- 原因: 畳み込みやアップサンプラ由来の周期パターン、テクスチャ干渉
- 対策: ぼかしの微調整、異なるアップサンプラで再処理、ダウンサンプリング時のプリフィルタ
- バンディング(階調段差)
- 原因: 8-bit量子化、強い圧縮、広いグラデーション領域
- 対策: デバンディング+ディザ、10-bitパイプライン、AVIFの高ビット深度で再エンコード
- 色ずれ/クロマにじみ
- 原因: YUV変換時のクロマサブサンプリング(4:2:0等)、色空間の不整合
- 対策: 4:4:4保持、sRGB/P3の整合、不要な色空間変換を避ける
- 時間方向のチラつき(動画)
- 原因: フレーム間の不整合、強い時系列ノイズ除去
- 対策: 時間フィルタの強度見直し、キーフレーム間隔の最適化
診断フレーム(見る順番)
- まずは肉眼の主観評価(ズーム/比較スライダー)
- 差分画像(abs(original - processed))で変化の集中部位を特定
- ヒストグラム/周波数(高周波成分の過剰/欠落)
- 指標で裏取り(SSIM/LPIPS/Butteraugli)— 数字は“補助”。最終判断は目視
再処理ワークフロー(定石)
- 入力の正規化(向き/色空間/ビット深度/ICC)
- デノイズ/デコンボリューション(必要なら)
- エッジ保護付きの控えめなシャープニング(半径/量/閾値)
- デバンディング + ディザ(グラデーション)
- エンコード設定のスイープ(AVIF/WebP、q/速度/4:2:0 or 4:4:4)
- 目視 + 指標 + ファイルサイズでバランス点を決定
実装スニペット(Sharp/FFmpeg)
// Node + Sharp: 正規化 → 軽い復元 → エンコードの例
import sharp from 'sharp'
export async function enhance(input: string, base: string) {
const s = sharp(input, { failOn: 'none' })
.withMetadata({ orientation: 1 }) // autorotate 相当
.gamma() // トーン補正(軽度)
.median(1) // 微ノイズ抑制(やりすぎ注意)
await s.webp({ quality: 78 }).toFile(`${base}.webp`)
await s.avif({ quality: 56, chromaSubsampling: '4:4:4' }).toFile(`${base}.avif`)
}
# FFmpeg: デバンディング + 量子化のスイープ例(静止画列→動画想定)
ffmpeg -i input.mp4 -vf "gradfun=radius=16:strength=0.8" -c:v libaom-av1 -crf 28 -b:v 0 -pix_fmt yuv420p10le out-av1.mp4
# バンディングが残るなら dither を軽く追加(別ツール/ノイズ合成でも可)
実務Tips(運用の勘所)
- 低ビットレート想定なら“先に微小ノイズで埋める”と破綻しにくい
- テキスト/UIはラスタではなくベクター化(SVG/Lottie)を優先
- HDR/広色域 → 最終sRGB化前に外れ値チェック、10-bitパイプラインを維持
- 画像配信は INPに優しい設計 を厳守(LCP候補以外は遅延/低優先度)
品質評価と計測の勘所
- SSIM/PSNRは“同一画素方向の忠実度”。見た目の違和感は拾えないことがある
- LPIPS/Butteraugliで主観に近い評価も参照。ただし最終は人間の目
- 比較ビュー(スライダー/AB)で“どこが良くなり、どこが悪化したか”を明確化
- ストアに入る前にバッチでスイープ(q/解像度/サブサンプル)→ メトリクス/サイズ/目視の三点決着
チェックリスト(保存版)
- [ ] 入力正規化(向き/ICC/色域/10-bit)
- [ ] デノイズ/デコンボリューション → エッジ保護シャープの順
- [ ] デバンディング + ディザ(必要時)
- [ ] AVIF/WebPでq/4:2:0/4:4:4をスイープして最小違和点を探索
- [ ] LCP/INPを壊さない配信(LCP候補のみ高優先度/プレロード)
FAQ
-
Q: “ワックス肌”を抑えるには? A: デノイズを弱め、テクスチャ保護/エッジ保護を入れ、qを上げる。人物域だけ処理強度を落とすのも有効。
-
Q: シャープはどれくらい? A: 半径/量/閾値を小さく始め、比較スライダーで“過剰感”が出ない範囲に調整。輪郭だけに効かせると副作用が少ない。
-
Q: 指標は何を見れば? A: ベースはSSIM + LPIPS、困ったらButteraugliも。いずれも最終判断を置き換えない。
まとめ
名前が付けば、対処は定石に落とし込めます。診断→最小限の再処理→実配信の順で、自然さと軽さの両立点を見つけていきましょう。