2012-12-16 8 views
5

Vorrei usare DCT-II di Scipy poiché è già codificato e veloce. Guardando il doc, sembra che sia l'implementazione 1D. È possibile utilizzarlo in modo tale da utilizzarlo come implementazione 3D? Non sono sicuro della matematica. Le implementazioni 2D e 3D equivalgono a moltiplicare 2 o 3 volte l'1D utilizzando dimensioni diverse nel calcolo?Usa lo Scipy DCT-II di Python per fare DCT 2D o ND

+1

Non sono sicuro che si intende per moltiplicando 2 o 3 volte. Tuttavia, in 2D, ad esempio, è equivalente all'applicazione del DCT sulle colonne sul risultato del DCT sulle righe. Questa è un'equivalenza diretta dalla formulazione DCT e si estende al caso N-dimensionale. – mmgp

+0

Ok! È più o meno quello che intendevo. – macrocosme

risposta

5

In sostanza, il seguente fa il trucco:

import numpy as np 
from scipy.fftpack import dct, idct 

# Lets create a 3D array and fill it with some values 
a = numpy.random.rand(3,3,3) 

f,x,y = a.shape 
b = np.zeros((f,x,y)) 

b = dct(dct(dct(a).transpose(0,2,1)).transpose(1,2,0)).transpose(1,2,0).transpose(0,2,1)