Twoim zadaniem jest napisanie programu, który pobiera obraz wejściowy i uruchomić go przez wykrywanie krawędzi, aby stać się obrazem wyjściowym.
Wykrywanie krawędzi działa w następujący sposób (jeśli niejasne, patrz wykrywanie krawędzi sobel ):
- Wartość piksela to całkowita jasność piksela, więc jeśli jest kolorowy, najpierw musisz go przekonwertować na skalę szarości (aby zachować prostotę i możliwość gry w golfa, możesz przyjąć średnią wartość R, G i B).
- Wzory dla G x i G y dla piksela p (i, j) są następujące:
- 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)
- Wartość rozmiaru krawędzi tego piksela to: then (G x 2 + G y 2 )
Obraz wyjściowy jest dla każdego piksela wielkości krawędzi √ (G x 2 + G y 2 ) jako skala szarości.
Bonusy:
- Wykonaj rozmycie gaussowskie, aby wygładzić obraz przed uruchomieniem wykrywania krawędzi, aby pominąć mniejsze krawędzie. Daje to premię w wysokości -30% od wyniku końcowego.
- Weź pod uwagę kąt krawędzi. Nadajesz pikselowi wyjściowemu trochę koloru, przyjmując tę samą wartość w skali szarości i dodając kolor z koła kolorów przy użyciu kąta uzyskanego z formuły arctan (G y / G x ). Daje to kolejną premię w wysokości -30% od wyniku końcowego.
Zasady:
- Możesz pominąć wartość edgepixels i ustawić je na czarne, lub możesz użyć 0 dla dowolnego piksela poza obrazem.
- Obraz wyjściowy musi mieć format obrazu, który można otworzyć na większości komputerów.
- Dane wyjściowe muszą być zapisane na dysku lub nadawać się do potoku do pliku.
- Dane wejściowe są podawane jako argument wiersza polecenia, w postaci względnej ścieżki do obrazu lub przesyłane strumieniowo z wiersza polecenia.
- To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach!