O desfoque gaussiano é um método usado para desfocar as imagens sem problemas. Envolve a criação de uma matriz que será usada pela convolução com os pixels de uma imagem. Nesse desafio, sua tarefa é construir essa matriz usada no desfoque gaussiano. Irá levar uma entrada r que será o raio do borrão e uma entrada σ que será o desvio padrão, a fim de construir uma matriz com dimensões (2 r + 1 × 2 r + 1). Cada valor nessa matriz terá um valor ( x , y ) que depende de sua distância absoluta em cada direção do centro e será usado para calcular G ( x , y ) onde a fórmulaG é
Por exemplo, se r = 2, queremos gerar uma matriz 5 x 5. Primeiro, a matriz de valores ( x , y ) é
(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)
Então, deixe σ = 1,5 e aplique G a cada ( 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
Normalmente no desfoque de imagem, essa matriz seria normalizada pegando a soma de todos os valores nessa matriz e dividindo por ela. Para esse desafio, isso não é necessário e os valores brutos calculados pela fórmula são os que devem ser os resultados.
Regras
- Isso é código-golfe, então o código mais curto vence.
- A entrada r será um número inteiro não negativo e σ será um número real positivo.
- A saída deve representar uma matriz. Ele pode ser formatado como uma matriz 2D, uma string representando uma matriz 2D ou algo semelhante.
- Imprecisões de ponto flutuante não serão contadas contra você.
Casos de teste
(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
Respostas:
Mathematica,
605450 bytesObrigado @GregMartin por 4 bytes!
Pega re sigma como entrada, retorna a matriz (números exatos).
Versão embutida (58 bytes)
Obviamente, o Mathematica também tem um built-in para isso, mas é muito longo.
fonte
-l
por-#
no final (Array
enfiará isso nas duas dimensões para você); isso elimina a necessidade de definirl
, economizando 4 bytes.MATL , 20 bytes
Experimente online!
Explicação
fonte
Oitava, 45 bytes
fonte
Oitava, 49 bytes
Experimente Online!
fonte
Python, 88 bytes
Usa a regra na qual você pode codificar 3.14 e 2.72 a um custo de 1 byte cada.
fonte
Perl 6 , 71 bytes
Tecnicamente, isso pode ter mais de 71 bytes se codificado e salvo em um arquivo, mas não resisti em nomear a entrada "sigma" com um sigma grego real. Ele poderia ser renomeado para qualquer carta ASCII comum, se alguém quisesse.
fonte
Linguagem de Macro SAS, 296 bytes
Provavelmente uma maneira muito mais eficiente de fazer isso, mas funciona :)
Este código imprime o conjunto de dados resultante.
fonte
Haskell, 59 bytes
Exemplo de uso:
fonte
Python 2.7, 167 bytes
Uma solução muito simples:
Experimente aqui !
Ungolfed:
fonte
from __future__ import division
, realmente?