示例#1
0
def afb3D_A(x, af, d):
    lpf = af[:, 0]
    hpf = af[:, 1]
    # permute dimensions of x so that dimension d is first.
    p = [(i + d) % 3 for i in xrange(3)]
    x = x.transpose(p)
    # filter along dimension 0
    (N1, N2, N3) = x.shape
    L = af.shape[0] // 2
    x = cshift3D(x, -L, 0)
    n1Half = N1 // 2
    lo = np.zeros((L + n1Half, N2, N3))
    hi = np.zeros((L + n1Half, N2, N3))
    for k in xrange(N3):
        lo[:, :, k] = firdn(x[:, :, k], lpf)
    lo[:L] = lo[:L] + lo[n1Half:n1Half + L, :, :]
    lo = lo[:n1Half, :, :]

    for k in xrange(N3):
        hi[:, :, k] = firdn(x[:, :, k], hpf)
    hi[:L] = hi[:L] + hi[n1Half:n1Half + L, :, :]
    hi = hi[:n1Half, :, :]
    #permute dimensions of x (inverse permutation)
    q = permutationInverse(p)
    lo = lo.transpose(q)
    hi = hi.transpose(q)
    return lo, hi
示例#2
0
def afb3D_A(x, af, d):
    lpf=af[:, 0]
    hpf=af[:, 1]
    # permute dimensions of x so that dimension d is first.
    p=[(i+d)%3 for i in xrange(3)]
    x=x.transpose(p)
    # filter along dimension 0
    (N1, N2, N3)=x.shape
    L=af.shape[0]//2
    x=cshift3D(x, -L, 0);
    n1Half=N1//2
    lo=np.zeros((L+n1Half, N2, N3));
    hi=np.zeros((L+n1Half, N2, N3));
    for k in xrange(N3):
        lo[:, :, k]=firdn(x[:, :, k], lpf);
    lo[:L]=lo[:L]+lo[n1Half:n1Half+L, :, :];
    lo=lo[:n1Half, :, :];
    
    for k in xrange(N3):
        hi[:, :, k]=firdn(x[:, :, k], hpf);
    hi[:L]=hi[:L]+hi[n1Half:n1Half+L, :, :];
    hi=hi[:n1Half, :, :];
    #permute dimensions of x (inverse permutation)
    q=permutationInverse(p)
    lo=lo.transpose(q)
    hi=hi.transpose(q)
    return lo, hi
示例#3
0
def sfb3D_A(lo, hi, sf, d):
    lpf=sf[:, 0]
    hpf=sf[:, 1]
    # permute dimensions of lo and hi so that dimension d is first.
    p=[(i+d)%3 for i in xrange(3)]
    lo=lo.transpose(p)
    hi=hi.transpose(p)

    (N1, N2, N3)=lo.shape
    N=2*N1
    L=sf.shape[0]
    y=np.zeros((N+L-2, N2, N3))
    for k in xrange(N3):
        y[:, :, k] = (np.array(upfir(lo[:, :, k], lpf)) + 
                     np.array(upfir(hi[:, :, k], hpf)))
    y[:(L-2), :, :] = y[:(L-2), :, :] + y[N:(N+L-2), :, :]
    y=y[:N, :, :]
    y=cshift3D(y, 1-L/2, 0);
    #permute dimensions of y (inverse permutation)
    q=permutationInverse(p)
    y=y.transpose(q);
    return y
示例#4
0
def sfb3D_A(lo, hi, sf, d):
    lpf=sf[:, 0]
    hpf=sf[:, 1]
    # permute dimensions of lo and hi so that dimension d is first.
    p=[(i+d)%3 for i in xrange(3)]
    lo=lo.transpose(p)
    hi=hi.transpose(p)

    (N1, N2, N3)=lo.shape
    N=2*N1
    L=sf.shape[0]
    y=np.zeros((N+L-2, N2, N3))
    for k in xrange(N3):
        y[:, :, k] = (np.array(upfir(lo[:, :, k], lpf)) + 
                     np.array(upfir(hi[:, :, k], hpf)))
    y[:(L-2), :, :] = y[:(L-2), :, :] + y[N:(N+L-2), :, :]
    y=y[:N, :, :]
    y=cshift3D(y, 1-L/2, 0);
    #permute dimensions of y (inverse permutation)
    q=permutationInverse(p)
    y=y.transpose(q);
    return y