この課題では、画像プレビュー圧縮アルゴリズムを作成します。目標は、任意の画像ファイルを4 KiBプレビュー画像に縮小することです。これを使用して、非常に少ない帯域幅で画像をすばやく識別できます。
圧縮プログラムと解凍プログラムの2つのプログラム(または1つの結合プログラム)を作成する必要があります。どちらも入力としてファイルまたは標準入力を取り、ファイルまたは標準出力に出力する必要があります。コンプレッサーは、主流の可逆画像形式(PNG、BMP、PPMなど)の1つの画像を受け入れ、最大4096バイトのファイルを出力する必要があります。解凍プログラムは、圧縮プログラムによって生成されたファイルをすべて受け入れ、入力にできるだけ近い画像を出力する必要があります。エンコーダー/デコーダーにはソースコードサイズの制限がないため、アルゴリズムを工夫することができます。
制限事項:
「不正行為」はありません。プログラムは隠し入力を使用したり、インターネットにデータを保存したりすることはできません。また、スコアリング画像のセットのみに関連する機能/データを含めることも禁じられています。
ライブラリ/ツール/ビルトインの場合、一般的な画像処理操作(スケーリング、ぼかし、色空間変換など)を使用できますが、画像のデコード/エンコード/圧縮操作はできません(コンプレッサー入力およびデコンプレッサー出力を除く)。また、一般的な圧縮/解凍も許可されていません。この課題のために独自の圧縮を実装することを意図しています。
圧縮解除プログラムによる画像出力のサイズは、圧縮プログラムに指定された元のファイルのサイズと正確に一致する必要があります。画像の大きさがどちらの方向でも2 16を超えないと仮定できます。
コンプレッサーは、平均的な消費者向けPCで5分以内に実行する必要があり、デコンプレッサーは、以下のセットのすべての画像に対して10秒以内に実行する必要があります。
得点
迅速な検証と視覚的な比較を支援するために、回答を使用して圧縮した後のテストコーパスのロスレスイメージアルバムを含めてください。
コンプレッサーは、次の画像コーパスを使用してテストされます。
こちらから zipファイルのすべての画像をダウンロードできます。
スコアは、すべての画像でのコンプレッサーの平均構造類似性インデックスになります。dssim
この課題にはオープンソースを使用します。ソースから簡単に構築できます。Ubuntuを使用している場合はPPAもあります。独自の回答を採点することをお勧めしますが、Cアプリケーションの構築方法がわからず、Debian / Ubuntuを実行していない場合は、他の人に採点を許可することができます。dssim
PNGでの入出力を想定しているため、別の形式で出力する場合は、最初に出力をPNGに変換します。
スコアリングを簡単にするために、以下に簡単なPythonスクリプトの使用方法を示しますpython score.py corpus_dir compressed_dir
。
import glob, sys, os, subprocess
scores = []
for img in sorted(os.listdir(sys.argv[1])):
ref, preview = (os.path.join(sys.argv[i], img) for i in (1, 2))
sys.stdout.write("Comparing {} to {}... ".format(ref, preview))
out = subprocess.check_output(["dssim", ref, preview]).decode("utf-8").split()[0]
print(out)
scores.append(float(out))
print("Average score: {:.6f}".format(sum(scores) / len(scores)))
最低スコアが勝ちます。
You may assume that the image dimensions do not exceed 2^32 in either direction.
これは少し過剰ではありませんか?これは、(x、y)座標のペアを保存するために最大16バイトを使用する必要があることを意味します。いずれの方向にも2 ^ 16(65536)ピクセルを超えるサイズの画像ファイルはほとんどなく、コーパス内のすべての画像に対して2 ^ 11で十分です。
2^16
ます。