Rozmycie gaussowskie to metoda stosowana do płynnego rozmycia zdjęć. Polega na stworzeniu matrycy, która będzie używana przez splotowanie jej z pikselami obrazu. W tym wyzwaniu Twoim zadaniem jest zbudowanie matrycy stosowanej w rozmyciu gaussowskim. Weźmiesz wejściowy r, który będzie promieniem rozmycia, i wejściowy σ, który będzie standardowym odchyleniem, aby skonstruować macierz o wymiarach (2 r + 1 × 2 r + 1). Każda wartość w tej macierzy będzie miała wartość ( x , y ), która zależy od jej bezwzględnej odległości w każdym kierunku od środka i będzie używana do obliczenia G ( x , y ), gdzie wzórG jest
Na przykład, jeśli r = 2, chcemy wygenerować macierz 5 x 5. Po pierwsze, macierz wartości ( x , y ) to
(2, 2) (1, 2) (0, 2) (1, 2) (2, 2)
(2, 1) (1, 1) (0, 1) (1, 1) (2, 1)
(2, 0) (1, 0) (0, 0) (1, 0) (2, 0)
(2, 1) (1, 1) (0, 1) (1, 1) (2, 1)
(2, 2) (1, 2) (0, 2) (1, 2) (2, 2)
Następnie pozwól σ = 1,5 i zastosuj G do każdego ( x , y )
0.0119552 0.0232856 0.0290802 0.0232856 0.0119552
0.0232856 0.0453542 0.0566406 0.0453542 0.0232856
0.0290802 0.0566406 0.0707355 0.0566406 0.0290802
0.0232856 0.0453542 0.0566406 0.0453542 0.0232856
0.0119552 0.0232856 0.0290802 0.0232856 0.0119552
Zwykle w przypadku rozmycia obrazu matrycę normalizuje się, biorąc sumę wszystkich wartości w tej macierzy i dzieląc ją. W przypadku tego wyzwania nie jest to konieczne, a surowe wartości obliczone na podstawie formuły są tym, czym powinny być dane wyjściowe.
Zasady
- To jest golf golfowy, więc wygrywa najkrótszy kod.
- Wejście r będzie nieujemną liczbą całkowitą, a σ będzie dodatnią liczbą rzeczywistą.
- Dane wyjściowe muszą reprezentować macierz. Może być sformatowany jako tablica 2d, ciąg znaków reprezentujący tablicę 2d lub coś podobnego.
- Niedokładności zmiennoprzecinkowe nie będą liczone przeciwko tobie.
Przypadki testowe
(r, σ) = (0, 0.25)
2.54648
(1, 7)
0.00318244 0.00321509 0.00318244
0.00321509 0.00324806 0.00321509
0.00318244 0.00321509 0.00318244
(3, 2.5)
0.00603332 0.00900065 0.0114421 0.012395 0.0114421 0.00900065 0.00603332
0.00900065 0.0134274 0.0170696 0.0184912 0.0170696 0.0134274 0.00900065
0.0114421 0.0170696 0.0216997 0.023507 0.0216997 0.0170696 0.0114421
0.012395 0.0184912 0.023507 0.0254648 0.023507 0.0184912 0.012395
0.0114421 0.0170696 0.0216997 0.023507 0.0216997 0.0170696 0.0114421
0.00900065 0.0134274 0.0170696 0.0184912 0.0170696 0.0134274 0.00900065
0.00603332 0.00900065 0.0114421 0.012395 0.0114421 0.00900065 0.00603332
(4, 3.33)
0.00339074 0.00464913 0.00582484 0.00666854 0.00697611 0.00666854 0.00582484 0.00464913 0.00339074
0.00464913 0.00637454 0.00798657 0.0091434 0.00956511 0.0091434 0.00798657 0.00637454 0.00464913
0.00582484 0.00798657 0.0100063 0.0114556 0.011984 0.0114556 0.0100063 0.00798657 0.00582484
0.00666854 0.0091434 0.0114556 0.013115 0.0137198 0.013115 0.0114556 0.0091434 0.00666854
0.00697611 0.00956511 0.011984 0.0137198 0.0143526 0.0137198 0.011984 0.00956511 0.00697611
0.00666854 0.0091434 0.0114556 0.013115 0.0137198 0.013115 0.0114556 0.0091434 0.00666854
0.00582484 0.00798657 0.0100063 0.0114556 0.011984 0.0114556 0.0100063 0.00798657 0.00582484
0.00464913 0.00637454 0.00798657 0.0091434 0.00956511 0.0091434 0.00798657 0.00637454 0.00464913
0.00339074 0.00464913 0.00582484 0.00666854 0.00697611 0.00666854 0.00582484 0.00464913 0.00339074
Odpowiedzi:
Mathematica,
605450 bajtówDzięki @GregMartin za 4 bajty!
Pobiera r i sigma jako dane wejściowe, zwraca macierz (dokładne liczby).
Wersja wbudowana (58 bajtów)
Oczywiście Mathematica ma też do tego wbudowaną funkcję, ale jest za długa.
źródło
-l
przez-#
na końcu (Array
będzie wątek, który w ciągu dwóch wymiarach dla ciebie); eliminuje potrzebę definiowanial
, oszczędzając 4 bajty.MATL , 20 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Oktawa, 45 bajtów
źródło
Oktawa, 49 bajtów
Wypróbuj online!
źródło
Python, 88 bajtów
Korzysta z reguły, w której możesz kodować na stałe 3,14 i 2,72 po 1 bajcie kosztu.
źródło
Perl 6 , 71 bajtów
Technicznie może to być więcej niż 71 bajtów, jeśli jest zakodowane i zapisane w pliku, ale nie mogłem się oprzeć nazwaniu wejścia „sigma” rzeczywistą sigmą grecką. Można go zmienić na dowolną literę ASCII, jeśli ktoś chce.
źródło
SAS Macro Language, 296 bajtów
Prawdopodobnie o wiele bardziej wydajny sposób, ale działa :)
Ten kod drukuje wynikowy zestaw danych.
źródło
Haskell, 59 bajtów
Przykład użycia:
źródło
Python 2.7, 167 bajtów
Bardzo proste rozwiązanie:
Wypróbuj tutaj !
Nie golfowany:
źródło
from __future__ import division
naprawdę?