Ihre Aufgabe ist es, ein Programm zu schreiben, das ein Eingabebild aufnimmt und es durch Kantenerkennung ausführt, um ein Ausgabebild zu werden.
Die Kantenerkennung funktioniert wie folgt (falls unklar, siehe Sobel-Kantenerkennung ):
- Der Wert für ein Pixel entspricht der Gesamthelligkeit eines Pixels. Wenn es sich also um ein farbiges Pixel handelt, müssen Sie es zuerst in Graustufen konvertieren B).
- Die Formeln für G x und G y für Pixel p (i, j) lauten:
- G x = -1 * p (i-1, j-1) - 2 * p (i-1, j) - 1 * p (i-1, j + 1) + 1 * p (i + 1, j -1) + 2 * p (i + 1, j) + 1 * p (i + 1, j + 1)
- G y = -1 * p (i-1, j-1) - 2 * p (i, j-1) - 1 * p (i + 1, j-1) + 1 * p (i-1, j +1) + 2 * p (i, j + 1) + 1 * p (i + 1, j + 1)
- Der Wert für die Größe der Kante an diesem Pixel ist dann: √ (G x 2 + G y 2 )
Das Ausgabebild hat für jedes Pixel die Größe der Kante √ (G x 2 + G y 2 ) als Graustufen.
Boni:
- Führen Sie eine Gaußsche Unschärfe durch, um das Bild vor dem Aktivieren der Kantenerkennung zu glätten und kleinere Kanten zu vermeiden. Dies ergibt einen Bonus von -30% auf das Endergebnis.
- Berücksichtigen Sie den Winkel der Kante. Sie geben dem Ausgabepixel eine gewisse Farbe, indem Sie denselben Graustufenwert nehmen und Farbe aus einem Farbrad unter Verwendung des Winkels hinzufügen, der aus der Formel arctan (G y / G x ) erhalten wird. Dies gibt einen weiteren Bonus von -30% auf das Endergebnis.
Regeln:
- Sie können den Wert für die Randpixel weglassen und auf Schwarz setzen, oder Sie können 0 für alle Pixel außerhalb des Bildes verwenden.
- Ihr Ausgabebild muss in einem Bildformat vorliegen, das auf den meisten Computern geöffnet werden kann.
- Die Ausgabe muss auf die Festplatte geschrieben oder in eine Datei umgeleitet werden.
- Die Eingabe erfolgt als Befehlszeilenargument in Form eines relativen Pfads zum Bild oder über die Befehlszeile.
- Das ist Code Golf, also gewinnt der kürzeste Code in Bytes!