2012-12-16 4 views
5

Ich möchte scipy DCT-II verwenden, da es bereits codiert und schnell ist. Betrachtet man die , scheint es, dass es die 1D-Implementierung ist. Ist es möglich, es so zu benutzen, um es als 3D-Implementierung zu verwenden? Ich bin mir nicht sicher über die Mathematik. Sind die 2D- und 3D-Implementierungen äquivalent dazu, das 2-fache oder 3-fache des 1D unter Verwendung verschiedener Dimensionen in der Berechnung zu multiplizieren?Verwenden Scyth DCT-II von Python zu tun 2D oder ND DCT

+1

Ich bin nicht sicher, Sie durch Multiplikation 2 oder 3 mal bedeuten. Aber in 2D zum Beispiel ist es äquivalent zum Anwenden der DCT auf die Spalten auf dem Ergebnis der DCT auf den Reihen. Dies ist eine direkte Äquivalenz von der DCT-Formulierung und erstreckt sich auf den N-dimensionalen Fall. – mmgp

+0

Ok! Es ist ziemlich genau das, was ich meinte. – macrocosme

Antwort

5

Grundsätzlich funktioniert das folgende den Trick:

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)