Transformación de coseno inversa 2-D de MATLAB:restauración de imágenes a partir de datos de frecuencia
La Transformada Inversa del Coseno, a menudo denominada ICT o IDCT, es una operación matemática que invierte el proceso de la Transformada del Coseno. Es particularmente útil en el procesamiento de señales e imágenes para reconstruir señales o imágenes a partir de sus representaciones en el dominio de la frecuencia.
En el contexto de señales o imágenes 2D, la transformada de coseno inversa 2D (TIC 2D o IDCT 2D) convierte una matriz de coeficientes de coseno (que representan el contenido de frecuencia de la señal o imagen) al dominio espacial, produciendo la señal o imagen original.
La transformada de coseno inversa 2-D en MATLAB se utiliza para convertir una matriz de valores de coseno en una imagen de dominio espacial. Es la operación inversa de la Transformada Coseno 2-D y se usa comúnmente en el procesamiento y compresión de imágenes. La función idct2 se utiliza para realizar la transformación de coseno inverso 2-D en MATLAB.
Transformada de coseno discreta inversa 2-D
En MATLAB, la función idct2 se utiliza para realizar la transformada de coseno inversa 2-D. Toma una matriz de coeficientes cosenos como entrada y devuelve la representación en el dominio espacial de la señal o imagen. El resultado es una imagen reconstruida que se puede mostrar o procesar más.
La transformada del coseno inverso es crucial en diversas aplicaciones, incluida la compresión de imágenes (por ejemplo, en la compresión JPEG), la reconstrucción de imágenes y las tareas de procesamiento de señales en las que las señales o imágenes deben transformarse nuevamente a su forma original después de la manipulación en el dominio de la frecuencia.
Sintaxis
B = idct2(A) B = idct2(A,m,n) B = idct2(A,[m n])
Explicación de sintaxis
B =idct2(A) - Calcula la transformada de coseno discreta inversa (IDCT) bidimensional de la matriz A, devolviendo el resultado en la matriz B. Esta operación reconstruye efectivamente la imagen del dominio espacial a partir de su representación en el dominio de frecuencia en A.
B =idct2(A, m,n) - calcula la transformada de coseno discreta inversa (IDCT) bidimensional de la matriz A y especifica el tamaño de la matriz de salida B como m por n. Esta operación reconstruye efectivamente la imagen del dominio espacial a partir de su representación en el dominio de frecuencia en A, redimensionándola a las dimensiones especificadas m por n.
B =idct2(A, [m,n]) - calcula la transformada de coseno discreta inversa (IDCT) bidimensional de la matriz A y cambia el tamaño de la matriz de salida B para que tenga m filas yn columnas. Esta operación reconstruye la imagen en el dominio espacial a partir de su representación en el dominio de frecuencia en A, redimensionándola a las dimensiones especificadas [m n].
Veamos algunos ejemplos de transformada de coseno discreta inversa 2-D
Ejemplo 1:Para eliminar frecuencias altas de una imagen usando la función idct2()
El código que tenemos es −
img = imread('autumn.tif');
% Convert to grayscale if necessary
if size(img, 3) == 3
img = rgb2gray(img);
end
% Compute 2-D DCT
dct_img = dct2(double(img));
% Set a threshold to remove high frequencies (e.g., keep only the first 50 coefficients)
threshold = 50;
dct_img_thresh = dct_img;
dct_img_thresh(threshold+1:end, :) = 0;
dct_img_thresh(:, threshold+1:end) = 0;
% Compute the inverse 2-D DCT to get the filtered image
filtered_img = uint8(idct2(dct_img_thresh));
% Display the original and filtered images
figure;
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(filtered_img);
title('Filtered Image');
En el ejemplo −
- La función imread se utiliza para leer la imagen de un archivo ('otoño.tif' en este caso) y almacenarla en la variable img.
- Si la imagen es en color (es decir, tiene tres canales para rojo, verde y azul), se convierte a escala de grises usando la función rgb2gray. Esto se hace porque la DCT 2-D normalmente se aplica a imágenes en escala de grises.
- La función dct2 calcula la DCT 2-D de la imagen. El resultado se almacena en la variable dct_img. La DCT representa la imagen en el dominio de la frecuencia, donde los componentes de alta frecuencia corresponden a cambios rápidos en los valores de los píxeles.
- Se elige un valor umbral para determinar qué coeficientes DCT conservar y cuáles descartar. En este ejemplo, elegimos mantener solo los primeros 50 coeficientes (en una imagen de 256x256, estos coeficientes representan las frecuencias más bajas). Los coeficientes de alta frecuencia (aquellos que están más allá del umbral) se establecen en cero.
- La función idct2 calcula la DCT 2-D inversa de los coeficientes DCT modificados (dct_img_thresh). Esta operación reconstruye efectivamente la imagen del dominio espacial a partir de su representación en el dominio de frecuencia. El resultado se almacena en filtered_img.
- Finalmente, la imagen original y la imagen filtrada se muestran una al lado de la otra usando la función imshow. La imagen original se muestra a la izquierda y la imagen filtrada (sin las altas frecuencias) se muestra a la derecha.
Al ejecutar, el resultado que obtenemos es −
Ejemplo 2:Cambiar el tamaño de la imagen usando B =idct2(A, m,n)
El código que tenemos es −
% Read the image
img = imread('autumn.tif');
% Convert the image to grayscale
if size(img, 3) == 3
img = rgb2gray(img);
end
% Compute the 2-D DCT of the image
dct_img = dct2(double(img));
% Resize the DCT coefficients matrix (frequency domain representation) to a smaller size
% Let's resize it to half the original size
new_size = size(img) / 2;
dct_resized = imresize(dct_img, new_size);
% Compute the inverse 2-D DCT to get the resized image
resized_img = uint8(idct2(dct_resized, size(img, 1), size(img, 2)));
% Display the original and resized images
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(resized_img);
title('Resized Image using 2-D IDCT');
En el ejemplo tenemos −
- La función imread se utiliza para leer la imagen de un archivo ('otoño.tif' en este caso) y almacenarla en la variable img.
- Si la imagen es en color (es decir, tiene tres canales para rojo, verde y azul), se convierte a escala de grises usando la función rgb2gray. Este paso es importante porque la DCT 2D normalmente se aplica a imágenes en escala de grises.
- La función dct2 calcula la DCT 2-D de la imagen. El resultado se almacena en la variable dct_img. La DCT representa la imagen en el dominio de la frecuencia, donde diferentes frecuencias de la imagen están representadas por diferentes coeficientes.
- Para cambiar el tamaño de la imagen, cambiamos el tamaño de la matriz de coeficientes DCT (dct_img) a un tamaño más pequeño. Esto se hace usando la función imresize, especificando el nuevo tamaño como la mitad del tamaño original (new_size =size(img) / 2). Esto reduce efectivamente la representación en el dominio de frecuencia de la imagen.
- La función idct2 calcula la DCT 2-D inversa de los coeficientes DCT redimensionados (dct_resized). Esta operación reconstruye efectivamente la imagen del dominio espacial redimensionada a partir de su representación del dominio de frecuencia redimensionada.
- Finalmente, la imagen original y la imagen redimensionada se muestran una al lado de la otra usando la función imshow. La imagen original se muestra a la izquierda y la imagen redimensionada (obtenida mediante IDCT 2-D) se muestra a la derecha.
El resultado de la ejecución es −
Ejemplo 3:cambiar el tamaño de una matriz utilizando la transformada de coseno discreta inversa (IDCT) 2-D
El código que tenemos es el siguiente:
% Create a sample matrix A
A = [
10, 20, 30, 40;
50, 60, 70, 80;
90, 100, 110, 120;
130, 140, 150, 160
];
% Display the original matrix A
disp('Original Matrix A:');
disp(A);
% Compute the 2-D IDCT of A and resize it to a 3x2 matrix
B = idct2(A, [3, 2]);
% Display the resized matrix B
disp('Resized Matrix B (3x2):');
disp(B);
En este ejemplo, creamos una matriz de muestra A de 4x4. Luego aplicamos la IDCT 2-D a A y redimensionamos el resultado a una matriz de 3x2 [m, n] =[3, 2]. La matriz B redimensionada se muestra después de la transformación.
El resultado que obtenemos es el siguiente:
Original Matrix A: 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 Resized Matrix B (3x2): 122.0957 -11.9692 -97.4491 1.6910 12.0957 -1.9692
MATLAB
- MATLAB - Comandos
- Guía MATLAB:Calcular derivadas polinómicas de forma eficiente
- MATLAB - Diferencial
- MATLAB-Números
- MATLAB - Toma de decisiones
- MATLAB - Transformaciones
- MATLAB:filtro laplaciano de gaussiano para detección de bordes
- MATLAB - Configuración del entorno
- MATLAB-Gráficos
- MATLAB - Integración
- MATLAB - Polinomios