1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| import numpy
def dwt2(data, wavelet, mode):
data = numpy.asarray(data, dtype=numpy.float64)
if len(data.shape) != 2:
raise ValueError("Expected 2D array")
wavelet = pywt.Wavelet(wavelet)
H, L = [], []
for row in data:
cA, cD = pywt.dwt(row, wavelet, mode)
L.append(cA)
H.append(cD)
H = numpy.transpose(H)
L = numpy.transpose(L)
LL, LH = [], []
for row in L:
cA, cD = pywt.dwt(row, wavelet, mode)
LL.append(cA)
LH.append(cD)
HL, HH = [], []
for row in H:
cA, cD = pywt.dwt(row, wavelet, mode)
HL.append(cA)
HH.append(cD)
return map(numpy.array, [LL, LH, HL, HH])
def idwt2(LL, LH, HL, HH, wavelet, mode):
#do the dimension and checking here
L = []
for rowL, rowH in zip(LL, LH):
L.append(pywt.idwt(rowL, rowH, wavelet, mode))
H = []
for rowL, rowH in zip(HL, HH):
H.append(pywt.idwt(rowL, rowH, wavelet, mode))
L = numpy.transpose(L)
H = numpy.transpose(H)
data = []
for rowL, rowH in zip(L, H):
data.append(pywt.idwt(rowL, rowH, wavelet, mode))
return numpy.array(data, dtype=numpy.float64) |
Partager