ねほり.com

何もないから何かみつかる

映像メディア品質評価(客観評価法)VIFP、SSIM、RECO、PSNR、NIQEの比較

      2020/08/09

解像度低下・ぼけ、ブロックひずみ、偽輪郭、ジャーキネス、フリッカ、動きぼけ、途切れ/フリーズ、モスキート雑音、エッジビジネス、乱れ(破綻)などの映像劣化が発生し、その原因が何であるかを把握することは、目的とする映像品質評価や品質改善を行うために必要です。

そのための映像評価手法に大きく二つの手法が存在します。

  • 主観評価法(DSCQS法、DSIS法、ACR法、ACR-HR法など)
  • 客観評価法(SNR、PSNR、SSIMなど)

主観評価とは、あらかじめ決められた手順にのっとって、映像に対するユーザ体験品質を、視覚心理実験によって定量化することです。

また、客観評価法とは、映像メディアに対する主観品質を映像の物理量を用いて推定する方法です。

ここでは各手法の特性および計算式は掲載しません。
 

MSE = \frac{1}{N}\sum_{i} (x[i]-y[i])^2

N:画素数、x[i],y[i]:原画像および復号画像のi番目の画素位置における輝度値
 

なんて難しそうに書いても、単なる差分二乗平均だしね。

 

客観評価を行うサンプルコードを見つけたので、実画像に適用する方法を書き記しておきます。

なお、評価指標をまとめました(が、一部未記入です)。

MetricsMeaning of video quality metricsUsing ref / none ref日本語説明
VIFVisual Information FidelityReference視覚情報忠実度Netflix VMAF (Video Multimethod Assessment Fusion)で採用されている
MSEMean Square ErrorReference平均二乗誤差画素の輝度値の差分を表す
SSIMStructural Similarity MetricReference構造的類似性指数人間が感じる違いをより性格に指標化(歪みを表す指標)
PSNRPeak Signal to Noise RatioReferenceピーク信号対雑音比画質の信号が取りうる最大のパワーと劣化をもたらすノイズの比率を表す
RECORelative Polar Edge CoherenceReference
MS-SSIMMultiScale Structural Similarity MetricReference
3SSIM3-Component Structural Similarity MetricReference
VQUAD-HD
VQMVideo Quality MetricsReference
PVVQMReference
UIQUniversal Image Quality
MSSIMMotion SSIM
NIQENatural Image Quality EvaluatorNone-ReferenceNSSベースの特徴の間の距離を測定
BRISQUEBind/Referenceless Image Spatial Quality EvaluatorNone-Reference

 

Full Reference (FR:参照画像指標)を動かしてみる

​テスト​対象​ストリーム​と​参照​用​ストリーム​の​画素​と​画素​を​比較​する​完全​対照​テストです。

​テスト​対象​デバイス​と​ゴールデン​デバイス​の​ストリーム​を​個別に​計測​する​の​では​なく、​2​本​の​ストリーム​を​同時に​解析​し​て​両者​の​画素​と​画素​を​比較​し​ます

かつてはPSNR(Peak Signal to Noise Ratio)が画像圧縮など非可逆圧縮を使ったコーデックの再現性の品質の尺度と使用されることが多かった。

最近は、例えばNetflixはVMAF(Video Multi-Method Assessment Fusion)でVIF(Visual Information Fidelity)などを用いています。

エンコードの変化によって画質が劣化していないかどうか判断するための測定基準としては、人間が実際に観て判断する方法もあるが、全ての映像を確認するのは難しい。そこで、機械学習を用いて自動化する取り組みも進行している。

オープンソースのVMAF(Video Multimethod Assessment Fusion)という測定も活用している。このような検証を重ね、従来だと750kbpsの画質が、270kbpsで実現。データ量4GBで26時間の映像を観られるという。

パス設定を行う

これは一般的な pythonでのimportの説明です。

jpg_demo.py

scikit-imageをインストールする

次のようなエラーが出力されました。

「skimage」の代わりに「scikit-image」を使う必要があるようです。

インストール方法は次のとおりです。

imageio.imreadを利用する

またエラーが出ました。

バージョン1.2.0以降では「imread」は削除されたようです。

代わりに「imageio.imread」を使う必要があります。

ネットで調べると、ソースコードを書き換えるのは手間なので1.2.0以前の「scipy」を入れている人が多かったです。

インストール方法は次のとおりです。

実行すると、大量のエラーが出ました・・・。

駄目だこりゃ・・・・。

Scipy.misc.imreadで使われていた、mode, flatten,はそれぞれ、pilmode, as_grayに変更されています。

次のように書き換えました。

gm convertをインストール

次に出力されたエラーは次のとおりです。

「GraphicsMagick」のインストールが必要です。

「GraphicsMagick-1.3.1.tar.gz」をTar.gzで make したらエラーが出たので、Windows版を持ってきました。

このため、絶対パスで書くと次のように書き換える必要があります。

結果

結果は次のようになります。

数値が小さい場合は劣化したと判断しています。

サンプルでは「LENA画像」の画質を落としつつ、VIFP、SSIM、RECO、PSNRの手法を試していました。

VIFP、SSIMは、画質が落ちきるまでは値が下がりにくい傾向があります。

No Reference (NR:非参照画像指標)を動かしてみる

対象​の​ビデオ​ストリーム​が​未知​だ​っ​たり​予測​でき​なか​っ​たり​する​場合​に​使う​非​対照​テスト​です。

有名なものに、NIQE(Naturalness Image Quality Evaluator)があります。

NIQEとは、モデルを学習させるために使用されるイメージデータベースから取得された特徴と測定したいイメージから計算されたNSS(Natural Scene Statistic)ベースの特徴の間の距離を測定する手法です。

この​手法​の​メリット​は、​コンテンツに関わらず、​どの​よう​な​ストリーム​に​も​計測​を​適用​できる​こと​です。

​一方で、​計測​結果​が​解析​対象​の​コンテンツ​によって​大​きく​ばらつく​可能性​が​あります。

Use a.any() or a.all()

サンプルコードはNIQEがコメントアウトされていました。

コメントを外して実行すると次のようなエラーが出ました。

これは次のように修正します。

結果

結果は次のようになります。

NIQEでは、劣化するほど値が大きくなるようです。

動画を静止画に切り分ける

実データを利用するためには、動画を静止画に分ける必要があります。

あるx秒からy秒までの画像を切り出す方法は次の通りです。

opencvをインストールする

Web から「opencv_python-4.4.0-cp38-cp38-win_amd64.whl」をダウンロードします。

インストールコマンドは次のようになります。

ソースコード

python save_frame_range_sec.py

まとめ

「伝送劣化」や「符号化劣化」に対する映像メディアの品質指標を測定するには十分有効のように感じました。

  • ​(a)​オリジナル画像
  • ​(b)​​平均​コントラスト​を​改善
  • ​(c)​明​る​さ​を​調整
  • ​(d)​ガウスノイズ​を​付加
  • ​(e)​インパルス​ノイズ​を​付加
  • ​(f)​​JPEG​で​圧縮
  • ​(g)​ブラー
  • ​(h)​​空間​スケーリング​(ズーム​アウト)
  • ​(i)​空間​シフト​(右​へ​移動)
  • ​(j)​空間​シフト​(左​へ​移動)
  • ​(k)​回転​(反​時計​周り)
  • ​(l)​​回転​(時計​回り)

ですが、・・・・本当は、こんな事が知りたかったんじゃないんだけどな~。

最近は「The Unreasonable Effectiveness of Deep Features as a Perceptual Metric」などもあります。

 - 2020年(社会人16年), 機械学習, テクノロジー

  関連記事

KaggleのHome Credit Default Risk体験(Keras、Pytorch編)

Kaggleの過去Featured問題「Home Credit Default …

推薦論文の査読結果&キッズGooでWebサイトが表示されるために

推薦論文 「推薦論文」の査読結果が返ってきた・・・・   & …

Protraを使ったバックテスト環境の構築

Pythonや人工知能の学習を兼ねてというのは目的ではないことを再認識しました。 …

機械学習による株価予測(3点チャージ法を改良する→失敗)

羽田空港は全空港職員がマスクをし、利用客も7割がマスクをしています。 一方で、ア …

人工知能で「くずし字」の文字認識の現状調査

日本人の多くは、日本人が150年前の文書が読めません。 家系図調査は「除籍謄本」 …

facebookの自動更新方法をアップデートする

GWで唯一休みだった土日(残りは休日出勤)・・・を利用して、facebookへ日 …

メダカを求めて千葉市内の二級河川と魚種の再確認

こんな雰囲気の良い所で竿を降ろせばオイカワ、フナ、タナゴが幾らでも釣れるだろう。 …

ストリーミング動画 のファイルをダウンロードする方法

検索で偶然引っ掛かった誰かも知らない人の日記・・・    メ …

Java Appletで麻雀ゲームを実装することに挑戦するも・・

やばいぞ~!!    最近本当に何もしていない~!&nbsp …

Kaggle の Titanic Prediction Competition でクラス分類(scikit-learn編)

統計学や人工知能(AI)を駆使してデータを分析し、課題の発見や解決に導く「データ …