Algoritmo de compresión de imágenes JPEG;
Divida la imagen de entrada en pequeños bloques de 8*8 o 16*16 y luego comprima cada uno bloque pequeño Los bloques se someten a una transformación DCT (transformación de coseno discreta) bidimensional y los coeficientes transformados se cuantifican, codifican y transmiten;
El archivo JPEG decodifica los coeficientes DCT cuantificados y calcula el valor bidimensional Transformada DCT inversa de cada bloque. Finalmente, los bloques resultantes se empalman en una imagen completa. Después de la transformación DCT, se descartan aquellos coeficientes que están cerca de 0 y no afectan seriamente la reconstrucción de la imagen.
La característica de la transformación DCT es que la mayor parte de la energía de la imagen transformada se concentra en la esquina superior izquierda, porque la esquina inferior izquierda muestra los datos de baja frecuencia de la imagen original y la esquina inferior derecha La esquina refleja los datos de alta frecuencia de la imagen original. La energía de la imagen suele concentrarse en la parte de baja frecuencia.
Programa de ejemplo:
Función Jpeg
I = im read(' D:\MATLAB 7\toolbox\images\im demos\camera tor . TIF ' );
Esta imagen se encuentra en el directorio donde está instalado matlab. La imagen original es una imagen en escala de grises.
I = im2 double(I); Conversión del tipo de almacenamiento de imágenes
t = dctmtx(8); Matriz de transformación de coseno discreta
B=blkproc(I, [8 8], 'P1*x*P2', T, T ');
DCT transforma la imagen original.
máscara =[1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0 p>
p>
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 p>
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
B2=blkproc(B,[8 8],' P1 .*x', Mask);
Compresión de datos, descartando datos de alta frecuencia en la esquina inferior derecha
I2=blkproc(B2, [8 8], ' P1*x *P2 ', T ', T);
Realizar transformación DCT inversa para obtener una imagen comprimida.
imshow(I)
Título ("imagen original")
Imagen
imshow(I2)
Título("Imagen comprimida")