Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Transformación coseno discreta

Definición de DCT

La transformación de coseno discreta (DCT) representa una imagen como una suma de sinusoides de diferentes magnitudes y frecuencias. La función calcula la transformación de coseno discreta bidimensional (DCT) de una imagen.dct2 El DCT tiene la propiedad que, para una imagen típica, la mayor parte de la información visualmente significativa sobre la imagen se concentra en sólo unos pocos coeficientes del DCT. Por esta razón, el DCT se utiliza a menudo en aplicaciones de compresión de imágenes. Por ejemplo, el DCT está en el corazón del algoritmo internacional de compresión de imágenes con pérdida estándar conocido como JPEG. (El nombre proviene del grupo de trabajo que desarrolló la norma: el Joint Photographic Experts Group.)

El DCT bidimensional de una matriz M por N se define de la siguiente manera.Un

Bpq=αpαqm=0M1n=0N1Amncosπ(2m+1)p2Mcosπ(2n+1)q2N,0pM10qN1αp={1/M,2/M,p=01pM1αq={1/N,2/N,q=01qN1

Los valores Bpq se llaman el de .Coeficientes DCTUn (Tenga en cuenta que los índices de matriz en siempre comienzan en 1 en lugar de 0; por lo tanto, los elementos de matriz y corresponden a las cantidades matemáticasMATLAB®MATLABA(1,1)B(1,1) A00 Y B00, respectivamente.)

El DCT es una transformación invertible, y su inversa es dada por

Amn=p=0M1q=0N1αpαqBpqcosπ(2m+1)p2Mcosπ(2n+1)q2N,0mM10nN1αp={1/M,2/M,p=01pM1αq={1/N,2/N,q=01qN1

La ecuación inversa dcT se puede interpretar en el sentido de que cualquier matriz M por N se puede escribir como una suma deUn MN funciones de la forma

αpαqcosπ(2m+1)p2Mcosπ(2n+1)q2N,   0pM10qN1

Estas funciones se denominan el DCT.funciones de base Los coeficientes DCT Bpq, entonces, puede considerarse como la aplicada a cada función base.Pesos Para 8 por 8 matrices, las 64 funciones base se ilustran con esta imagen.

Las 64 funciones de base de una matriz de 8 por 8

Las frecuencias horizontales aumentan de izquierda a derecha, y las frecuencias verticales aumentan de arriba a abajo. La función de base de valor constante en la parte superior izquierda a menudo se llama el , y el coeficiente DCT correspondienteFunción de base de CC B00 a menudo se llama el .Coeficiente de CC

La matriz de transformación DCT

Hay dos maneras de calcular el DCT mediante software.Image Processing Toolbox™ El primer método consiste en utilizar la función. utiliza un algoritmo basado en FFT para el cálculo rápido con entradas grandes.dct2dct2 El segundo método consiste en utilizar el DCT , que es devuelto por la función y podría ser más eficaz para entradas cuadradas pequeñas, como 8 por 8 o 16 por 16.transformar matrizdctmtx La matriz de transformación M-by-M es dada porT

Tpq={1M2Mcosπ(2q+1)p2Mp=0,1pM1,0qM10qM1

Para una matriz M por M, es una matriz M por M cuyas columnas contienen el DCT unidimensional de las columnas de .UnT*AUn El DCT bidimensional de se puede calcular como .UnB=T*A*T' Puesto que es una matriz ortonormal real, su inversa es la misma que su transposición.T Por lo tanto, el DCT bidimensional inverso de es dado por .BT'*B*T

Compresión de imagen con la transformación de coseno discreta

Este ejemplo muestra cómo comprimir una imagen usando la transformación discreta del coseno (DCT). En el ejemplo se calcula el DCT bidimensional de 8 por 8 bloques en una imagen de entrada, se descarta (establece en cero) todos menos 10 de los 64 coeficientes DCT en cada bloque y, a continuación, reconstruye la imagen utilizando el DCT inverso bidimensional de cada bloque. En el ejemplo se utiliza el método de cálculo de matriz de transformación.

DCT se utiliza en el algoritmo de compresión de imágenes JPEG. La imagen de entrada se divide en bloques de 8 por 8 o 16 por 16, y el DCT bidimensional se calcula para cada bloque. A continuación, se cuantifican, codifican y transmiten los coeficientes DCT. El receptor JPEG (o lector de archivos JPEG) decodifica los coeficientes DCT cuantificados, calcula el DCT bidimensional inverso de cada bloque y, a continuación, vuelve a unir los bloques en una sola imagen. Para las imágenes típicas, muchos de los coeficientes DCT tienen valores cercanos a cero. Estos coeficientes se pueden descartar sin afectar seriamente la calidad de la imagen reconstruida.

Lea una imagen en el espacio de trabajo y conviértala en clase .double

I = imread('cameraman.tif'); I = im2double(I);

Calcula el DCT bidimensional de 8 por 8 bloques en la imagen. La función devuelve la matriz de transformación N-por-N DCT.dctmtx

T = dctmtx(8); dct = @(block_struct) T * block_struct.data * T'; B = blockproc(I,[8 8],dct);

Deseche todos los coeficientes DCT excepto 10 en cada bloque.

mask = [1   1   1   1   0   0   0   0         1   1   1   0   0   0   0   0         1   1   0   0   0   0   0   0         1   0   0   0   0   0   0   0         0   0   0   0   0   0   0   0         0   0   0   0   0   0   0   0         0   0   0   0   0   0   0   0         0   0   0   0   0   0   0   0]; B2 = blockproc(B,[8 8],@(block_struct) mask .* block_struct.data);

Reconstruya la imagen utilizando el DCT inverso bidimensional de cada bloque.

invdct = @(block_struct) T' * block_struct.data * T; I2 = blockproc(B2,[8 8],invdct);

Muestre la imagen original y la imagen reconstruida, en paralelo. Aunque hay cierta pérdida de calidad en la imagen reconstruida, es claramente reconocible, a pesar de que casi el 85% de los coeficientes DCT fueron descartados.

imshow(I)

figure imshow(I2)