Wprowadzenie
Ostre krawędzie są, szczerze mówiąc, po prostu niebezpieczne, więc biorąc pod uwagę PNG jako wejście, rozmyj obraz przy użyciu metody opisanej poniżej i stęp te przeklęte ostre krawędzie.
metoda
Aby uzyskać wartość RGB każdego piksela, użyj następujących trzech równań:
Gdzie to suma czerwonych wartości każdego z sąsiednich pikseli do kwadratu. Wartość jest liczbą sąsiednich pikseli (np. Piksel narożny będzie miał wartość 3, podczas gdy piksel wokół środka obrazu będzie miał wartość 8).
Piksel sąsiadujący to piksel oddalony od oryginalnego piksela o 1 piksel we wszystkich kierunkach (w lewo, w prawo, w górę, w dół i na wszystkich przekątnych).
Na przykład na poniższym obrazie 3 x 1:
Zamazana wartość RGB środkowego piksela będzie wynosić:
gdzie wszelkie dane dziesiętne są zaokrąglane do najbliższej jednostki. Nie powinieneś po prostu ogłaszać wyniku.
Dlatego środkowy piksel będzie kolorem (0, 221, 221) lub:
Wynikające z obrazu:
Powtórz ten proces dla każdego piksela na obrazie. (Pamiętaj, że robisz to z oryginalnymi pikselami, a nie ze zmodyfikowanymi pikselami. Zasadniczo nie powinieneś nadpisywać oryginalnego obrazu i powinien on być całkowicie oddzielony od nowego, zamazanego obrazu ).
Jeśli obliczysz, że jakieś wartości są większe niż 255, przyjmij, że jego wartość to 255 (tj. Wartość 374 zostanie ustawiona na 255).
Wynikowy wynik powinien być osobnym obrazem PNG (możesz nazwać to, co chcesz).
Przykłady
Super Mario
Oryginalny:
Zamazany:
Szachownica
Oryginalny:
Zamazany:
Chipsy
Oryginalny
Zamazany
Już nie tak ostro
amerykański gotyk
Oryginalny:
Zamazany:
Aby zobaczyć rozmycie na większych obrazach, najlepiej uruchomić program ponownie na zamazanym obrazie:
Wyzwanie
Wygrywa najkrótszy kod do rozmycia danego obrazu PNG.
Możesz używać bibliotek przetwarzania obrazu (takich jak PIL), ale nie wolno używać wbudowanych funkcji rozmycia (Mathematica, patrzę na ciebie).
Uwaga
Jak mówi @orlp poniżej:
Dla przypomnienia (o ile mi wiadomo) nie jest to standardowa metoda rozmycia. To wyzwanie nie jest zasobem edukacyjnym.
źródło
n
powinien pojawić się w mianowniku.Odpowiedzi:
Python,
354313 bajtówNie najlepszy, ale hej ...
Używanie spacji dla wcięcia 1. poziomu, Tab dla 2. poziomu, a następnie Tab + Spacja i Tab + Tab
math.sqrt()
ze()**.5
dzięki rozpadu betamin
do mocowania (oszczędzając dużo!) I0
dlapass
dzięki Loovjo+=[]
do.append()
zapisania 5 bajtóws
dla szablonuźródło
n**0.5
jest krótszy niżimport math;math.sqrt(n)
? Czy istnieje powód tego drugiego?v if v<256 else 255
można skrócić domin(v,255)
pass
z0
from PIL import Image as I
.MATLAB, 130 bajtów
Pobiera obraz jako dane wejściowe i zapisuje dane wyjściowe jako
b.png
.źródło