Transformation cosinus inverse MATLAB 2D :restaurer des images à partir de données de fréquence
La transformation cosinus inverse, souvent désignée par ICT ou IDCT, est une opération mathématique qui inverse le processus de transformation cosinus. Il est particulièrement utile dans le traitement du signal et de l'image pour reconstruire des signaux ou des images à partir de leurs représentations dans le domaine fréquentiel.
Dans le contexte de signaux ou d'images 2D, la transformation cosinus inverse 2D (TIC 2D ou IDCT 2D) convertit une matrice de coefficients cosinus (représentant le contenu fréquentiel du signal ou de l'image) dans le domaine spatial, produisant le signal ou l'image d'origine.
La transformation cosinus inverse 2D dans MATLAB est utilisée pour convertir une matrice de valeurs cosinus en une image de domaine spatial. Il s’agit de l’opération inverse de la transformation cosinus 2D et est couramment utilisée dans le traitement et la compression d’images. La fonction idct2 est utilisée pour effectuer la transformation cosinus inverse 2D dans MATLAB.
Transformation en cosinus discrète inverse 2D
Dans MATLAB, la fonction idct2 est utilisée pour effectuer la transformation cosinus inverse 2D. Il prend une matrice de coefficients cosinus en entrée et renvoie la représentation du domaine spatial du signal ou de l'image. Le résultat est une image reconstruite qui peut être affichée ou traitée davantage.
La transformation cosinus inverse est cruciale dans diverses applications, notamment la compression d'images (par exemple, dans la compression JPEG), la reconstruction d'images et les tâches de traitement du signal où les signaux ou les images doivent être retransformés à leur forme originale après une manipulation du domaine fréquentiel.
Syntaxe
B = idct2(A) B = idct2(A,m,n) B = idct2(A,[m n])
Explication de la syntaxe
B =idct2(A) - Calcule la transformation cosinus discrète inverse (IDCT) bidimensionnelle de la matrice A, renvoyant le résultat dans la matrice B. Cette opération reconstruit efficacement l'image du domaine spatial à partir de sa représentation du domaine fréquentiel dans A.
B =idct2 (A, m, n) - calcule la transformation cosinus discrète inverse (IDCT) bidimensionnelle de la matrice A et spécifie la taille de la matrice de sortie B comme m par n. Cette opération reconstruit efficacement l'image du domaine spatial à partir de sa représentation du domaine fréquentiel dans A, en la redimensionnant aux dimensions spécifiées m-by-n.
B =idct2(A, [m,n]) - calcule la transformation cosinus discrète inverse (IDCT) bidimensionnelle de la matrice A et redimensionne la matrice de sortie B pour avoir m lignes et n colonnes. Cette opération reconstruit l'image du domaine spatial à partir de sa représentation du domaine fréquentiel dans A, en la redimensionnant aux dimensions spécifiées [mn].
Voyons quelques exemples de transformation en cosinus discrète inverse 2D
Exemple 1 :Pour supprimer les hautes fréquences d'une image à l'aide de la fonction idct2()
Le code que nous avons est −
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');
Dans l'exemple −
- La fonction imread permet de lire l'image depuis un fichier ('autumn.tif' dans ce cas) et de la stocker dans la variable img.
- Si l'image est une image couleur (c'est-à-dire qu'elle comporte trois canaux pour le rouge, le vert et le bleu), elle est convertie en niveaux de gris à l'aide de la fonction rgb2gray. Cela est dû au fait que la DCT 2D est généralement appliquée aux images en niveaux de gris.
- La fonction dct2 calcule la DCT 2D de l'image. Le résultat est stocké dans la variable dct_img. La DCT représente l'image dans le domaine fréquentiel, où les composantes haute fréquence correspondent à des changements rapides dans les valeurs des pixels.
- Une valeur seuil est choisie pour déterminer les coefficients DCT à conserver et ceux à ignorer. Dans cet exemple, nous choisissons de conserver uniquement les 50 premiers coefficients (dans une image 256x256, ces coefficients représentent les fréquences les plus basses). Les coefficients haute fréquence (ceux au-delà du seuil) sont mis à zéro.
- La fonction idct2 calcule la DCT 2D inverse des coefficients DCT modifiés (dct_img_thresh). Cette opération reconstruit efficacement l'image du domaine spatial à partir de sa représentation du domaine fréquentiel. Le résultat est stocké dans filtered_img.
- Enfin, l'image originale et l'image filtrée sont affichées côte à côte à l'aide de la fonction imshow. L'image originale est affichée à gauche et l'image filtrée (sans les hautes fréquences supprimées) est affichée à droite.
Lors de l'exécution, le résultat que nous obtenons est −
Exemple 2 :Redimensionner l'image en utilisant B =idct2(A, m,n)
Le code que nous avons est −
% 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');
Dans l'exemple nous avons −
- La fonction imread permet de lire l'image depuis un fichier ('autumn.tif' dans ce cas) et de la stocker dans la variable img.
- Si l'image est une image couleur (c'est-à-dire qu'elle comporte trois canaux pour le rouge, le vert et le bleu), elle est convertie en niveaux de gris à l'aide de la fonction rgb2gray. Cette étape est importante car la DCT 2D est généralement appliquée aux images en niveaux de gris.
- La fonction dct2 calcule la DCT 2D de l'image. Le résultat est stocké dans la variable dct_img. La DCT représente l'image dans le domaine fréquentiel, où différentes fréquences de l'image sont représentées par différents coefficients.
- Pour redimensionner l'image, nous redimensionnons la matrice des coefficients DCT (dct_img) à une taille plus petite. Cela se fait à l'aide de la fonction imresize, spécifiant la nouvelle taille à la moitié de la taille d'origine (new_size =size(img) / 2). Cela réduit efficacement la représentation du domaine fréquentiel de l'image.
- La fonction idct2 calcule la DCT 2D inverse des coefficients DCT redimensionnés (dct_resized). Cette opération reconstruit efficacement l'image du domaine spatial redimensionnée à partir de sa représentation du domaine fréquentiel redimensionnée.
- Enfin, l'image originale et l'image redimensionnée sont affichées côte à côte à l'aide de la fonction imshow. L'image originale est affichée à gauche et l'image redimensionnée (obtenue à l'aide de 2-D IDCT) est affichée à droite.
Le résultat lors de l'exécution est −
Exemple 3 :Redimensionnement d'une matrice à l'aide de la transformation en cosinus discrète inverse (IDCT) 2D
Le code que nous avons est le suivant −
% 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);
Dans cet exemple, nous créons une matrice d'échantillon 4x4 A. Nous appliquons ensuite l'IDCT 2D à A et redimensionnons le résultat en une matrice 3x2 [m, n] =[3, 2]. La matrice B redimensionnée s'affiche après la transformation.
Le résultat que nous obtenons est le suivant −
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
- Guide MATLAB :Calculer efficacement les dérivées polynomiales
- MATLAB - Chiffres
- Maîtriser les valeurs propres et les vecteurs propres dans MATLAB :un guide pratique
- MATLAB :filtre laplacien de gaussien pour la détection des bords
- MATLAB - Chaînes
- MATLAB - Vecteurs
- MATLAB - M-Files
- Visualisez des expressions mathématiques dans MATLAB :guide de traçage 2D et 3D
- MATLAB - Importation de données