In dieser Herausforderung erstellen Sie einen Bildvorschau-Komprimierungsalgorithmus. Ziel ist es, eine beliebige Bilddatei auf ein Vorschaubild von 4 KB zu reduzieren, mit dem Bilder mit sehr geringer Bandbreite schnell identifiziert werden können.
Sie müssen zwei Programme (oder ein kombiniertes Programm) schreiben: einen Kompressor und einen Dekompressor. Beide müssen eine Datei oder stdin als Eingabe nehmen und in eine Datei oder stdout ausgeben. Der Kompressor muss ein Bild in einem verlustfreien Mainstream-Bildformat (z. B. PNG, BMP, PPM) akzeptieren und eine Datei von höchstens 4096 Bytes ausgeben . Der Dekomprimierer muss alle vom Komprimierer generierten Dateien akzeptieren und ein Bild ausgeben, das der Eingabe möglichst nahe kommt. Beachten Sie, dass es für den Encoder / Decoder keine Größenbeschränkung für den Quellcode gibt, sodass Sie in Ihrem Algorithmus kreativ sein können.
Beschränkungen:
Kein Schummeln'. Ihre Programme verwenden möglicherweise keine versteckten Eingaben, speichern Daten im Internet usw. Es ist Ihnen auch untersagt, Funktionen / Daten einzubeziehen, die sich nur auf den Satz von Scoring-Bildern beziehen.
Für Bibliotheken / tools / Einbauten Sie sind zu verwenden , erlauben generische Bildverarbeitungsoperationen (Skalierung, Unschärfen, Farbraumtransformation, etc.), aber nicht Bilddekodierungs / Codierung / Kompressionsoperationen (außer Kompressoreingang und Dekompressor - Ausgabe). Generische Komprimierung / Dekomprimierung ist ebenfalls nicht zulässig . Es ist beabsichtigt, dass Sie Ihre eigene Komprimierung für diese Herausforderung implementieren.
Die Abmessungen des vom Dekomprimierer ausgegebenen Bildes müssen genau mit denen der Originaldatei übereinstimmen, die dem Komprimierer übergeben wurde. Sie können davon ausgehen, dass die Bildabmessungen in beiden Richtungen 2 16 nicht überschreiten .
Ihr Kompressor muss auf einem durchschnittlichen Consumer-PC in weniger als 5 Minuten ausgeführt werden, und der Dekomprimierer muss in weniger als 10 Sekunden ausgeführt werden, damit ein Bild im folgenden Satz angezeigt wird.
Wertung
Fügen Sie nach der Komprimierung anhand Ihrer Antwort ein verlustfreies Bildalbum des Testkorpus bei, um eine schnelle Überprüfung und einen visuellen Vergleich zu ermöglichen .
Ihr Kompressor wird mit den folgenden Bildern getestet :
Sie können alle Bilder in einer Zip-Datei hier herunterladen .
Ihr Ergebnis ist der durchschnittliche strukturelle Ähnlichkeitsindex für Ihren Kompressor auf allen Bildern. Wir werden Open Source dssim
für diese Herausforderung verwenden. Es lässt sich leicht aus dem Quellcode erstellen oder wenn Sie auf Ubuntu arbeiten, hat es auch eine PPA. Es wird bevorzugt, wenn Sie Ihre eigene Antwort erhalten, aber wenn Sie nicht wissen, wie C-Anwendungen erstellt werden, und wenn Sie Debian / Ubuntu nicht ausführen, können Sie sich von jemand anderem bewerten lassen. dssim
Erwartet Eingabe / Ausgabe in PNG, konvertieren Sie Ihre Ausgabe also zuerst in PNG, wenn Sie in einem anderen Format ausgeben.
Um das Scoring schmerzlos zu machen, folgt ein schnelles Hilfsskript für 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)))
Die niedrigste Punktzahl gewinnt.
You may assume that the image dimensions do not exceed 2^32 in either direction.
Ist das nicht ein bisschen übertrieben? Das heißt, ich muss bis zu 16 Bytes verwenden, um ein Paar (x, y) Koordinaten zu speichern. Nur wenige Bilddateien haben in beiden Richtungen Abmessungen von mehr als 2 ^ 16 (65536) Pixeln, und 2 ^ 11 ist für alle Bilder im Korpus ausreichend.
2^16
.