AVIF形式で画像を圧縮してみる
はじめに
こんにちは。PHR事業開発部の山中です。
医療画像を大量に保管するPACSでは容量削減のために画像の圧縮を行い、効率よく画像を保管する必要があります。そのため、画像圧縮技術はとても重要で入社1年目の頃に比較的新しい画像圧縮技術のAVIFについて調査していたのですが、あれから2年ほど経過したので改めて調査しました。
AVIFとは
AVIFは動画コーデックのAV1を静止画用に転用した画像ファイル形式です。AV1コーデックはGoogle, Amazon, MicroSoft等の大手IT企業が参加している非営利団体Alliance for Open Media(AOMedia)がロイヤリティーフリーの動画コーデックとして開発/公開しており、WebP(VP8)の2世代後継に当たるVP10などの技術が使用されているそうです。AV1が生まれた背景にあるのは動画コーデックのHEVC(H.265)の存在です。HEVC(H.265)はiOS11以降で標準となっているHEICなどで使用されていますが、HEVC(H.265)の技術はライセンスが複雑でロイヤリティーフリーではありません。そのため、その対抗としてロイヤリティーフリーのAV1/AVIFが開発されました。
ブラウザ対応状況
AVIFはGoogle Chrome, Firefox, Operaで対応済みでEdge, Safariは未対応となっています。
AVIF圧縮画像の生成
AVIF圧縮画像の生成は以下ライブラリ(ver 0.10.1)を使用しました。
本記事では、エンコーダはaomを使用しパラメータはデフォルトの設定値で圧縮処理を行いました。
aomのほかにもaomよりも軽量なデコーダのdav1d, Google製デコーダのlibgav1, Rustのエンコーダのrav1eが使用できます。
YUVはY(輝度)U(輝度と青色の差)V(輝度と赤色の差)の組み合わせで表現される色空間のことで、YUV444はデータの劣化がない形式、YUV422は色の差のデータ量を1/2まで減らした形式、YUV420は色の差のデータを1/4まで減らした形式です。
まとめ
実際にAVIF形式のファイルを生成して比較してみると、非可逆圧縮の場合は目視での画質の劣化はほぼ感じられないにもかかわらず画像容量が約1/13まで落ちており、同じ容量のjpegと比較しても明らかに画質が良さそうです。逆に可逆圧縮の場合はWebPやjpeg2000の方が画像容量が少ない結果となりました。ただし、パラメータの調整をすれば、これ以上のパフォーマンスを発揮するかもしれません。
また、aomでのエンコードとデコードの時間(圧縮速度のパラメータはデフォルトの6)については、本記事で使用したオリジナル画像(370KB)だと一瞬でした。別の65MBのPNG画像を圧縮してみると、エンコードが約50秒、デコードが約30秒ほどかかりました。
参考画像のキャラクターはNOBORI PHRアプリのイメージキャラクターです。以下リンク(NOBORI PHRアプリ公式HP)にのぼり始さんが出演している動画もありますので、もしよろしければご覧ください。