MATLAB Transformée Cosinus Inverse 2-D : Restaurer des images depuis les données de fréquence
La Transformée Cosinus Inverse, souvent notée ICT ou IDCT, est une opération mathématique qui inverse le processus de la Transformée Cosinus. Elle est particulièrement utile dans le traitement de signaux et d'images pour reconstruire des signaux ou images à partir de leurs représentations dans le domaine fréquentiel.
Dans le contexte de signaux ou images 2-D, la Transformée Cosinus Inverse 2-D (2-D ICT ou 2-D IDCT) convertit une matrice de coefficients de cosinus (représentant le contenu fréquentiel du signal ou de l'image) retour au domaine spatial, produisant le signal ou l'image original.
La Transformée Cosinus Inverse 2-D dans MATLAB est utilisée pour convertir une matrice de valeurs de cosinus en une image du domaine spatial. C'est l'opération inverse de la Transformée Cosinus 2-D et est couramment utilisée dans le traitement d'images et la compression. La fonction idct2 est utilisée pour effectuer la Transformée Cosinus Inverse 2-D dans MATLAB.
Transformée Cosinus Discrète Inverse 2-D
Dans MATLAB, la fonction idct2 est utilisée pour effectuer la Transformée Cosinus Inverse 2-D. Elle prend une matrice de coefficients de cosinus en entrée et retourne 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 Transformée Cosinus Inverse est cruciale dans diverses applications, incluant la compression d'images (par ex., dans la compression JPEG), la reconstruction d'images et les tâches de traitement de signaux où les signaux ou images doivent être transformés de retour à leur forme originale après manipulation dans le 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 Transformée Cosinus Discrète Inverse bidimensionnelle (IDCT) de la matrice A, retournant le résultat dans la matrice B. Cette opération reconstruit efficacement l'image du domaine spatial à partir de sa représentation dans le domaine fréquentiel dans A.
B = idct2(A, m,n) − calcule la Transformée Cosinus Discrète Inverse bidimensionnelle (IDCT) 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 dans le domaine fréquentiel dans A, la redimensionnant aux dimensions spécifiées m-par-n.
B = idct2(A, [m,n]) − calcule la Transformée Cosinus Discrète Inverse bidimensionnelle (IDCT) 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 dans le domaine fréquentiel dans A, la redimensionnant aux dimensions spécifiées [m n].
Voyons quelques exemples pour la transformée cosinus discrète inverse 2-D
Exemple 1 : Supprimer les hautes fréquences d'une image en utilisant la fonction idct2()
Le code que nous avons est −
img = imread('autumn.tif'); % Convertir en niveaux de gris si nécessaire if size(img, 3) == 3 img = rgb2gray(img); end % Calculer la 2-D DCT dct_img = dct2(double(img)); % Définir un seuil pour supprimer les hautes fréquences (ex., garder seulement les 50 premiers coefficients) threshold = 50; dct_img_thresh = dct_img; dct_img_thresh(threshold+1:end, :) = 0; dct_img_thresh(:, threshold+1:end) = 0; % Calculer l'inverse 2-D DCT pour obtenir l'image filtrée filtered_img = uint8(idct2(dct_img_thresh)); % Afficher les images originale et filtrée figure; subplot(1, 2, 1); imshow(img); title('Image Originale'); subplot(1, 2, 2); imshow(filtered_img); title('Image Filtrée');
Dans l'exemple −
- La fonction imread est utilisée pour lire l'image depuis un fichier ('autumn.tif' dans ce cas) et la stocker dans la variable img.
- Si l'image est une image couleur (c.-à-d., elle a trois canaux pour le rouge, vert et bleu), elle est convertie en niveaux de gris en utilisant la fonction rgb2gray. Cela est fait car la 2-D DCT est typiquement appliquée aux images en niveaux de gris.
- La fonction dct2 calcule la 2-D DCT 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 aux changements rapides des valeurs de pixels.
- Une valeur de seuil est choisie pour déterminer quels coefficients DCT garder et lesquels jeter. Dans cet exemple, nous choisissons de garder seulement 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 l'inverse 2-D DCT des coefficients DCT modifiés (dct_img_thresh). Cette opération reconstruit efficacement l'image du domaine spatial à partir de sa représentation dans le domaine fréquentiel. Le résultat est stocké dans filtered_img.
- Finalement, l'image originale et l'image filtrée sont affichées côte à côte en utilisant la fonction imshow. L'image originale est affichée à gauche, et l'image filtrée (avec les hautes fréquences supprimées) est affichée à droite.
À l'exécution, la sortie que nous obtenons est −
Exemple 2 : Redimensionner une image en utilisant B = idct2(A, m,n)
Le code que nous avons est −
% Lire l'image img = imread('autumn.tif'); % Convertir l'image en niveaux de gris if size(img, 3) == 3 img = rgb2gray(img); end % Calculer la 2-D DCT de l'image dct_img = dct2(double(img)); % Redimensionner la matrice des coefficients DCT (représentation domaine fréquentiel) à une taille plus petite % Redimensionnons-la à la moitié de la taille originale new_size = size(img) / 2; dct_resized = imresize(dct_img, new_size); % Calculer l'inverse 2-D DCT pour obtenir l'image redimensionnée resized_img = uint8(idct2(dct_resized, size(img, 1), size(img, 2))); % Afficher les images originale et redimensionnée subplot(1, 2, 1); imshow(img); title('Image Originale'); subplot(1, 2, 2); imshow(resized_img); title('Image Redimensionnée utilisant 2-D IDCT');
Dans l'exemple nous avons −
- La fonction imread est utilisée pour lire l'image depuis un fichier ('autumn.tif' dans ce cas) et la stocker dans la variable img.
- Si l'image est une image couleur (c.-à-d., elle a trois canaux pour le rouge, vert et bleu), elle est convertie en niveaux de gris en utilisant la fonction rgb2gray. Cette étape est importante car la 2-D DCT est typiquement appliquée aux images en niveaux de gris.
- La fonction dct2 calcule la 2-D DCT 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 est fait en utilisant la fonction imresize, en spécifiant la nouvelle taille comme la moitié de la taille originale (new_size = size(img) / 2). Cela réduit efficacement la représentation dans le domaine fréquentiel de l'image.
- La fonction idct2 calcule l'inverse 2-D DCT des coefficients DCT redimensionnés (dct_resized). Cette opération reconstruit efficacement l'image redimensionnée du domaine spatial à partir de sa représentation redimensionnée dans le domaine fréquentiel.
- Finalement, l'image originale et l'image redimensionnée sont affichées côte à côte en utilisant la fonction imshow. L'image originale est affichée à gauche, et l'image redimensionnée (obtenue en utilisant 2-D IDCT) est affichée à droite.
La sortie à l'exécution est −
Exemple 3 : Redimensionner une matrice en utilisant la Transformée Cosinus Discrète Inverse 2-D (IDCT)
Le code que nous avons est comme suit −
% Créer une matrice d'exemple A A = [ 10, 20, 30, 40; 50, 60, 70, 80; 90, 100, 110, 120; 130, 140, 150, 160 ]; % Afficher la matrice originale A disp('Matrice Originale A:'); disp(A); % Calculer la 2-D IDCT de A et la redimensionner à une matrice 3x2 B = idct2(A, [3, 2]); % Afficher la matrice redimensionnée B disp('Matrice Redimensionnée B (3x2):'); disp(B);
Dans cet exemple, nous créons une matrice d'exemple 4x4 A. Nous appliquons ensuite la 2-D IDCT à A et redimensionnons le résultat à une matrice 3x2 [m, n] = [3, 2]. La matrice redimensionnée B est affichée après la transformation.
La sortie que nous obtenons est comme suit −
Matrice Originale A: 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 Matrice Redimensionnée B (3x2): 122.0957 -11.9692 -97.4491 1.6910 12.0957 -1.9692
MATLAB
- Types de données MATLAB : Guide complet
- Simulink : l'outil avancé de simulation et de conception basée sur les modèles de MATLAB
- Maîtriser les structures de décision dans MATLAB : Guide complet
- Importation de données dans MATLAB : méthodes efficaces pour charger des fichiers externes
- Visualiser les expressions mathématiques dans MATLAB : Guide de tracé 2D et 3D
- Calcul des dérivées symboliques dans MATLAB avec la commande diff
- MATLAB : Maîtriser les tableaux multidimensionnels et spéciaux
- MATLAB Transformée Cosinus Inverse 2-D : Restaurer des images depuis les données de fréquence
- MATLAB : Filtre Laplacien de Gaussien pour la détection de contours