Die Gaußsche Unschärfe ist eine Methode, mit der Bilder gleichmäßig verwischt werden. Dabei wird eine Matrix erstellt, die verwendet wird, indem sie mit den Pixeln eines Bildes gefaltet wird. In dieser Herausforderung besteht Ihre Aufgabe darin, die in der Gaußschen Unschärfe verwendete Matrix zu konstruieren. Sie nehmen eine Eingabe r, bei der es sich um den Radius der Unschärfe handelt, und eine Eingabe σ, bei der es sich um die Standardabweichung handelt, um eine Matrix mit den Abmessungen (2 r + 1 × 2 r + 1) zu erstellen . Jeder Wert in dieser Matrix hat einen ( x , y ) -Wert, der von seinem absoluten Abstand in jeder Richtung vom Zentrum abhängt und zur Berechnung von G ( x , y ) verwendet wird, wobei die Formel verwendet wirdG ist
Wenn beispielsweise r = 2 ist, möchten wir eine 5 × 5-Matrix erzeugen. Erstens ist die Matrix von ( x , y ) Werten
(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)
Dann sei σ = 1,5 und wende G auf jedes ( x , y ) an.
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
Normalerweise wird diese Matrix bei Bildunschärfe normalisiert, indem die Summe aller Werte in dieser Matrix genommen und durch diese dividiert wird. Für diese Herausforderung ist dies nicht erforderlich, und die von der Formel berechneten Rohwerte sind die Ausgabe, die ausgegeben werden soll.
Regeln
- Das ist Code-Golf, also gewinnt der kürzeste Code.
- Die Eingabe r ist eine nichtnegative ganze Zahl und σ ist eine positive reelle Zahl.
- Die Ausgabe muss eine Matrix darstellen. Es kann als 2D-Array, als String für ein 2D-Array oder ähnliches formatiert werden.
- Gleitkomma-Ungenauigkeiten werden Ihnen nicht angerechnet.
Testfälle
(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
Antworten:
Mathematica,
605450 BytesDanke @GregMartin für 4 Bytes!
Übernimmt r und Sigma als Eingabe, gibt die Matrix zurück (exakte Zahlen).
Eingebaute Version (58 Bytes)
Natürlich hat Mathematica auch eine eingebaute, aber es ist zu lang.
quelle
-l
durch-#
am Ende ersetzen (Array
fädelt das für Sie über beide Dimensionen ein); Dasl
erspart das Definieren und spart 4 Bytes.MATL , 20 Bytes
Probieren Sie es online!
Erläuterung
quelle
Oktave, 45 Bytes
quelle
Oktave, 49 Bytes
Probieren Sie es online!
quelle
Python, 88 Bytes
Verwendet die Regel, nach der Sie 3.14 und 2.72 mit jeweils 1 Byte Kosten fest codieren können.
quelle
Perl 6 , 71 Bytes
Technisch mag dies mehr als 71 Bytes sein, wenn es verschlüsselt und in einer Datei gespeichert wird, aber ich konnte nicht widerstehen, die "Sigma" -Eingabe mit einem tatsächlichen griechischen Sigma zu benennen. Es kann in einen beliebigen ASCII-Buchstaben umbenannt werden, wenn dies gewünscht wird.
quelle
SAS-Makrosprache, 296 Byte
Wahrscheinlich ein viel effizienterer Weg, dies zu tun, aber es funktioniert :)
Dieser Code druckt den resultierenden Datensatz aus.
quelle
Haskell, 59 Bytes
Anwendungsbeispiel:
quelle
Python 2.7, 167 Bytes
Eine sehr einfache Lösung:
Probieren Sie es hier aus !
Ungolfed:
quelle
from __future__ import division
, Ja wirklich?