ディザパターンアーチファクトの診断と抑制テクニック
ディザは 帯域(バンディング)を隠す代償 として粒状感や格子パターンを導入します。Dither Compare とズーム観察で最小副作用を得る診断フローを提示します。
本稿は 症状 → 主因 → 最小修正 → 再評価 のループを最短距離で回すための観察チャート / コマンド / バッチスクリプト / ハイブリッド合成手法を体系化し、UI アイコン / 写真 / イラストで異なる許容度を明示します。
TL;DR
- Ordered 格子 → 色数+16 か Floyd 系へ (格子周期が構造と干渉)
- Floyd 粒状ノイズ →
--floyd=0.5→0.3
弱化 (高周波写真は許容幅広) - Sierra ドット荒れ → 色数再増 or Ordered 切替
- 局所問題 → マスク分離 + 合成 (ハイブリッド)
- 判定: 200% ズーム + 明暗背景 + OLED 実機 + ΔPSNR/サイズ差
1. 症状と対処表
症状 | 主因 | 対策 | 再評価指標 |
---|---|---|---|
格子/チェック | Ordered (Bayer 8x8) | Floyd系 / 色数+16 | 格子周波数ピーク低下 |
粒状ざらつき | 過強度拡散 | --floyd 値低減 | ΔPSNR -0.2dB 未満 |
細線滲み | エラー過拡散 | Ordered / マスク | 線幅維持(px) |
高彩度斑点 | パレット不足 | 色数 +16〜32 | ΔE95%tile 改善 |
2. 診断フロー
- 200% + 明暗背景で格子/粒状/滲み/斑点分類
- 方式固有 vs 色数不足 を判断
- 方式切替 → 改善/未改善
- 未改善なら色数 +16 step → ΔPSNR/サイズ測定
- 局所のみ悪化 → ハイブリッド合成分岐
# Floyd 強度探索 (0.5→0.4→0.3)
for v in 0.5 0.4 0.3; do
pngquant --floyd=$v --quality=80-90 input.png -o out-fs$v.png
done
# Ordered 比較
magick input.png -ordered-dither o8x8 -colors 128 PNG8:out-ordered.png
# 色数 +16 ステップ
for c in 128 144 160; do
magick input.png -colors $c -dither FloydSteinberg PNG8:out-fs$c.png
done
2.5 バッチ再評価スクリプト
差分の 客観化 に必要最小: サイズ, ΔPSNR, ΔE95%tile。
// scripts/dither-recheck.ts
import { execSync } from 'node:child_process';
import fs from 'node:fs';
import ArticleNextPrev from '@/components/ArticleNextPrev';
const files = process.argv.slice(2);
console.log('file,variant,size,psnr');
for (const f of files) {
for (const variant of ['fs128','ordered128','fs144']) {
if (variant==='fs128') execSync(`magick ${f} -colors 128 -dither FloydSteinberg PNG8:${f}-fs128.png`);
if (variant==='ordered128') execSync(`magick ${f} -colors 128 -ordered-dither o8x8 PNG8:${f}-ordered128.png`);
if (variant==='fs144') execSync(`magick ${f} -colors 144 -dither FloydSteinberg PNG8:${f}-fs144.png`);
const out = `${f}-${variant}.png`;
const psnr = execSync(`magick compare -metric PSNR ${f} ${out} null: 2>&1 || true`).toString().trim();
const size = fs.statSync(out).size;
console.log(`${f},${variant},${size},${psnr}`);
}
}
3. 合成ワークアラウンド
文字やロゴだけ Ordered + 背景 FS 出力をレイヤ合成するハイブリッドで局所アーチファクトのみ回避。マスク境界は feather 1px
。
# 背景 FS 出力
magick ui.png -colors 128 -dither FloydSteinberg PNG8:bg.png
# ロゴ Ordered
magick ui.png -colors 128 -ordered-dither o8x8 PNG8:logo.png
# 透過マスク (mask.png)
magick bg.png logo.png mask.png -compose over -composite out-hybrid.png
3.5 UI / 写真 / イラスト判定基準
カテゴリ | 許容格子 | 許容粒状 | 判定メモ |
---|---|---|---|
UI アイコン | ほぼ 0 | 低 | 拡散弱め優先 |
写真 | 中 (擬態) | 中 | 強度調整優先 |
イラスト | 低 | 中 | Ordered→FS 比較 |
関連ツール / 深掘り
4. まとめ
観察語彙の標準化 (格子/粒状/滲み/斑点) と最小変更セット (方式切替 / 色数 +16 / 強度弱化 / ハイブリッド) を CSV で履歴化し再発時に再現可能なプロセスへ。
- 副作用: ΔPSNR / ΔE95%tile / サイズ比
- 候補選別: PNG Re-Optimize 余地スコア
- Quality Ladder と組み合わせ主観ばらつき縮小
公開日: 2025-09-06編集: gazou-compressor.jp
FAQ
FAQ(よくある質問)
1画像形式の基本方針は?(写真/スクショ/透過)
写真は AVIF / WebP(画質80–85%目安)、UIやスクショはPNG / WebP Lossless、単色ロゴはSVGが基本です。 実装の詳細は srcset/sizes設計ガイド と スクショ最適化 を参照してください。
2圧縮しても画質を落とさないコツは?
実表示幅に合わせたリサイズ → 過大ダウンロードを防ぎ、
srcset/sizes
を 実描画幅に一致させます。画質は写真で 80–85% を起点に、ノイズやエッジを目視確認。 仕上げは /compare で Before/After を見比べるのがおすすめです。