83 lines
1.3 KiB
Python
83 lines
1.3 KiB
Python
import numpy as np
|
|
|
|
|
|
""" Erstellen des Ursprünglichen Filterkerns"""
|
|
f_a = np.expand_dims(np.asarray([1, 4, 1]), 0)
|
|
f_b = np.expand_dims(np.asarray([-1, 0, 1]), 1)
|
|
f_orig = np.matmul(f_b, f_a)
|
|
print("TEIL 1")
|
|
print(f_a)
|
|
print(f_b)
|
|
print(f_orig)
|
|
|
|
""" Separieren des Filterkerns
|
|
|
|
Wir können das Problem als
|
|
|
|
f_a * f_b = f_C
|
|
|
|
mit
|
|
|
|
f_a = [a, b, c]^T
|
|
f_b = [d, e, f]
|
|
|
|
f_C = [
|
|
[ ad, ae, af ],
|
|
[ bd, be, bf ],
|
|
[ cd, ce, cf ],
|
|
]
|
|
|
|
modellieren. Wenn wir a=1 setzten, ergibt sich d=-2 e=-3 f=-2 (erste Zeile der Matrix) sodass sich ein linear
|
|
unabhängiges Gleichungssystem
|
|
f_C = [
|
|
[ -2a, -3a, -2a ],
|
|
[ -2b, -3b, -2b ],
|
|
[ -2c, -3c, -2c ],
|
|
] =
|
|
[
|
|
[-2, -3, -2],
|
|
[0, 0, 0],
|
|
[2, 3, 2],
|
|
]
|
|
|
|
=> -2a=-2, -2b=0, -2c=2
|
|
|
|
=> A * x = B
|
|
A = [
|
|
[-2, 0, 0],
|
|
[ 0, -2, 0],
|
|
[ 0, 0, -2],
|
|
]
|
|
x = [a, b, c]^T
|
|
B = [-2, 0, 2]^T
|
|
|
|
|
|
erstellen lässt. Dieses lässt sich leicht "von Hand" oder mit Numpy lösen.
|
|
=>
|
|
f_a = [1, 0, -1]^T
|
|
f_b = [-2, -3, -2]
|
|
Hinweis: Es gibt unendlich viele Lösungen (wenn separierbar)!
|
|
"""
|
|
f_C = np.asarray(
|
|
[
|
|
[-2, -3, -2],
|
|
[0, 0, 0],
|
|
[2, 3, 2],
|
|
]
|
|
)
|
|
|
|
A = np.array([
|
|
[-2, 0, 0],
|
|
[ 0,-2, 0],
|
|
[ 0, 0,-2],
|
|
])
|
|
B = np.array([-2, 0, 2])
|
|
x = np.linalg.solve(A, B)
|
|
|
|
f_a = np.expand_dims(x, axis=1)
|
|
f_b = np.expand_dims(np.asarray([-2, -3, -2]), axis=0)
|
|
f_C_new = np.matmul(f_a, f_b)
|
|
print("TEIL 2")
|
|
print(f_C)
|
|
print(f_C_new)
|