2011-08-18 19 views
8

Quiero aplicar una Transformada de Coseno Discreta (así como la inversa) a una imagen en Python y me pregunto cuál es la mejor manera de hacerlo y cómo. He visto PIL y OpenCV, pero sigo sin entender cómo usarlo.¿Cómo aplico un DCT a una imagen en Python?

+0

No estoy seguro exactamente sobre PIL y OpenCV, pero la aplicación tanto de DCT como de DCT inversa consiste básicamente en multiplicar el bloque fuente por las matrices de transformación relacionadas. – agibalov

Respuesta

7

De OpenCV:

 
DCT(src, dst, flags) → None 

    Performs a forward or inverse Discrete Cosine transform of a 1D or 2D 
    floating-point array. 

    Parameters: 

     src (CvArr) – Source array, real 1D or 2D array 
     dst (CvArr) – Destination array of the same size and same type as the source 
     flags (int) – 

     Transformation flags, a combination of the following values 
      CV_DXT_FORWARD do a forward 1D or 2D transform. 
      CV_DXT_INVERSE do an inverse 1D or 2D transform. 
      CV_DXT_ROWS do a forward or inverse transform of every individual row of 
the input matrix. This flag allows user to transform multiple vectors simultaneously 
and can be used to decrease the overhead (which is sometimes several times larger 
than the processing itself), to do 3D and higher-dimensional transforms and so forth. 

Here is an example of it being used.

El DCT también está disponible en scipy.fftpack.

+0

¿Podría proporcionar un programa básico para mostrar su uso? Python parece quejarse de que mi matriz de destino está vacía. – jmnwong

+0

¿reformastete la matriz de destino para que fuera del tamaño correcto? – agf

+0

Esencialmente, lo que he hecho es usar PIL para cambiar el tamaño de una imagen de entrada y luego usé cv.CreateImageHeader para crear la fuente así como una matriz de destino vacía. No estoy seguro si esto es correcto. – jmnwong

Cuestiones relacionadas