Skip to content

Latest commit

 

History

History
15 lines (8 loc) · 2.58 KB

algorithm.md

File metadata and controls

15 lines (8 loc) · 2.58 KB

HQxアルゴリズム

Note
このドキュメントは hqxのREADMEのImplementation を日本語に翻訳したものです。

最初のステップは、ソースピクセルの3x3エリアの分析です。まず、中心となるピクセルとその8つの近傍ピクセルとの色差を計算します。そして、その差を事前に設定した閾値と比較し、これらのピクセルを2つのカテゴリーに分類します。"近い色" と "遠い色" です。近傍は8つあるので、256通りの組み合わせが可能です。

次のステップであるフィルタリングには、256のエントリを持つルックアップテーブルが使用されます。これは、近い/遠い色の近傍ピクセルの組み合わせごとに1つのエントリです。各エントリには、フィルタリングされた画像の補間されたピクセルを得るために、3x3エリアのソースピクセルの色をミックスする方法が記述されています。

現在の実装では、YUV色空間を使用して色差を計算しており、Y(明るさ)成分とUおよびVの色成分の許容度が高くなっています。この色空間の変換は、ソース画像のフォーマットが1ピクセルあたり16bitであれば、単純なルックアップテーブルを使用して非常に簡単に実装できます。また、MMX命令を使って色差を計算し、閾値と比較することも非常に高速に行うことができます。

256エントリのルックアップテーブルの作成は最も難しい部分でした。画像の異なる色の領域間のエッジを維持し、エッジの方向をできるだけ正しいものに近づけるという考えのもと、各組み合わせについて、その領域の最も可能性の高いベクトル表現を決定しなければなりません。このベクトル表現は、アンチエイリアスを用いてより高い(3倍)解像度でラスタライズされ、その結果がルックアップテーブルに格納されます。

写真ではなく、ライングラフィックスやカートゥーンのスプライトのように、エッジがはっきりした画像を対象にしています。また、256×256の画像をリアルタイムで処理できるよう、高速性も重視しました。