Difference between revisions of "Short Notes on Wavelets"
From PaskvilWiki
(→Using numpy array's) |
|||
| Line 26: | Line 26: | ||
=== Using numpy array's === | === Using numpy array's === | ||
| − | + | <pre>def haar_int_fwd_1d_np(d): | |
| + | if len(d) == 1: | ||
| + | return d | ||
| + | hp = d[1::2] - d[::2] | ||
| + | lp = d[::2] + (hp >> 1) + (hp % 2) | ||
| + | return np.concatenate((haar_int_fwd_1d_np(lp), hp)) | ||
| + | |||
| + | def haar_int_inv_1d_np(d): | ||
| + | if len(d) == 1: | ||
| + | return d | ||
| + | lp = haar_int_inv_1d_np(d[:len(d) >> 1]) | ||
| + | hp = d[len(d) >> 1:] | ||
| + | even = lp - (hp >> 1) - (hp % 2) | ||
| + | return np.ravel(np.column_stack((even, even + hp)))</pre> | ||
Revision as of 16:01, 24 February 2017
Integer Haar Wavelets, Python implementation
This is a trivial implementation of Haar integer-to-integer wavelets. Note that resulting values typically use 1 more bit than original ones - if source values are in [0..N) interval, then resulting values are in (-N, N) interval.
Using Lists
def haar_int_fwd_1d(d):
if len(d) == 1:
return d
even = d[::2]
odd = d[1::2]
hp = [j - i for i, j in zip(even, odd)]
lp = [i + (w >> 1) + (w % 2) for i, w in zip(even, hp)]
return haar_int_fwd_1d(lp) + hp
def haar_int_inv_1d(d):
if len(d) == 1:
return d
even = haar_int_inv_1d(d[:len(d) >> 1])
odd = d[len(d) >> 1:]
lp = [i - (j >> 1) - (j % 2) for i, j in zip(even, odd)]
hp = [i + j for i, j in zip(lp, odd)]
return [x for t in zip(lp, hp) for x in t]
Using numpy array's
def haar_int_fwd_1d_np(d):
if len(d) == 1:
return d
hp = d[1::2] - d[::2]
lp = d[::2] + (hp >> 1) + (hp % 2)
return np.concatenate((haar_int_fwd_1d_np(lp), hp))
def haar_int_inv_1d_np(d):
if len(d) == 1:
return d
lp = haar_int_inv_1d_np(d[:len(d) >> 1])
hp = d[len(d) >> 1:]
even = lp - (hp >> 1) - (hp % 2)
return np.ravel(np.column_stack((even, even + hp)))