Color Heatmap で既存ビジュアルリグレッションを拡張する
Color Heatmap ツールは差分画像を擬似ΔEで着色。従来の“赤/緑差分”よりも 色域・輝度性質別 に視覚化し根本原因特定を早めます。
TL;DR
- 既存SSIM差分に Heatmap を追加し“何が”変わったか分類
- ΔE領域メッシュを座標化→履歴で劣化傾向追跡
- CI失敗時は Heatmap PNG + CSV をアーティファクト保存
- 誤検知は閾値再調整でノイズ削減
1. 差分の質的分類
- 高ΔE且つ局所: エンコード副作用 / ガンマ不一致
- 低ΔE広域: 軽微な色空間変換差 or 再圧縮
- 輝度のみ変化: トーンマッピング / シャープ設定
2. CI 統合パイプライン
- baseline 取得
- pixelmatch で diff mask
- mask を Heatmap API 送信 → PNG + CSV
- CSV 集計し判定
// scripts/heatmap-run.ts (抜粋)
import fs from 'node:fs';
import pixelmatch from 'pixelmatch';
// a,b: RGBA Buffer, w,h セット済み
const diff = Buffer.alloc(w*h*4);
const mismatches = pixelmatch(a,b,diff,w,h,{threshold:0.1});
fs.writeFileSync('diff.png', diff);
// const res = await fetch('https://internal/heatmap',{method:'POST',body:diff});
// const { png, csv } = await res.json();
3. メトリクス蓄積
ΔE 面積比を週次集計し “静的資産の色揺れトレンド” を可視化。閾値近傍が連続する場合は閾値緩和でなく根本 (色空間変換 or 圧縮設定) を再調整。
4. 失敗軽減テクニック
- 広告/動的領域マスク
- 文字レンダリング差 (OS差異) は別ジョブ
- 小ΔEノイズ除去: 3x3 メディアン後 Heatmap 演算
4.5 関連ツール
5. まとめ
“差分がある” から “差分の性質が〇〇” へ粒度を上げることで調査コストを劇的に削減。
公開日: 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 を見比べるのがおすすめです。