画像の縮小に使用するアルゴリズムは?
何が速いですか?
フラッシュやシルバー プレーヤー、html5 などの巨人による画像のサイズ変更 (たとえば、大きな 600x600 から超小さな 6x6 への特別なダウンサイジング) には、どのようなアルゴリズムが実行されますか?
画像の縮小に使用するアルゴリズムは?
何が速いですか?
フラッシュやシルバー プレーヤー、html5 などの巨人による画像のサイズ変更 (たとえば、大きな 600x600 から超小さな 6x6 への特別なダウンサイジング) には、どのようなアルゴリズムが実行されますか?
バイリニアは最も広く使用されている方法であり、最も高速ですが精度が最も低い最近傍ダウンサンプリング アルゴリズムとほぼ同じ速度で実行できます。
バイリニア サンプリングの素朴な実装の問題点は、それを使用して画像を半分以上縮小すると、最近傍で遭遇するものと同様のエイリアシング アーティファクトに遭遇する可能性があることです。これに対する解決策は、ピラミッド ベースのアプローチを使用することです。基本的に、600x600 を 30x30 に縮小したい場合は、まず 300x300 に縮小し、次に 150x150、次に 75x75、次に 38x38 に縮小してから、バイリニアを使用して 30x30 に縮小します。
イメージを半分に縮小すると、バイリニア サンプリング アルゴリズムがはるかに単純になります。基本的に、ピクセルの交互の行と列ごとに:
y[i/2][j/2] = (x[i][j] + x[i+1][j] + x[i][j+1] + x[i+1][j+1]) / 4;
特殊なケースが 1 つあります。JPG を 8 分の 1 以上に縮小する場合です。生の JPG データを解凍せずに、直接 8 分の 1 に再スケーリングできます。JPG は 8x8 ピクセルの圧縮ブロックとして保存され、最初に平均ピクセル値が表示されます。その結果、通常、ファイルをダウンスケールするよりも、ディスクまたはネットワークからファイルを読み取る方が時間がかかります。
通常、縮小にはバイリニア フィルターを使用します。ただし、画像のサイズを小さなサイズに変更するには、うまくいかない場合があります。ほとんどのアイコンは、見栄えを良くするために手動でピクセル編集されています。
これは、概念を非常によく説明する優れたリソースです。
The Code Project には、さまざまな画像フィルターの効果を示す優れた記事があります。
画像を縮小するには、バイキュービック アルゴリズムをお勧めします。これには自然なシャープ効果があるため、画像の細部は小さいサイズでも保持されます。