Hier ein weiteres Beispiel mit zusätzlichen Informationen,
OSWALD
Code: Alles auswählen
#CONVOLUTION
import numpy as np
a = np.array([[1, 2, 0, 0],
[5, 3, 0, 4],
[0, 0, 0, 7],
[9, 3, 0, 0]])
print(a)
print()
k = np.array([[1,1,1],[1,1,0],[1,0,0]])
print(k)
from scipy import ndimage
ndimage.convolve(a, k, mode='constant', cval=0.0)
#array([[11, 10, 7, 4],
# [10, 3, 11, 11],
# [15, 12, 14, 7],
# [12, 3, 7, 0]])
#Die Einstellung cval=1.0entspricht dem Auffüllen des äußeren Rands der Eingabe mit 1,0
#(und dem anschließenden Extrahieren nur des ursprünglichen Bereichs des Ergebnisses).
ndimage.convolve(a, k, mode='constant', cval=1.0)
#array([[13, 11, 8, 7],
# [11, 3, 11, 14],
# [16, 12, 14, 10],
# [15, 6, 10, 5]])
#Mit mode='reflect'(Standard) werden äußere Werte am Rand der Eingabe reflektiert ,
#um fehlende Werte zu ergänzen.
b = np.array([[2, 0, 0],
[1, 0, 0],
[0, 0, 0]])
k = np.array([[0,1,0], [0,1,0], [0,1,0]])
ndimage.convolve(b, k, mode='reflect')
# [3, 0, 0],
# [1, 0, 0]])
#Dies gilt auch für die Diagonalen an den Ecken.
k = np.array([[1,0,0],[0,1,0],[0,0,1]])
ndimage.convolve(b, k)
# [3, 2, 0],
# [1, 1, 0]])
#Mit wird mode='nearest'der einzelne, einer Kante in der Eingabe am nächsten liegende
#Wert so oft wiederholt, wie nötig, um die überlappenden Gewichte anzupassen .
c = np.array([[2, 0, 1],
[1, 0, 0],
[0, 0, 0]])
k = np.array([[0, 1, 0],
[0, 1, 0],
[0, 1, 0],
[0, 1, 0],
[0, 1, 0]])
ndimage.convolve(c, k, mode='nearest')
#array([[7, 0, 3],
# [5, 0, 2],
# [3, 0, 1]])