JA EN

画質評価指標の完全ガイド - SSIM, PSNR, VMAF の違いと使い分け

· 約 9 分で読めます

画質評価指標とは - なぜ客観的な品質測定が必要なのか

画像や映像の品質を評価する方法は、大きく主観評価と客観評価に分かれます。主観評価は人間の被験者に画像を見せてスコアを付けてもらう方法 (MOS: Mean Opinion Score) ですが、時間とコストがかかり、再現性にも課題があります。そこで、数学的なアルゴリズムで品質を数値化する客観評価指標が開発されてきました。

客観評価指標は、圧縮パイプラインの自動化において不可欠な役割を果たします。例えば、画像配信サービスで数百万枚の画像を最適な品質で圧縮する場合、1 枚ずつ人間が確認することは現実的ではありません。SSIM や VMAF などの指標を使えば、品質の閾値を設定して自動的に圧縮パラメータを調整できます。

代表的な客観評価指標には以下のものがあります。

これらの指標はいずれも「参照画像 (原画)」と「評価画像 (圧縮後)」を比較する Full-Reference 型です。参照画像がない場合に使う No-Reference 型 (BRISQUE、NIQE など) も存在しますが、精度は Full-Reference 型に劣ります。

PSNR の計算原理と限界 - ピクセル単位の誤差測定

PSNR (ピーク信号対雑音比) は、原画と圧縮画像のピクセル値の差 (誤差) を測定する最もシンプルな指標です。計算式は以下のとおりです。

PSNR = 10 * log10(MAX^2 / MSE)

ここで MAX はピクセル値の最大値 (8 bit 画像なら 255)、MSE は平均二乗誤差 (Mean Squared Error) です。MSE は全ピクセルの差の二乗の平均値として計算されます。PSNR の単位はデシベル (dB) で、値が大きいほど品質が高いことを意味します。

一般的な PSNR の目安:

PSNR の最大の問題点は、人間の視覚特性を考慮していないことです。例えば、画像全体に均一なノイズを加えた場合と、エッジ部分にだけ強いノイズを加えた場合で、MSE が同じでも人間の知覚する品質は大きく異なります。テクスチャの多い領域のノイズは目立ちにくく、平坦な領域のノイズは目立ちやすいという特性を PSNR は捉えられません。

それでも PSNR が今なお使われる理由は、計算コストの低さと解釈の容易さにあります。大量の画像を高速にスクリーニングする用途や、同一コーデック内でのパラメータ比較には十分実用的です。Python では skimage.metrics.peak_signal_noise_ratio で簡単に計算できます。

SSIM の仕組み - 人間の視覚特性に基づく構造的類似度

SSIM (Structural Similarity Index) は 2004 年に Wang らによって提案された指標で、人間の視覚系が画像の構造的情報を重視するという知見に基づいています。PSNR がピクセル単位の誤差を測定するのに対し、SSIM は輝度 (luminance)、コントラスト (contrast)、構造 (structure) の 3 つの要素を独立に評価し、それらを統合します。

3 つの比較要素:

最終的な SSIM は SSIM(x,y) = l(x,y)^α * c(x,y)^β * s(x,y)^γ で計算されます (通常 α=β=γ=1)。値の範囲は -1 から 1 で、1 が完全一致を意味します。実用上は 0.95 以上であれば人間が劣化を知覚しにくいとされています。

SSIM は 11x11 のガウシアンウィンドウをスライドさせながら局所的に計算し、全画像の平均を取ります。この局所計算により、画像の異なる領域での品質変動を捉えることができます。派生指標として、マルチスケールで評価する MS-SSIM があり、異なる視距離での品質をより正確に反映します。

実装面では、ImageMagick の compare -metric SSIM、Python の skimage.metrics.structural_similarity、FFmpeg の ssim フィルタなど、多くのツールが SSIM をサポートしています。CI/CD パイプラインに組み込んで、画像変換後の品質を自動チェックする用途に最適です。

VMAF の革新性 - 機械学習で人間の知覚を再現する

VMAF (Video Multimethod Assessment Fusion) は Netflix が 2016 年に公開した画質評価指標で、機械学習を用いて複数の基本指標を統合し、人間の主観評価 (MOS) との相関を最大化するよう訓練されています。映像ストリーミングの品質制御において業界標準となっており、YouTube や Disney+ など多くのサービスが採用しています。

VMAF の構成要素:

これらの特徴量を SVM (Support Vector Machine) で統合し、0-100 のスコアを出力します。93 以上が「優秀」、80-93 が「良好」、60-80 が「許容範囲」とされています。Netflix は自社コンテンツのエンコードで VMAF 93 以上を品質基準としています。

VMAF の強みは、コンテンツの種類 (アニメ、実写、スポーツなど) に応じたモデルを使い分けられる点です。vmaf_v0.6.1 が汎用モデル、vmaf_4k_v0.6.1 が 4K コンテンツ向けモデルとして提供されています。また、電話画面での視聴を想定した vmaf_phone モデルもあります。

静止画への適用も可能で、libvmaf ライブラリを FFmpeg 経由で利用できます。コマンド例: ffmpeg -i original.png -i compressed.png -lavfi libvmaf -f null -。ただし、VMAF は本来映像向けに設計されているため、静止画では SSIM や MS-SSIM の方が適切な場合もあります。

指標の比較と使い分け - 用途別の最適な選択

3 つの指標にはそれぞれ得意・不得意があり、用途に応じた使い分けが重要です。以下に主要な比較軸を整理します。

計算速度: PSNR が最も高速で、1,920 × 1,080の画像ペアを数ミリ秒で処理できます。SSIM は PSNR の 3-5 倍程度の時間がかかりますが、それでも十分高速です。VMAF は最も計算コストが高く、SSIM の 10-50 倍の時間を要します。大量の画像を処理するバッチパイプラインでは、この速度差が無視できません。

人間の知覚との相関: 学術研究のメタ分析によると、主観評価 (MOS) との相関係数は PSNR が 0.7-0.8、SSIM が 0.85-0.92、VMAF が 0.93-0.96 程度です。VMAF が最も人間の知覚に近い評価を返しますが、静止画に限定すると SSIM との差は縮まります。

推奨する使い分け:

実務では単一の指標に頼らず、複数の指標を組み合わせて判断することが推奨されます。例えば、SSIM が高くても PSNR が極端に低い場合は、局所的に深刻な劣化が発生している可能性があります。

実装例 - Python と FFmpeg で画質評価を自動化する

画質評価を開発ワークフローに組み込む具体的な実装方法を紹介します。Python と FFmpeg を使った自動化パイプラインは、画像配信サービスや CI/CD での品質ゲートとして活用できます。

Python (scikit-image) での SSIM 計算:

from skimage.metrics import structural_similarity as ssim
from skimage.metrics import peak_signal_noise_ratio as psnr
import cv2
original = cv2.imread('original.png')
compressed = cv2.imread('compressed.png')
ssim_score = ssim(original, compressed, channel_axis=2)
psnr_score = psnr(original, compressed)

FFmpeg での VMAF 計算:

ffmpeg -i original.png -i compressed.png -lavfi "libvmaf=model=version=vmaf_v0.6.1:log_fmt=json:log_path=vmaf.json" -f null -

CI/CD パイプラインでの品質ゲート実装例として、GitHub Actions で画像変換後に SSIM を計測し、閾値を下回った場合にビルドを失敗させる構成が効果的です。具体的には、sharpimagemin で画像を変換した後、Python スクリプトで SSIM を計算し、0.95 未満の画像があればエラーを返します。

バッチ処理での最適化: 大量の画像を処理する場合、まず PSNR で高速にスクリーニングし (閾値 35 dB 以下を抽出)、該当画像のみ SSIM で詳細評価する 2 段階方式が効率的です。これにより、全画像に SSIM を適用する場合と比較して処理時間を 60-80% 削減できます。

また、dssim (SSIM の差分版) は Rust で実装されており、Python の scikit-image より 5-10 倍高速に動作します。大規模な画像パイプラインでは dssim の利用を検討してください。コマンドライン: dssim original.png compressed.png で 0 (同一) から 1+ (大きな差異) のスコアが出力されます。

関連記事

画像圧縮ベンチマーク 2024 - JPEG, WebP, AVIF 実測比較

JPEG、WebP、AVIF の圧縮性能を実測データで比較。写真、イラスト、スクリーンショットなど画像種別ごとのベンチマーク結果と最適フォーマットの選定基準を解説。

画像の差分比較手法 - ピクセル単位からセマンティック比較まで

画像の差分を検出・可視化する技術を体系的に解説。ピクセル比較、構造的類似度、知覚的差分など多角的なアプローチを紹介します。

JPEG 品質設定の最適化 - ファイルサイズと画質のベストバランスを見つける

JPEG の品質パラメータがファイルサイズと画質に与える影響を数値データで解説し、用途別の最適な設定値を提案します。

画像圧縮の仕組みを徹底解説 - JPEG ・ PNG ・ WebP の違い

JPEG、PNG、WebP の圧縮アルゴリズムの違いを技術的に解説。非可逆圧縮と可逆圧縮の原理、各フォーマットの得意分野、実務での使い分けを具体的なデータとともに紹介します。

深層学習による超解像技術 - SRCNN から Real-ESRGAN までの進化と実践

深層学習を用いた画像超解像技術の発展を体系的に解説。SRCNN から Real-ESRGAN までの主要モデルの原理、性能比較、実務での導入方法を紹介します。

ディザリング技術の種類と応用 - 限られた色数で階調を表現する手法

誤差拡散法、Bayer ディザリング、ブルーノイズなど各種ディザリング技術の原理と特性を比較し、レトロ表現から印刷まで応用例を解説します。

関連用語