

ピクセルアートのスケーリングアルゴリズムは、手描きの2Dピクセルアートグラフィックの見た目を向上させるためのグラフィックフィルタです。これらのアルゴリズムは、自動画像補正の一種です。ピクセルアートのスケーリングアルゴリズムは、画像の見た目を維持することを目的とする一般的な画像リサイズ方法とは大きく異なる手法を採用しています。
ピクセルアートグラフィックは一般的に非常に低い解像度で使用されるため、個々のピクセルを丁寧に着色します。その結果、複雑な形状を定義するために、様式化された視覚的手がかりに大きく依存するグラフィックが生まれます。このようなグラフィックのリサイズを処理するために、いくつかの特殊なアルゴリズム[ 1 ]が開発されています。
これらの特殊なアルゴリズムはピクセルアートグラフィックの外観を向上させることができますが、その過程で変化が生じます。特に、元の外観を忠実に再現することが目的の場合、こうした変化は望ましくない場合があります。
この技術の典型的な応用例は、アーケードやコンソールエミュレータ上で第4世代以前のビデオゲームの見た目を向上させることであるため、多くのピクセルアートスケーリングアルゴリズムは、十分に小さな入力画像に対して毎秒60フレームでリアルタイムに動作するように設計されています。このため、このようなリアルタイム処理に使用できるプログラミング手法の種類に制約が生じます。多くは特定のスケールファクターでのみ動作します。2倍が最も一般的なスケールファクターですが、3倍、4倍、5倍、6倍も存在しますが、使用頻度は低くなっています。
Mullard SAA5050テレテキスト文字生成チップ (1980 年) は、内部ROMからの低解像度表現から画面上に高解像度の文字を生成するために、原始的なピクセルスケーリングアルゴリズムを使用していました。内部的には、各文字の形状は5 × 9ピクセルのグリッドで定義され、その後、対角線を平滑化することによって補間され、特徴的な角張った形状の10 × 18ピクセルの文字が生成され、上部と左側に 2 ピクセルの空白スペースで囲まれていました。このアルゴリズムはモノクロのソースデータでのみ機能し、ソースピクセルが「オン」か「オフ」かに応じて論理的に真または偽になると想定しています。「グリッドパターン外」のピクセルはオフであると想定されます。[ 2 ] [ 3 ] [ 4 ]
このアルゴリズムは次のように動作します。
ABC --\ 1 2 防御 --/ 3 4 1 = B | (A & E & !B & !D) 2 = B | (C & E & !B & !F) 3 = E | (!A & !E & B & D) 4 = E | (!C & !E & B & F)
このアルゴリズムは、後述のイーグルアルゴリズムと同様に、欠点があります。中空のひし形をした4ピクセルのパターンが現れた場合、拡張処理によって中空部分が消去されてしまいます。SAA5050の内部文字ROMは、このパターンを意図的に使用しないようにしています。
退化したケース:
* * * *
になる:
** **** ****** ****** **** **
エリックのピクセル拡張(EPX)は、1992年頃にルーカスアーツのエリック・ジョンストンが、IBM PC(320×200×256色で動作)から初期のカラーMacintoshコンピュータ(ほぼ2倍の解像度で動作)にSCUMMエンジンゲームを移植する際に開発したアルゴリズムです。[ 5 ]この アルゴリズムは、Pの周囲に基づいてPを4つの新しいピクセルに拡張するという以下の動作をします。
![]()
1=P; 2=P; 3=P; 4=P; C==Aの場合、1=Aとなる。 A==Bならば、B=2となる。 D==Cならば、3=C B==Dの場合、4=Dとなる。 A、B、C、Dのうち3つ以上が同一である場合:1=2=3=4=P
このアルゴリズムを後から実装したもの(2001年頃に開発されたAdvMAME2×やScale2×など)は、若干効率が向上しているものの、機能的には全く同じである。
1=P; 2=P; 3=P; 4=P; C==AかつC≠DかつA≠Bならば、1=Aとなる。 A==BかつA≠CかつB≠Dならば、B=Bとなる。 D==CかつD≠BかつC≠Aならば、3=C B==DかつB≠AかつD≠Cならば、4=D
AdvMAME2×は、dosbox.confのオプションを介してDOSBoxで使用できます。scaler=advmame2x
AdvMAME4×/Scale4×アルゴリズムは、EPXを2回適用して4倍の解像度を実現するものです。

AdvMAME3×/Scale3×アルゴリズム(DOSBoxのscaler=advmame3xdosbox.confオプションで利用可能)は、EPXを3倍に一般化したものと考えることができます。コーナーピクセルの計算方法はEPXと全く同じです。
![]()
1=E; 2=E; 3=E; 4=E; 5=E; 6=E; 7=E; 8=E; 9=E; D==BかつD≠HかつB≠Fならば、1=D もし (D==B かつ D!=H かつ B!=F かつ E!=C) または (B==F かつ B!=D かつ F!=H かつ E!=A) ならば、2=B B==FかつB≠DかつF≠Hならば、3=F もし (H==D かつ H!=F かつ D!=B かつ E!=A) または (D==B かつ D!=H かつ B!=F かつ E!=G) ならば 4=D 5=E IF (B==F AND B!=D AND F!=H AND E!=I) OR (F==H AND F!=B AND H!=D AND E!=C) => 6=F H==DかつH≠FかつD≠Bならば、7=D IF (F==H AND F!=B AND H!=D AND E!=G) OR (H==D AND H!=F AND D!=B AND E!=I) => 8=H F==HかつF≠BかつH≠Dならば、9=F
また、Sp00kyFox によって開発された Scale3× の改良版である ScaleFX や、Reverse-AA と組み合わせた ScaleFX-Hybrid というバージョンもあります。[ 6 ] [ 7 ] [ 8 ]
Eagle は次のように動作します。入力ピクセルごとに、4 つの出力ピクセルを生成します。まず、4 つのピクセルすべてを、現在スケーリングしているピクセルの色 (最近傍) に設定します。次に、上、左、および左斜め上の 3 つのピクセルを確認します。3 つのピクセルすべてが同じ色である場合、出力正方形の左上のピクセルを、最近傍の色よりも優先してその色に設定します。4 つのピクセルすべてに対して同様の処理を行い、次に次のピクセルに進みます。[ 9 ]
入力行列は3×3ピクセルで、中央のピクセルがスケーリング対象のピクセルであり、出力行列は2×2ピクセル(つまり、スケーリング後のピクセル)であると仮定します。
まず:|次に ... --\ CC |STU --\ 1 2 . C . --/ CC |VCW --/ 3 4 ... |XYZ | もし V==S==T ならば 1=S | IF T==U==W => 2=U | もし V==X==Y ならば 3=X | もし W==Z==Y ならば 4=Z
したがって、白い背景に黒いピクセルが1つだけある場合、それは消えてしまいます。これはEagleアルゴリズムのバグですが、EPX、2xSaI、HQ2xなどの他のアルゴリズムでは解決されています。
2×SaI(2× Scale and Interpolation engineの略)は、Eagleに触発されて開発されました。Kreedとしても知られるDerek Liauw Kie Faによって、主にコンソールやコンピュータのエミュレータで使用するために設計され、この分野ではかなりの人気を保っています。ZSNESやVisualBoyAdvanceなど、最も人気のあるエミュレータの多くは、このスケーリングアルゴリズムを機能として提供しています。スケーリングアルゴリズムにはいくつかのわずかに異なるバージョンがあり、これらはSuper 2×SaIやSuper Eagleと呼ばれることがよくあります。

2xSaIファミリーは、4×4のピクセルマトリックス上で動作し、下のAでマークされたピクセルはスケーリングされます。
IEFJ GABK -- WX HCDL --/ YZ MNOP
16ビットピクセルの場合、16ビットピクセルフォーマットが565か555かに応じて変化するピクセルマスクを使用します。定数colorMask、、、、、およびは16ビットマスクです。下位8ビットはどちらのピクセルフォーマットでも同じです。lowPixelMaskqColorMaskqLowPixelMaskredBlueMaskgreenMask
2つの補間関数について説明します。
INTERPOLATE(uint32 A, UINT32 B) -- AとBの線上の中点 もし(A == B)ならば、Aを返す。 戻る ( ((A & colorMask) >> 1) + ((B & colorMask) >> 1) + (A & B & lowPixelMask) ); Q_INTERPOLATE(uint32 A, uint32 B, uint32 C, uint32 D) -- 双線形補間; A、B、C、Dの平均 x = ((A & qColorMask) >> 2) + ((B & qColorMask) >> 2) + ((C & qColorMask) >> 2) + ((D & qColorMask) >> 2); y = (A & qLowPixelMask) + (B & qLowPixelMask) + (C & qLowPixelMask) + (D & qLowPixelMask); y = (y >> 2) & qLowPixelMask; x + y を返します。
このアルゴリズムは、A、B、C、D について、 と が成り立つような対角線上の一致があるA==DかB!=Cどうか、またはその逆、あるいは両方とも対角線である場合、または対角線上の一致がない場合をチェックします。これらの中で、3 つまたは 4 つの同一のピクセルをチェックします。これらの条件に基づいて、アルゴリズムは、各出力ピクセルに対して、A、B、C、D のいずれかを使用するか、またはこれら 4 つの中から補間を行うかを決定します。2xSaI 任意スケーラーは、任意の画像を任意の解像度に拡大でき、バイリニアフィルタリングを使用してピクセルを補間します。
Kreedは[ 10 ]ソースコードをGNU一般公衆ライセンスの下で公開したため、そのライセンスの下で公開されるプロジェクトで利用したい人は誰でも自由に利用できます。GPL以外のプロジェクトで使用したい開発者は、Kreedの既存のコードを一切使用せずにアルゴリズムを書き直す必要があります。
DOSBoxではオプションで利用可能ですscaler=2xsai。
Maxim Stepin の hq2x、hq3x、hq4x は、それぞれ 2:1、3:1、4:1 のスケール係数用です。それぞれは、各ピクセルの色値をその 8 つの隣接ピクセルの色値と比較し、隣接ピクセルを近いか遠いかでマークし、事前に生成されたルックアップ テーブルを使用して、対応する 4、9、または 16 個の出力ピクセルそれぞれについて入力ピクセルの値の適切な比率を見つけることで機能します。hq3x ファミリーは、入力でアンチエイリアス処理されていない傾きが ±0.5、±1、または ±2 の対角線を完全に滑らかにします。それ以外の傾きの場合は、出力で 2 つの傾きが交互に現れます。また、非常に急な曲線も滑らかにします。2xSaI とは異なり、出力にアンチエイリアス処理を施します。[ 11 ] [ 8 ]


hq n x は当初、スーパー NESエミュレータZSNES用に作成されました。bsnes の作者は、hq2xのスペース効率の良い実装をパブリック ドメインに公開しました。[ 12 ] xBR の初期バージョンと同等の品質を持つシェーダーへの移植が利用可能です。 [ 13 ]この移植以前は、「scalehq」と呼ばれるシェーダーが hqx と混同されることがよくありました。[ 14 ]
このシリーズには、 xBR、xBRZ、xBR-Hybrid、Super xBR、xBR+3D、Super xBR+3Dの6種類のフィルターがあります。
Hyllian が作成した xBR (「ルールによるスケーリング」) は、HQx (パターン認識に基づく) とほぼ同じように動作し、上記のパターンが与えられた場合、HQx と同じ結果を生成します。[ 15 ]ただし、アンチエイリアスされた線や曲線などのより複雑なパターンをより適切に処理する2 段階の補間ルールセットを使用することで、HQx よりもさらに進んでいます。スケーリングされた背景テクスチャは、HQx (実際には ScaleHQ であることが多い) のようにぼやけるのではなく、元の画像のシャープな特性を維持します。最新の xBR バージョンはマルチパスであり、細かいディテールをより良く保持できます。また、xBR と Reverse-AA シェーダーを組み合わせたバージョン、xBR-Hybrid もあります。[ 16 ] xBR+3D は、2D 要素のみをフィルタリングする 3D マスクを備えたバージョンです。
Zenju の xBRZ は、xBR の改良版です。C ++で CPU ベースのフィルタとしてゼロから実装されています。[ 17 ] xBR のパターン認識と補間と同じ基本的なアイデアを使用していますが、数ピクセル程度の細かい画像の詳細を保持するように設計された異なるルール セットを使用しています。これにより、顔、特に目の細部のスケーリングに役立ちます。xBRZ はマルチコア CPUと64 ビット アーキテクチャに最適化されており、単一の CPU コアで実行した場合でも、HQx より 40 ~ 60% 優れたパフォーマンスを示します。アルファ チャネルを使用した画像のスケーリングと、2 倍から 6 倍までの整数係数によるスケーリングをサポートしています。
Super xBR [ 18 ] [ 19 ]は、2015 年に Hyllian によって開発されたアルゴリズムです。既知の線形フィルタのいくつかの組み合わせと xBRエッジ検出ルールを非線形的に使用します。2 パスで動作し、画像を 2 倍 (または再適用により 2 の倍数) にしか拡大できません。また、アンチリンギングフィルタも備えています。Super xBR+3D は、2D 要素のみをフィルタリングする 3D マスクを備えたバージョンです。C/C++ で書き直された Super xBR バージョンもあります。[ 20 ] [ 8 ]

RotSpriteは、Xenowhirlによって開発されたスプライトのスケーリングおよび回転アルゴリズムです。最近傍回転アルゴリズムよりもはるかに少ないアーティファクトを生成し、EPXと同様に、(ほとんどの補間システムとは異なり)画像に新しい色を導入しません。[ 21 ]
このアルゴリズムは、まず修正版Scale2×アルゴリズムを使用して画像を元のサイズの8倍に拡大します。このアルゴリズムは、同一ではない類似のピクセルを一致として扱います。次に、(オプションで)境界ピクセルではないサンプリングポイントを優先して、使用する回転オフセットを計算します。続いて、最近傍スケーリングおよび回転アルゴリズムを使用して回転画像を作成します。このアルゴリズムは、大きな画像を元のサイズに縮小すると同時に画像を回転させます。最後に、ソース画像の対応するピクセルが異なり、宛先ピクセルに3つの同一の近傍ピクセルがある場合、(オプションで)見落とされた単一ピクセルの詳細が復元されます。[ 22 ]
Fast RotSpriteは、Oleg Mekekechko氏がPixel Studioアプリ向けに開発した、ピクセルアート用の高速回転アルゴリズムです。RotSpriteをベースにしていますが、若干の画質低下はあるもののパフォーマンスが向上しています。より大きな画像をリアルタイムで処理できます。Fast RotSpriteは、8倍アップスケールの代わりに3倍アップスケールを1回だけ使用します。その後、すべてのピクセルを丸め座標で回転させます。最後に、新しい色を導入することなく3倍ダウンスケールを実行します。各ステップのすべての操作は独立しているため、並列処理が可能で、パフォーマンスを大幅に向上させることができます。
Kopf–Lischinskiアルゴリズムは、2011年の論文「Depixelizing Pixel Art」で説明されている、ピクセルアートから解像度に依存しないベクターグラフィックスを抽出する新しい方法です。 [ 23 ] Pythonによる実装が利用可能です。[ 24 ]
このアルゴリズムはGPUに移植され、リアルタイムレンダリング用に最適化されています。このバージョンのソースコードは入手可能です。[ 25 ]
エッジ指向補間 (EDI) は、拡大された画像の品質を保証するために統計的サンプリングを使用する拡大手法について説明します。[ 26 ] [ 27 ]以前は、エッジを検出して線形補間のブレンド重みを生成したり、近傍条件に基づいてピクセルを分類し、分類に基づいて異なる等方性補間スキームを使用したりする方法がいくつかありました。各補間アプローチは、近傍ピクセルの加重平均に帰着します。目標は、最適な重みを見つけることです。双線形補間では、すべての重みが等しくなります。双三次補間やsinc 補間などの高次補間法では、隣接するピクセルだけでなく、より多くの近傍を考慮します。
NEDI(New Edge-Directed Interpolation)は、元の画像内の局所共分散を計算し、それらを使用して高解像度での補間を適応させます。これはこのファミリーのプロトタイプフィルタです。 [ 28 ]
EDIUpsizer [ 29 ]は、NEDI (新しいエッジ指向補間) [ 28 ]を使用して画像を水平方向と垂直方向の両方で 2 倍にリサイズするリサンプリングフィルタです。EDIUpsizerは、NEDI が詳細領域で生成する多くのアーティファクトを防ぐために、基本的な NEDI にいくつかの変更を加えています。これには、条件番号テストと適応ウィンドウサイズ[ 30 ] 、およびキャッピング制約が含まれます。NEDI に対するすべての変更と制約はオプション (オン/オフを切り替え可能) で、ユーザーが設定できます。このフィルタはかなり低速です。
FastEDIUpsizerは、EDIUpsizerの軽量版で、速度をやや重視して調整されています。一定の8×8ウィンドウサイズを使用し、輝度プレーンでのみNEDIを実行し、フォールバック補間方法として双三次補間または双線形補間のみを使用します。
もう一つのエッジ指向補間フィルタ。走査線上のすべてのピクセルを含むコスト関数を最小化することで動作する。処理速度は遅い。
EEDI2 は、既存の画像を 2⋅y(n) にコピーし、欠落したフィールドを補間することで、画像を垂直方向に 2 倍にリサイズします。これは、デインターレースのためのエッジ指向補間を目的としています (つまり、通常の画像のリサイズ用に作られたものではありませんが、それも実行できます)。EEDI2 は TDeint と TIVTC の両方で使用できます。詳細については、ディスカッション リンクを参照してください。[ 31 ]
SuperRes [ 32 ]シェーダーは、NEDI (または他のスケーリング アルゴリズム) と組み合わせて使用できる、異なるスケーリング メソッドを使用します。このメソッドは、作成者の Shiandow が 2014 年に Doom9 フォーラムの投稿で詳しく説明しています。[ 33 ]このメソッドは、NEDI だけを使用する場合よりも優れた結果をもたらすことが多く、NNEDI3 に匹敵します。これらは、MPDN レンダー スクリプトとしても利用できるようになりました。
NNEDIは、フィールド内デインターレース方式のアルゴリズムであり、画像を2のべき乗で拡大するためにも使用できます。デインターレース方式として使用する場合、フレームを入力として受け取り、1つのフィールドを破棄し、残りのフィールドの情報のみを使用して欠落したピクセルを補間します。NNEDIには、現在までに3つの主要な世代が存在します。
オリジナルの NNEDI はYUY2およびYV12入力で動作します。[ 34 ] NNEDI2 は RGB24 のサポートとアップスケーリングの特殊機能を追加しましたnnedi2_rpow2。NNEDI3 は NNEDI2 を予測ニューラルネットワークで拡張しています。ネットワークのサイズとネットワークが調べる近傍の両方を速度と品質のトレードオフに合わせて調整できます。[ 35 ]
これは品質と速度のどちらを優先するかという選択肢ですが、特定のリサイズ係数におけるニューロン数の違いは通常小さいものの、画像サイズを4倍にするとニューロン数によるパフォーマンスの違いは大きくなります。解像度を2倍にするだけであれば、16個と256個のニューロンの間に大きな違いは見られません。最高値と最低値の間には依然として顕著な違いがありますが、桁違いの違いではありません。[ 36 ]
{{cite web}}: CS1 maint: タイトルとしてアーカイブされたコピー (リンク)