デジタル信号処理において、空間アンチエイリアシングとは、高解像度画像を低解像度で表現する際に発生する歪み(エイリアシング)を最小限に抑えるための技術です。アンチエイリアシングは、デジタル写真、コンピュータグラフィックス、デジタルオーディオなど、多くの分野で利用されています。
アンチエイリアシングとは、記録(またはサンプリング)装置で適切に解像できる周波数よりも高い周波数の信号成分を除去することです。この除去は、より低い解像度で(再)サンプリングを行う前に行われます。この信号成分を除去せずにサンプリングを行うと、白黒ノイズなどの望ましくないアーティファクトが発生します。
信号取得やオーディオにおいては、アナログ・アンチエイリアシングフィルタを用いて入力信号の帯域外成分を除去し、アナログ・デジタル変換器でサンプリングを行うのが一般的です。デジタル写真においては、複屈折材料で作られた光学アンチエイリアシングフィルタが、空間光学領域で信号を平滑化します。アンチエイリアシングフィルタは、デジタルセンサで達成可能な解像度以下に解像度を下げるために、画像をわずかにぼかす役割を果たします(画素ピッチが大きいほど、センサレベルで達成可能な解像度は低くなります)。
コンピュータグラフィックスにおいて、アンチエイリアシングは、ポリゴンのギザギザしたエッジ(いわゆる「ジャギー」)の見た目を改善し、画面上で滑らかに見せる技術です。しかし、グラフィックカードのパフォーマンスが低下し、ビデオメモリの使用量も増加します。アンチエイリアシングのレベルによって、ポリゴンのエッジの滑らかさ(および消費するビデオメモリの量)が決まります。




チェッカーボードパターンが後退している画像の上部付近では、画像が認識しにくく、美的に好ましいとは考えられないことが多い。対照的に、アンチエイリアス処理を行うと、上部付近のチェッカーボードは灰色に溶け込み、解像度が不十分で詳細が表示されない場合には、これが通常望ましい効果となる。画像の下部付近でも、アンチエイリアス処理された画像ではエッジがはるかに滑らかに見える。複数の方法が存在するが、その中でもsincフィルタはより優れたアンチエイリアスアルゴリズムと考えられている。[ 1 ]拡大すると、アンチエイリアス処理が境界のピクセルの明るさを補間して灰色のピクセルを生成する様子がわかる。これは、空間が黒と白のタイルで占められているためである。これらがsincフィルタでアンチエイリアス処理された画像を元の画像よりもはるかに滑らかに見せるのに役立つ。

単純なひし形の画像では、アンチエイリアシングによって境界のピクセルがブレンドされます。これにより、エイリアシング処理された画像に現れる、鋭く段差のある境界による視覚的に不快な効果が軽減されます。
アンチエイリアシングは、コンピュータ画面にテキストをレンダリングする際によく適用され、従来の紙とインクで印刷したテキストの外観をより忠実に再現する滑らかな輪郭を表現します。特に一般的な液晶画面に表示されるフォントでは、 ClearTypeなどのサブピクセルレンダリング技術がよく用いられます。サブピクセルレンダリングでは、深刻な色歪みをほとんど目立たない色のにじみに変えるために、色バランスの取れた特殊なアンチエイリアシングフィルタが必要です。OLPC XO -1ノートパソコンのディスプレイコントローラのように、個々のサブピクセルをフルピクセルのようにアドレス指定し、ハードウェアベースのアンチエイリアシングフィルタを提供することで、同等の結果を得ることができます。アンチエイリアシングとサブピクセルのアドレス指定がソフトウェアで行われるかハードウェアで行われるかにかかわらず、ピクセルのジオメトリはこれらすべてに影響を与えます。
ピクセルのアンチエイリアシングを行う最も基本的な方法は、ベクターグラフィック内の特定の領域(この場合はピクセルサイズの正方形で、複数のピクセルにまたがっている場合もある)がピクセルの何パーセントを占めているかを判断し、その割合を色として使用することです。
この方法を用いて、黒地に白のアンチエイリアス処理を施した単一の点の基本的なプロットを作成するPythonプログラムは以下のとおりです。
def plot_antialiased_point ( x : float , y : float ): """黒地に白のアンチエイリアス処理された単一の点をプロットします。""" for rounded_x in floor ( x ) to ceil ( x ): for rounded_y in floor ( y ) to ceil ( y ): percent_x = 1 - abs ( x - rounded_x ) percent_y = 1 - abs ( y - rounded_y ) percent = percent_x * percent_y draw_pixel ( coordinates = ( rounded_x , rounded_y ), color = percent ( range 0 - 1 ))この方法は、一般的に、基本的な直線や曲線などの単純な図形、および3Dグラフィックスのように絶対座標をピクセル単位の座標に変換する必要があるアプリケーションに最適です。処理速度は比較的速いものの、画質は比較的低く、形状が複雑になるにつれて処理速度が低下します。非常に高品質なグラフィックスや非常に複雑なベクター形状を必要とする用途には、この方法は最適とは言えないでしょう。
注:plot_antialiased_point上記のルーチンでは、計算されたパーセント値に色値を無条件に設定することはできません。新しい値をその場所の既存の値に最大1まで加算する必要があります。そうしないと、各ピクセルの明るさがその場所で計算された最も暗い値と同じになり、非常に悪い結果になります。たとえば、あるポイントが特定のピクセルの明るさレベルを0.90に設定し、後で計算された別のポイントがそのピクセルにわずかに接触し、明るさが0.05である場合、そのピクセルに設定される最終値は0.05ではなく0.95になります。
より複雑な形状の場合、アルゴリズムは、ターゲット表示面よりも高解像度のピクセルグリッド(通常は歪みを軽減するために2のべき乗の倍数)に形状をレンダリングし、その後、双三次補間を使用して表示面上の各実ピクセルの平均強度を決定するというように一般化できます。
このアプローチでは、理想的な画像は信号とみなされます。画面に表示される画像は、各(x、y)ピクセル位置における、フィルタリングされた信号のサンプルとして取得されます。理想的には、人間の脳が元の信号をどのように処理するかを理解し、脳がそれに最も近い反応を示すような画面上の画像を提供することです。
このような問題に対する最も広く受け入れられている解析ツールはフーリエ変換です。フーリエ変換は信号を周波数成分と呼ばれる異なる周波数の基底関数に分解し、信号中の各周波数成分の振幅を与えます。波形は次の形式です。
ここで、jとkは任意の非負整数です。また、1 次元または両方の次元で正弦関数を含む周波数成分もありますが、この議論の目的には余弦関数で十分です。
jとkという2つの数値は、その成分の周波数を表します。jはx方向の周波数、kはy方向の周波数です。
アンチエイリアシングフィルタの目的は、ナイキスト周波数と呼ばれる一定の限界を超える周波数を大幅に低減し、サンプリング定理に従って、信号がサンプルによって正確に、あるいはほぼ正確に表現されるようにすることです。詳細なアルゴリズムにはさまざまな選択肢があり、フィルタの伝達関数も異なります。一般的に、人間の視覚認知に関する現在の知識では、どの手法が最も見栄えが良いかを断言するには不十分です。

前述の議論では、矩形メッシュサンプリングが問題の主要部分であると仮定しています。通常最適とされるフィルタは、最初の図に示すように回転対称ではありません。これは、データが連続画像ではなく正方格子でサンプリングされているためです。このサンプリングパターンは、従来1次元データで行われてきたように、各軸に沿って信号処理を行う根拠となります。ランチョス再サンプリングは、データとsinc関数の離散表現との畳み込みに基づいています。
解像度がソース画像またはターゲット画像の矩形サンプリングレートによって制限されない場合、データが連続的な x と y の 2 次元関数であるかのように、回転対称フィルタまたは補間関数を使用することが理想的です。半径の sinc 関数は、フィルタとして適さないほど長い裾を持っています (二乗積分もできません)。1 次元の sinc 関数に代わるより適切なものは、2 次元のエアリーディスク振幅、つまり正方形領域ではなく、2 次元周波数空間における円形領域の 2 次元フーリエ変換です。

図に示すように、ガウス関数に十分な量の2階微分を加えて、周波数領域では頂点を平坦化したり、空間領域では頂点を鋭くしたりすることを考えることができます。ガウス関数に基づく関数は自然な選択です。なぜなら、ガウス関数との畳み込みは、xとyに適用しても半径に適用しても、別のガウス関数になるからです。ウェーブレットと同様に、その特性の1つは、構成(xとy)とスペクトル(jとk)表現の中間にあることです。補間関数として、ガウス関数だけでは、可能な限りの詳細を保持するには広がりすぎているように見えるため、2階微分が追加されます。
例えば、処理能力の高いプリンターで六角形のパターンを持つ写真ネガを印刷する場合、sinc関数による補間を使用する理由はありません。このような補間では、斜線が水平線や垂直線とは異なる扱いを受けるため、弱いエイリアシングのような現象が発生します。
リアルタイムレンダリングエンジン(ソフトウェアアクセラレーションまたはハードウェアアクセラレーション)の最下層で使用されるプリミティブはごく少数です。これには「点」、「線」、「三角形」などが含まれます。このようなプリミティブを黒の背景に白で描画する場合、エッジをぼかすように設計することで、ある種のアンチエイリアシング効果を得ることができます。しかし、このアプローチでは、隣接するプリミティブ(例えば、辺を共有する三角形など)の処理が困難です。
均一平均化アルゴリズムを近似するには、サブピクセルデータ用の追加バッファを使用することができます。最初の(そしてメモリ消費が最も少ない)アプローチでは、4×4グリッドでピクセルあたり16ビットの追加データを使用しました。プリミティブを前面から背面など、慎重な順序でレンダリングすれば、妥当な画像を作成できます。
プリミティブが何らかの順序で配置されている必要があるため、OpenGLなどのアプリケーションプログラミングインターフェースとの連携がうまくいかないことから、最新の手法では、各ピクセルに2つ以上の完全なサブピクセルを用意し、各サブピクセルに完全な色情報を持たせています。サブピクセル間で情報の一部(Zバッファなど)が共有される場合もあります。
テクスチャマッピングに特化した手法として、ミップマッピングと呼ばれるものがあります。これは、テクスチャマップの低解像度版を事前にフィルタリングすることで機能します。画像をレンダリングする際には、適切な解像度のミップマップが選択されるため、テクスチャピクセル(テクセル)は画面に表示される時点で既にフィルタリングされた状態になります。ミップマッピングは、最終的な結果を向上させるために、一般的に様々なテクスチャフィルタリングと組み合わせて使用されます。
フラクタルは無限のディテールを持ち、算術的な丸め誤差以外のノイズがないため、写真や他の測定データよりもエイリアシングをより明確に示します。ピクセルの正確な中心で色に変換されるエスケープ時間は、セットの境界で無限大になるため、境界付近の中心からの色はエイリアシングのために予測不可能になります。この例では、ピクセルの約半分にエッジがあるため、エイリアシングがかなり表示されます。最初の画像は元のサンプリングレートでアップロードされています。(ほとんどの最新のソフトウェアはアンチエイリアシングを行うため、すべてのエイリアシングを確認するにはフルサイズ版をダウンロードする必要があるかもしれません。)2番目の画像は、サンプリングレートの5倍で計算され、アンチエイリアシングでダウンサンプリングされています。各ピクセルの平均色のようなものが本当に欲しいと仮定すると、これはそれに近いものになっています。明らかに最初の画像よりも整然としています。
これらの画像を適切に比較するためには、原寸大で表示する必要がある。
偶然にも、このケースでは利用できる追加情報があります。「距離推定器」アルゴリズムで再計算したところ、セットの端に非常に近い点が特定されました。そのため、セットの端付近では脱出時間が急速に変化するため、異常に細かいディテールがエイリアシングされています。これらの計算された点から得られた色は、ピクセルを著しく代表していないことが確認されました。セットはそこでより急速に変化するため、単一の点サンプルではピクセル全体を代表しにくくなります。3番目の画像では、これらの点を周囲の点を補間することで置き換えました。これにより画像のノイズは減少しますが、色が明るくなるという副作用があります。したがって、この画像は、さらに多くの計算された点のセットで得られる画像と完全に同じではありません。破棄された点を示すために、4番目の画像では、灰色の背景にブレンドされた破棄された点が表示されています。
最後に、「芽生えたタービン」は非常に規則的なため、最も近いピクセルを選択して縮小すると、メインの「タービン軸」付近に系統的な(モアレ)エイリアシングがはっきりと確認できます。最初の画像のエイリアシングは、ピクセルサイズ以下のすべての詳細レベルから発生するため、ランダムに見えます。下位レベルのエイリアシングを抑制して3番目の画像を作成し、それをアンチエイリアシングなしでさらにダウンサンプリングして5番目の画像を作成すると、3番目の画像のスケール上の順序が5番目の画像に系統的なエイリアシングとして現れます。
画像の純粋なダウンサンプリングは、以下の効果をもたらします(フルスケールでの表示を推奨します)。
スーパーサンプリングアンチエイリアシング (SSAA) [ 2 ]は、フルシーンアンチエイリアシング (FSAA) [ 3 ]とも呼ばれ、フルスクリーン画像でのエイリアシング (または「ジャギー」)を回避するために使用されます。 [ 4 ] SSAA は、初期のビデオ カードで利用可能だった最初のタイプのアンチエイリアシングでした。しかし、その膨大な計算コストと GPU でのマルチサンプルアンチエイリアシング(MSAA) サポートの出現により、リアルタイム アプリケーションではもはや広く使用されていません。MSAA は、グラフィック品質はやや劣りますが、計算能力を大幅に節約できます。
SSAA を適用した画像は、よりソフトな印象になり、よりリアルに見えるはずです。しかし、写真のような画像には有効ですが、単純なアンチエイリアシング手法 (スーパーサンプリングと平均化など) では、線画や図表の種類によっては、特にほとんどの線が水平または垂直である場合、見た目が悪化する可能性があります (画像がぼやけて見える)。このような場合は、事前にグリッドフィッティングの手順を実行すると便利です (ヒントを参照)。
一般的に、スーパーサンプリングとは、最終的なデータ解像度よりも高い解像度(通常は2のべき乗)でデータポイントを収集する手法です。これらのデータポイントは、多くの場合、単純な平均化によって目的の解像度に結合(ダウンサンプリング)されます。結合されたデータポイントは、エイリアシングアーティファクト(またはモアレパターン)が目立たなくなります。
フルシーンアンチエイリアシング(FSAA)は、通常、各フレームをディスプレイ解像度の2倍(2x)または4倍(4x)でレンダリングし、その後ディスプレイ解像度に合わせてダウンサンプリングすることを意味します。したがって、2x FSAAでは、各フレームの1ピクセルごとに4つのスーパーサンプリングされたピクセルがレンダリングされます。より高い解像度でレンダリングすると、より良い結果が得られますが、より多くのプロセッサパワーが必要となり、パフォーマンスとフレームレートが低下する可能性があります。FSAAは、グラフィックアプリケーションが画像がスーパーサンプリングされてからダウンサンプリングされて表示されることを認識しないように、ハードウェアで実装される場合もあります。
グラフィックスレンダリングシステムは、多角形プリミティブで構成されたオブジェクトに基づいて画像を生成します。画像のエイリアシング効果は、オブジェクトのシルエットエッジを表す領域にのみアンチエイリアシング方式を適用することで軽減できます。シルエットエッジは、不透明度が異なるアンチエイリアシングプリミティブを作成することでアンチエイリアシングされます。これらのアンチエイリアシングプリミティブはシルエットエッジに結合され、オブジェクトが背景に溶け込んでいるように見える画像領域が作成されます。この方法は、累積バッファに基づく従来の方法に比べていくつかの重要な利点があります。なぜなら、わずか2回のパスでシーン全体のアンチエイリアシングを生成し、累積バッファに必要な追加のメモリを使用しないからです。オブジェクトベースのアンチエイリアシングは、シリコングラフィックスがIndyワークステーション向けに最初に開発しました。
デジタル画像は通常、ガンマ圧縮形式で保存されますが、ほとんどの光学アンチエイリアシングフィルタは線形です。そのため、光学的なぼかしに合うように画像をダウンサンプリングするには、まず画像を線形形式に変換し、次にアンチエイリアシングフィルタを適用し、最後にガンマ圧縮形式に戻す必要があります。[ 5 ]ガンマ圧縮画像に線形演算を使用すると、理想的なフィルタとはわずかに異なる値が得られます。この誤差は高コントラスト領域を扱う場合に大きくなり、高コントラスト領域が暗くなります。明るいディテール(猫のひげなど)は、光学的にアンチエイリアシングされた画像と比較して、視覚的に細くなり、暗いディテール(木の枝など)は太くなります。[ 6 ]各ピクセルが個別に歪むため、アンチエイリアシング後に輪郭が滑らかではなくなります。線形フォーマットへの変換と線形フォーマットからの変換は処理速度を大幅に低下させ、また両者の違いは通常微妙であるため、Final Cut ProやAdobe Photoshopを含むほとんどの画像編集ソフトウェアは、ガンマ圧縮された領域で画像を処理します。
最新のGPUのほとんどは、テクスチャをsRGB形式でメモリに保存することをサポートしており、リニア空間への変換と逆変換を透過的に実行できるため、パフォーマンスの低下はほとんどありません。
アンチエイリアシングの歴史における重要な初期の研究には、以下のようなものがある。