ソフトウェア

画像を拡大・縮小するアルゴリズム「バイリニア補間」は一体何をしているのか?


画像の拡大・縮小を行う時、そのままシンプルに処理を行うと画質が荒くなってしまいます。そこで、画像を滑らかにして比較的キレイな画質を保ったまま拡大・縮小を行うためにはアルゴリズムが必要となります。そんなアルゴリズムの1つである「バイリニア補間」はいったいどういうものなのかについて、NVIDIA Researchでグラフィックス関連のソフトウェアエンジニアとして働くバート・ロンスキー氏が解説しています。

Bilinear texture filtering – artifacts, alternatives, and frequency domain analysis | Bart Wronski
https://bartwronski.com/2020/04/14/bilinear-texture-filtering-artifacts-alternatives-and-frequency-domain-analysis/

ロンスキー氏はまず、「多くの人はピクセルが画面上に並んだ小さな四角形であるというイメージを抱いていますが、これは表面上の見た目に過ぎません。ピクセルとは本質的に空間的な1点におけるサンプル値であり、広がりや面積を持つものではないということです」と述べています。画像を構成するピクセルとは、色や明るさといった情報を数値化したものだという意味です。

「画像の単純な拡大」は「連続した点の間隔を拡大すること」になるので、その広がりを補間する必要があります。この補間をどのように行うかで、拡大した画像の画質が決まります。


バイリニア補間(Bilinear interpolation)の仕組みはシンプルで、ある任意の点の色データを求める時に、その点の周囲にある4つのピクセルの色から線形補間という方法で適切なデータを推測します。

例えば、ある画像の中で座標(1.3、2.6)の点の色を求める場合、この点の周囲にある4点(1、2)(1、3)(2、2)(2、3)という4つのピクセルの色をチェックします。そして、まず(1、2)と(2、2)、(1、3)と(2、3)で横方向に線形補間を行い、続いてY座標=2と3で縦方向に線形補間を行い、(1.3、2.6)のデータを定めます。2回(bi)の線形(linear)補間を行うので、バイリニア補間と呼ぶわけです。


バイリニア補間は計算がシンプルで、GPUでは1命令で実行可能なハードウェアサポートがあり、かなり安価なコストで実行できるため、リアルタイムでの処理に適しているとロンスキー氏は説明しています。また、バイリニア補間は、隣接する4ピクセルの値を滑らかに補間するため、ジャギーやブロック状の画質劣化が少なく、自然で滑らかな画像になります。

しかし、バイリニア補間は処理が高速で手軽に使える反面、いくつかの重要な欠点を抱えているとロンスキー氏は指摘しています。

まず、画像を拡大したときに見られるギザギザや星形の模様など、視覚的に不自然なアーティファクトが生じやすく、特に低解像度のテクスチャや高コントラストな画像で顕著になります。これは、補間の計算が縦横方向に三角形状の重みを掛け合わせる構造になっており、画像上にピラミッド状の模様が現れることに起因しています。


また、人間の視覚が微妙なコントラストの変化に敏感であるため、補間結果に「マッハバンド」と呼ばれる錯覚的な明暗の段差が発生し、滑らかなはずのグラデーションが段付きに見えることがあります。


さらに、補間の効果が座標の小数点以下の値に強く依存しており、画像全体でシャープさやぼけ具合が場所によって異なるという、不均一な処理結果が生じてしまうとのこと。このような変動は、アニメーションや動的なズーム操作の中で「ちらつき」や「不安定さ」として知覚されやすくなります。

信号処理の観点から見ると、バイリニア補間は位置によって信号の分散、つまりコントラストを変化させてしまい、結果として画像が局所的にぼやける現象も引き起こします。加えて、高周波成分を大きく削ぎ落としてしまう性質から細かなディテールが失われやすく、画像の鮮明さが損なわれてしまうとのこと。


さらに、GPUではピクセルの中心が0.5ずれているという仕様があるため、それに対応しないバイリニア補間を使うと、画像が上下や左右に半ピクセルずれて表示されるといった位置ずれの問題も発生するとロンスキー氏は述べています。こうした問題は、見た目の品質に直接関わるため、適切に対処しなければ意図しない視覚的劣化やバグの原因となる可能性があります。

バイリニア補間には複数の定義や実装の「流儀」が存在するため、どれが正しいかではなく、使用するフレームワークや処理系において座標系やピクセルグリッドの扱いを統一することが最も重要であるとロンスキー氏は強調し、同じ「バイリニア補間」という言葉であっても中身が異なる場合があるため、ライブラリやコードを鵜呑みにせず、自分で処理を再実装して座標の整合性を保つことを推奨しました。

ロンスキー氏は、より品質を求める場合はバイキュービック補間ランチョスフィルタなどへの切り替えや補間後のシャープ処理が有効だとした上で、「バイリニア補間は手軽で強力ですが、正しく使わなければ画質や挙動に深刻な問題をもたらします。だからこそ、その動作原理と座標系の扱いをよく理解し、処理全体で一貫性を保つことが不可欠です」と語りました。

この記事のタイトルとURLをコピーする

・関連記事
無料で簡単にAIで低画質な画像を高画質に4倍アップコンバートできる「Upscayl」を使ってみた - GIGAZINE

動画をデジタルで扱うための基本知識まとめ、映像や音声はどうやってPCで処理されているのか? - GIGAZINE

フルHD化が難しい「スター・トレック」を自作のAIでフルHD&4Kにアップコンバートした猛者が登場 - GIGAZINE

JPEG画像を簡単に無劣化で切り抜き・回転できるフリーソフト「JPEGcrop」 - GIGAZINE

GPUの性能をフル活用したエフェクトが美しいフリーの画像ビューア「SuperSlide」 - GIGAZINE

JavaScriptのみでサイコロ回転風のアニメーションエフェクト - GIGAZINE

in ソフトウェア, Posted by log1i_yk

You can read the machine translated English article What does the 'bilinear interpolation' a….