Dalam tantangan ini, Anda akan membuat algoritma kompresi pratinjau gambar. Tujuannya adalah untuk mengurangi file gambar sewenang-wenang menjadi gambar pratinjau 4 KiB, yang dapat digunakan untuk dengan cepat mengidentifikasi gambar dengan bandwidth yang sangat sedikit.
Anda harus menulis dua program (atau satu program gabungan): kompresor dan dekompresor. Keduanya harus mengambil file atau stdin sebagai input, dan output ke file atau stdout. Kompresor harus menerima satu gambar dalam format gambar utama lossless pilihan (mis. PNG, BMP, PPM), dan menghasilkan file paling banyak 4.096 byte . Dekompresor harus menerima file apa pun yang dihasilkan oleh kompresor, dan mengeluarkan gambar sedekat mungkin ke input. Perhatikan bahwa tidak ada batasan ukuran kode sumber untuk enkoder / decoder, sehingga Anda dapat kreatif dalam algoritme Anda.
Pembatasan:
Tidak 'curang'. Program-program Anda mungkin tidak menggunakan input tersembunyi, menyimpan data di internet, dll. Anda juga dilarang memasukkan fitur / data yang hanya berkaitan dengan set gambar penilaian.
Untuk perpustakaan / tools / built-in Anda yang diperbolehkan untuk menggunakan generik operasi pengolahan citra (scaling, mengaburkan, warna ruang transformasi, dll), tetapi tidak gambar decoding / encoding / kompresi operasi (kecuali untuk masukan kompresor dan output decompressor). Kompresi / dekompresi generik juga tidak diizinkan . Ini dimaksudkan agar Anda menerapkan kompresi Anda sendiri untuk tantangan ini.
Dimensi output gambar oleh dekompresor harus persis sama dengan yang ada pada file asli yang diberikan ke kompresor. Anda dapat mengasumsikan bahwa dimensi gambar tidak melebihi 2 16 di kedua arah.
Kompresor Anda harus dijalankan pada PC konsumen rata-rata dalam waktu kurang dari 5 menit, dan dekompresor harus berjalan dalam waktu di bawah 10 detik untuk gambar apa pun dalam set di bawah ini.
Mencetak gol
Untuk membantu verifikasi cepat dan perbandingan visual, harap sertakan album gambar lossless test corpus setelah kompresi menggunakan jawaban Anda.
Kompresor Anda akan diuji menggunakan kumpulan gambar berikut :
Anda dapat mengunduh semua gambar dalam file zip di sini .
Skor Anda akan menjadi indeks kesamaan struktural rata-rata untuk kompresor Anda di semua gambar. Kami akan menggunakan sumber terbuka dssim
untuk tantangan ini. Itu mudah dibangun dari sumber, atau jika Anda berada di Ubuntu itu juga memiliki PPA. Lebih disukai jika Anda skor jawaban Anda sendiri, tetapi jika Anda tidak tahu bagaimana membangun aplikasi C dan Anda tidak menjalankan Debian / Ubuntu, Anda dapat membiarkan orang lain mencetak skor untuk Anda. dssim
mengharapkan input / output dalam PNG, jadi konversikan output Anda ke PNG terlebih dahulu jika Anda output dalam format yang berbeda.
Untuk membuat skor tidak menyakitkan, berikut ini skrip Python penolong cepat, penggunaan 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)))
Skor terendah menang.
You may assume that the image dimensions do not exceed 2^32 in either direction.
Bukankah ini sedikit berlebihan? Ini berarti saya harus menggunakan hingga 16 byte untuk menyimpan sepasang koordinat (x, y). Beberapa file gambar memiliki dimensi lebih dari 2 ^ 16 (65536) piksel di kedua arah, dan 2 ^ 11 cukup untuk semua gambar di dalam corpus.
2^16
.