Main Content

dct

Transformada de coseno discreta

Descripción

ejemplo

y = dct(x) devuelve la transformada de coseno discreta unitaria del arreglo de entrada x. La salida y es del mismo tamaño que x. Si x tiene más de una dimensión, dct actúa a lo largo de la primera dimensión del arreglo con un tamaño mayor que 1.

y = dct(x,n) rellena de ceros o trunca la dimensión relevante de x a la longitud n antes de la transformación.

ejemplo

y = dct(x,n,dim) calcula la transformada a lo largo de la dimensión dim. Para introducir una dimensión y utilizar el valor predeterminado de n, defina el segundo argumento como vacío, [].

ejemplo

y = dct(___,'Type',dcttype) especifica el tipo de transformada de coseno discreta que calcular. Para obtener más detalles, consulte Transformada de coseno discreta. Esta opción puede combinarse con cualquiera de las sintaxis anteriores.

Ejemplos

contraer todo

Descubra cuántos coeficientes de la DCT representan el 99% de la energía de una secuencia.

x = (1:100) + 50*cos((1:100)*2*pi/40);
X = dct(x);
[XX,ind] = sort(abs(X),'descend');
i = 1;
while norm(X(ind(1:i)))/norm(X) < 0.99
   i = i + 1;
end
needed = i;

Reconstruya la señal y compárela con la señal original.

X(ind(needed+1:end)) = 0;
xx = idct(X);

plot([x;xx]')
legend('Original',['Reconstructed, N = ' int2str(needed)], ...
       'Location','SouthEast')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Reconstructed, N = 3.

Cargue un archivo que contenga las mediciones de profundidad de un molde utilizado para acuñar un centavo estadounidense. Los datos, tomados en el Instituto Nacional de Estándares y Tecnología, se muestrean en una malla de 128 por 128. Muestre los datos.

load penny

surf(P)
view(2)
colormap copper
shading interp
axis ij square off

Calcule la transformada de coseno discreta de los datos de imagen. Opere primero en las filas y después en las columnas.

Q = dct(P,[],1);
R = dct(Q,[],2);

Descubra qué fracción de coeficientes de la DCT contienen el 99,98% de la energía de la imagen.

X = R(:);

[~,ind] = sort(abs(X),'descend');
coeffs = 1;
while norm(X(ind(1:coeffs)))/norm(X) < 0.9998
   coeffs = coeffs + 1;
end
fprintf('%d of %d coefficients are sufficient\n',coeffs,numel(R))
3572 of 16384 coefficients are sufficient

Reconstruya la imagen utilizando solo los coeficientes necesarios.

R(abs(R) < abs(X(ind(coeffs)))) = 0;

S = idct(R,[],2);
T = idct(S,[],1);

Muestre la imagen reconstruida.

surf(T)
view(2)
shading interp
axis ij square off

Cargue un archivo que contenga las mediciones de profundidad de un molde utilizado para acuñar un centavo estadounidense. Los datos, tomados en el Instituto Nacional de Estándares y Tecnología, se muestrean en una malla de 128 por 128. Muestre los datos.

load penny

surf(P)
view(2)
colormap copper
shading interp
axis ij square off

Calcule la transformada de coseno discreta de los datos de imagen mediante la variante DCT-1. Opere primero en las filas y después en las columnas.

Q = dct(P,[],1,'Type',1);
R = dct(Q,[],2,'Type',1);

Invierta la transformada. Trunque la inversa de modo que cada dimensión de la imagen reconstruida tenga la mitad de la longitud de la original.

S = idct(R,size(P,2)/2,2,'Type',1);
T = idct(S,size(P,1)/2,1,'Type',1);

Invierta la transformada de nuevo. Rellene de ceros la inversa de modo que cada dimensión de la imagen reconstruida tenga el doble de la longitud de la original.

U = idct(R,size(P,2)*2,2,'Type',1);
V = idct(U,size(P,1)*2,1,'Type',1);

Muestre la imagen original y la reconstruida.

surf(V)
view(2)
shading interp
hold on

surf(P)
view(2)
shading interp

surf(T)
view(2)
shading interp
hold off
axis ij equal off

Argumentos de entrada

contraer todo

Arreglo de entrada, especificado como vector de valor real o complejo, matriz, arreglo N-D u objeto gpuArray.

Consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox) y GPU Computing Requirements (Parallel Computing Toolbox) para obtener más información acerca de los objetos gpuArray (Parallel Computing Toolbox).

Ejemplo: sin(2*pi*(0:255)/4) especifica una sinusoide como un vector fila.

Ejemplo: sin(2*pi*[0.1;0.3]*(0:39))' especifica una sinusoide de dos canales.

Tipos de datos: single | double
Soporte de números complejos:

Longitud de la transformada, especificada como escalar entero positivo.

Tipos de datos: single | double

Dimensión sobre la que se desea operar, especificada como escalar entero positivo.

Tipos de datos: single | double

Tipo de transformada de coseno discreta, especificado como escalar entero positivo de 1 a 4. Consulte Transformada de coseno discreta para encontrar las definiciones de los diferentes tipos de DCT.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Transformada de coseno discreta, especificada como un vector de valor real o complejo, una matriz, un arreglo N-D o un objeto gpuArray.

Más acerca de

contraer todo

Transformada de coseno discreta

La transformada de coseno discreta (DCT, por sus siglas en inglés) está estrechamente relacionada con la transformada de Fourier discreta. A menudo puede reconstruir una secuencia de forma muy precisa con solo unos pocos coeficientes de la DCT. Esta propiedad resulta útil para aplicaciones que requieren reducir datos.

La DCT tiene cuatro variantes estándar. En una señal x de longitud N y con δkℓ (la delta de Kronecker), las transformadas se definen mediante:

  • DCT-1:

    y(k)=2N1n=1Nx(n)11+δn1+δnN11+δk1+δkNcos(πN1(n1)(k1))

  • DCT-2:

    y(k)=2Nn=1Nx(n)11+δk1cos(π2N(2n1)(k1))

  • DCT-3:

    y(k)=2Nn=1Nx(n)11+δn1cos(π2N(n1)(2k1))

  • DCT-4:

    y(k)=2Nn=1Nx(n)cos(π4N(2n1)(2k1))

Las series se indexan desde n = 1 y k = 1 en lugar de n = 0 y k = 0, como es habitual, porque los vectores de MATLAB® van desde 1 hasta N en lugar de desde 0 hasta N – 1.

Todas las variantes de la DCT son unitarias (o, de forma equivalente, ortogonales): Para encontrar sus inversas, intercambie k y n en cada definición. DCT-1 y DCT-4 son sus propias inversas. DCT-2 y DCT-3 son inversas entre sí.

Referencias

[1] Jain, A. K. Fundamentals of Digital Image Processing. Englewood Cliffs, NJ: Prentice-Hall, 1989.

[2] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

[3] Pennebaker, W. B., and J. L. Mitchell. JPEG Still Image Data Compression Standard. New York: Van Nostrand Reinhold, 1993.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a

Consulte también

| | (Image Processing Toolbox) | (Image Processing Toolbox)