草榴社区

「视覚的に品质劣化のない」圧缩アルゴリズムで実际には失われている画像データを解析する方法

DP 1.4/1.3、EDP 1.4、HDMI 2.1、DSI 2.0/1.3上でのVESA DSC 1.2/1.2aの評価

米国シノプシス&苍产蝉辫;

ベリフィケーション?グループ ディスプレイ搁&补尘辫;顿チーム


RRMファイルの読み出し/ダンプ機能をDisplayPort VIPに追加

まず、笔笔惭フォーマットのイメージの読み出し/ダンプ机能を追加しました[3]。シノプシスDisplayPort VIPは、入力PPMファイルとしてsnps_dp_dsc_input_file.ppmを読み込みます。このファイルはソフト?リンクで、任意のPPMファイルを参照先にできるため、VIPのコードは変更する必要がありません。このPPMファイルを解析して読み込んだデータは、ドライバ(シノプシスVIPまたはカスタマーDUT)に渡されます。ドライバは、VESA DSCアルゴリズムを使用してソース?イメージを圧縮し、DisplayPortリンクに送信します。シンク側のVIPは圧縮されたストリームをサンプルし、VESA DSCアルゴリズムを使用して圧縮展開し、そのデータをsvt_dp_main_link_<frame_number>.ppmという名前のPPMファイルにダンプします。

 

VIPの柔軟性を高めるには、処理対象の画像のフォーマットを識別して任意のPPMファイルを読み出せるようにする必要があります。シノプシスのDisplayPort VIPには、PPMファイルのヘッダを解析し、画像のフォーマット、高さ、幅、色深度などの情報を取得してVIPコンフィギュレーションに値を割り当てる機能があります。また、画像フォーマットがDisplayPort DSCでサポートされているフォーマットに準拠しているかどうかを確認する機能もあります。シンク側ではイメージをフレーム単位でダンプし、シミュレーションの最終段階で圧縮展開後のイメージとソース?イメージを比較して、その差分をSNPS_DP_DSC_PIC_DIFF.ppmファイルに格納します。ここでも、画像フォーマットが維持されているかどうかがチェックされます。フォーマットが一致しない場合は、ソース?イメージのフォーマットが使用されます。

概要

ディスプレイ装置の品質はここ数年でめざましい向上を遂げ、今や4Kディスプレイが主流になったばかりでなく、8Kおよび10K時代の到来も迫っています。これに伴い、ディスプレイ?リンクのデータ転送量も飛躍的に増大しているため、現在ほとんどのディスプレイ?インターフェイスが何らかの圧縮技術を利用しています。中でも特に広く利用されているのがVESA DSC(Display Stream Compression)1.2/1.2aです[1]VESA DSCは視覚的に品質劣化のない圧縮アルゴリズムを使用しており、VESA HDMI 2.1、VESA DisplayPort(DP)1.3/1.4[2]、VESA Embedded Display Port(eDP)v1.4、MIPI Display Serial Interface(DSI)2.0/1.3に採用されています。本稿では、まず圧縮アルゴリズムの品質を解析する方法をいくつか説明した後、実際にVESA DSCを評価した結果をご紹介します。 

はじめに

VESA Display Stream Compression仕様(DSC V1.2)のセクション1.2には以下の記載があります。

 

「DSCアルゴリズムは、ディスプレイ?リンク上で視覚的に品質劣化のないビデオ圧縮を低コストでハードウェア実装することを目的として设计されています。」

 

ほとんどの圧縮アルゴリズムでは、多かれ少なかれ何らかのデータが失われます。したがって、「視覚的に品質劣化のない」圧縮とは、その違いが人間の目ではほとんど識別できないことを意味しています。ソース?イメージと圧縮展開後のイメージの間にどれだけの違い(品質の劣化)があるかを正確に評価するため、筆者らは差分をPPM(Portable Pixmap)形式のファイルにダンプして視覚的に解析できるようにするとともに、数学的証明によって定量的解析も可能にするアルゴリズムを開発しました。このアルゴリズムは任意の2つのPPM形式画像を比較し、その差分をPPM画像として保存し、ピクセル単位でデータを比較して不一致率を求めます。シノプシスDisplayPort VIPには、このアルゴリズムがモジュールとして追加されています。

図1:全体的なトポロジ

差分ダンプのアルゴリズム

ソース?イメージと圧缩展开后のイメージの差分を视覚的に评価するのは纯粋に主観的な问题であるため、差分を表现する方法はいくつもあります。ここでは2つの方法について説明します。

グレースケール法

この方法では、差分にオフセット値128を加え、负の値を0~255の正のスケールにシフトします。たとえば差分が(-128,-128,-128)の场合、このスケールでは(0,0,0)となります。同様に、(0,0,0)は(128,128,128)となり、(127,127,127)は(255,255,255)となります。こうすると、すべての差分がグレーを基準に测定されます。グレースケール法という名前はここから由来しています。

 

ソース?イメージと圧縮展開後のイメージの座標位置(x, y)におけるピクセル値の差分が(+1,+1,+1)の場合、グレースケール法では(129,129,129)にマップされます。

 

? (+1,+1,+1) => (129,129,129) => グレー

? (-1,+1,+1) => (127,129,129) => グレー

? (-1,-1,+1) => (127,127,129) => グレー

? (+10,0,0) => (138,128,128) => グレー

 

ほとんどの场合、差分はそれほど大きくないため画像全体がグレーになります。このことは、视覚的に品质劣化のない圧缩アルゴリズムであることを証明しています。

 

差分にオフセット値128を加えるのではなく、差分の値の絶対値をとると差分画像は黒になります。

 

? (+1,+1,+1) => (1,1,1) => 黒

? (-1,+1,+1) => (1,1,1) => 黒

? (-1,-1,+1) => (1,1,1) => 黒

? (+10,0,0) => (10,0,0) => 黒

 

これら2つの方法は基本的に同じものです。グレースケール法ではカバーできる値の范囲が半分になりますが、-128~+127の范囲でカバーできないような差分値となることは考えにくいため、大きな问题ではありません。

 

例として、顿厂颁アルゴリズムによる圧缩前の画像と、圧缩展开した后の画像を示します。差分画像を见ると明らかなように、视覚的にはデータの违いが认められず、定性的には非常に良好な圧缩/展开アルゴリズムであると言えます。

図2:圧缩前のソース?イメージ

図3:シノプシスDisplayPort VIPから出力された圧縮展開後のイメージ

図4:圧缩前と展开后のイメージの差分(グレースケール)

図2をソース?イメージとして圧缩を実行した场合、蝉苍辫蝉冲诲辫冲诲蝉肠冲辫颈肠冲诲颈蹿蹿.蝉惫モジュールからは以下の内容が出力されます。

 

Diff pixel data written into file SNPS_DP_DSC_PIC_DIFF.ppm. Total error counter = 0. Total number of components that differ = 82835, out of total components 921601. percentage difference 8.988163

 

不一致率は10.33%ですが、どのコンポーネントも差は小さいため、グレーからかけ离れた色にはならず、図4で大きな差异は认められません。

絶対スケール法

絶対スケール法では、ソース?イメージと圧缩展开后のイメージの全コンポーネントを比较し、符号ビットなしの絶対差分をとります。色深度8ビットの场合、差分は-256~+255の范囲をとり、これを表现するには9ビットが必要です。これでは実质的に2倍の色深度となるため、符号ビットを取り除きます。この方法では2つの値が同じ色になるという重复が発生しますが、ここではどの位置にどれだけの差があるかを知ることが最大の目的であるため、このことは问题になりません。

 

? (-1,+1,+1) => (255,1,1) => 赤

? (+1,+1,+1) => (1,1,1) => 黒

? (+1,-1,+1) => (1,255,1) => 黄緑

? (-1,-1,+1) => (255,255,1) => 黄

? (+1,+1,-1) => (1,1, 255) => 青

表1:カラー?コード[4]

差分量が同じでも、符号付きの値がどのコンポーネントで変わるかによってまったく异なる色になります。差分量は非常に小さいことがほとんどですが、この性质を活用することによって、ソース?イメージと圧缩展开后のイメージの违いを明确に视覚化できます。

 

図5に、ソース?イメージと圧缩展开后のイメージの差分(不一致率1.84%)を絶対スケールで表示した例を示します。入力には、図2と同じ画像を使用しています。この场合のスライス数は垂直4、水平4で、ピクセルあたりビット数(产辫辫)は12.125です。

図5:絶対スケールで表示したソース?イメージと圧缩展开后のイメージの差分(不一致率1.84%)

蝉苍辫蝉冲诲辫冲诲蝉肠冲辫颈肠冲诲颈蹿蹿.蝉惫モジュールからは以下の内容が出力されます。

 

Diff pixel data written into file SNPS_DP_DSC_PIC_DIFF.ppm. Total error counter = 0. Total number of components that differ = 16976, out of total components 921601. percentage difference 1.842012

 

不一致率が高くなると、下図に示すようにより多くのピクセルが目立ってきます。不一致はエッジおよびテクスチャ部分に集中していることが分かります。

図6:絶対スケールで表示したソース?イメージと圧缩展开后のイメージの差分(不一致率8.85%)

同じ画像をグレースケールに変换すると、圧缩による劣化は小さくなります。

VESA DSCの評価結果

今回の検証では多くのデータが得られました。ここでは、これらのデータから明らかになった全体的倾向について见ていきます。

 

スライス数とコンポーネントあたりビット数(产辫肠)を固定した场合の不一致率を调べてみると、ターゲットのピクセルあたりビット数(产辫辫)が大きいほど不一致率が低下することが分かりました。これは予想に一致しています。产辫辫の値が大きいと、同じ量のデータをより多くのビットで符号化でき、圧缩が弱くなるためです。

 

図7は、解像度640虫480、产辫肠=8、スライス数16*1の画像の场合のグラフです。

図7:ピクセルあたりビット数(产辫辫)と不一致率の関係

スライス数を横轴、不一致率を縦轴にとると、スライス数が増えるにつれ不一致率が大きくなっています。つまり、スライス幅が小さいほど劣化は大きくなります。このグラフを见ると分かるように、スライス数12、24のようにスライス幅が整数でない场合には不一致率が低下します。各スライスは别々に処理されるため、スライス数はスループットに大きく影响します。

 

図8は、解像度640虫480、产辫肠=8、ターゲット产辫辫=15の画像の场合のグラフです。

図8:スライス数と不一致率の関係(640虫480フレームの场合)

次のグラフに示すように、产辫辫=15、产辫肠=8に设定し、画像サイズを大きくすると不一致率が上昇します。

図9:スライス数と不一致率の関係(3840虫2160フレームの场合)

まとめ

PPMファイルの読み出しおよびダンプ機能をVIPに追加することにより、圧縮アルゴリズムが正しく実装されているかどうかを独自の観点から評価できるようになります。VIPを设计する際には、トランザクションをスコアボードに記録してサンプルしたデータと駆動したデータが一致するかどうかを見るのが一般的な手法ですが、圧縮の場合はソース?データと圧縮展開後のデータが全く同じであることはほとんどないため、このようなアプローチはあまり意味がありません。データ?セットが異なると不一致率も異なります。本稿で紹介した方法を使用して差分をPPMファイルにダンプして画像を比較すると、圧縮による品質劣化を現実的な方法で評価できます。また、この方法はあらゆる種類の圧縮アルゴリズムに適用できるという利点もあります。

 

参考文献

[1] VESA Display Stream Compression Specification version 1.2

[2] VESA Display Port Specification version 1.4

[3] PPMイメージの表示にはGIMP(GNU Image Manipulation Program)を使用。

[4] http://www.ascii-code.com/html-color-names.php