MATLAB 2-D Inverse Cosinus-Transformation:Bilder aus Frequenzdaten wiederherstellen
Die inverse Kosinustransformation, oft als ICT oder IDCT bezeichnet, ist eine mathematische Operation, die den Prozess der Kosinustransformation umkehrt. Es ist besonders nützlich in der Signal- und Bildverarbeitung, um Signale oder Bilder aus ihren Frequenzbereichsdarstellungen zu rekonstruieren.
Im Kontext von 2D-Signalen oder Bildern wandelt die 2D-Inverse-Kosinus-Transformation (2D-ICT oder 2D-IDCT) eine Matrix von Kosinuskoeffizienten (die den Frequenzinhalt des Signals oder Bildes darstellt) zurück in den räumlichen Bereich um und ergibt das ursprüngliche Signal oder Bild.
Die 2-D-Inverse-Kosinus-Transformation in MATLAB wird verwendet, um eine Matrix von Kosinuswerten in ein räumliches Domänenbild umzuwandeln. Es handelt sich um die Umkehroperation der 2D-Kosinustransformation und wird häufig in der Bildverarbeitung und -komprimierung verwendet. Die Funktion idct2 wird verwendet, um die zweidimensionale inverse Kosinustransformation in MATLAB durchzuführen.
2-D inverse diskrete Kosinustransformation
In MATLAB wird die Funktion idct2 verwendet, um die zweidimensionale inverse Kosinustransformation durchzuführen. Es verwendet eine Matrix von Kosinuskoeffizienten als Eingabe und gibt die räumliche Domänendarstellung des Signals oder Bildes zurück. Das Ergebnis ist ein rekonstruiertes Bild, das angezeigt oder weiterverarbeitet werden kann.
Die inverse Kosinustransformation ist in verschiedenen Anwendungen von entscheidender Bedeutung, einschließlich der Bildkomprimierung (z. B. bei der JPEG-Komprimierung), der Bildrekonstruktion und Signalverarbeitungsaufgaben, bei denen Signale oder Bilder nach der Frequenzbereichsmanipulation in ihre ursprüngliche Form zurücktransformiert werden müssen.
Syntax
B = idct2(A) B = idct2(A,m,n) B = idct2(A,[m n])
Syntaxerklärung
B =idct2(A) − Berechnet die zweidimensionale inverse diskrete Kosinustransformation (IDCT) der Matrix A und gibt das Ergebnis in Matrix B zurück. Diese Operation rekonstruiert effektiv das Raumdomänenbild aus seiner Frequenzdomänendarstellung in A.
B =idct2(A, m,n) − berechnet die zweidimensionale inverse diskrete Kosinustransformation (IDCT) der Matrix A und gibt die Größe der Ausgabematrix B als m-mal-n an. Diese Operation rekonstruiert effektiv das Raumdomänenbild aus seiner Frequenzdomänendarstellung in A und passt seine Größe auf die angegebenen Abmessungen m-mal-n an.
B =idct2(A, [m,n]) − berechnet die zweidimensionale inverse diskrete Kosinustransformation (IDCT) der Matrix A und ändert die Größe der Ausgabematrix B so, dass sie m Zeilen und n Spalten hat. Diese Operation rekonstruiert das Raumdomänenbild aus seiner Frequenzdomänendarstellung in A und passt seine Größe auf die angegebenen Abmessungen [m n] an.
Sehen wir uns einige Beispiele für die inverse diskrete 2D-Kosinustransformation an
Beispiel 1:So entfernen Sie hohe Frequenzen aus einem Bild mithilfe der Funktion idct2()
Der Code, den wir haben, ist −
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');
Im Beispiel −
- Die Funktion imread wird verwendet, um das Bild aus einer Datei (in diesem Fall „autumn.tif“) zu lesen und in der Variablen img zu speichern.
- Wenn das Bild ein Farbbild ist (d. h. es drei Kanäle für Rot, Grün und Blau hat), wird es mit der Funktion rgb2gray in Graustufen konvertiert. Dies geschieht, weil die 2D-DCT normalerweise auf Graustufenbilder angewendet wird.
- Die dct2-Funktion berechnet die 2D-DCT des Bildes. Das Ergebnis wird in der Variablen dct_img gespeichert. Die DCT stellt das Bild im Frequenzbereich dar, wobei Hochfrequenzkomponenten schnellen Änderungen der Pixelwerte entsprechen.
- Ein Schwellenwert wird ausgewählt, um zu bestimmen, welche DCT-Koeffizienten beibehalten und welche verworfen werden sollen. In diesem Beispiel behalten wir nur die ersten 50 Koeffizienten bei (in einem 256x256-Bild stellen diese Koeffizienten die niedrigsten Frequenzen dar). Die Hochfrequenzkoeffizienten (die über dem Schwellenwert liegen) werden auf Null gesetzt.
- Die Funktion idct2 berechnet die inverse 2D-DCT der modifizierten DCT-Koeffizienten (dct_img_thresh). Diese Operation rekonstruiert effektiv das Raumdomänenbild aus seiner Frequenzdomänendarstellung. Das Ergebnis wird in filtered_img. gespeichert
- Abschließend werden das Originalbild und das gefilterte Bild mithilfe der Imshow-Funktion nebeneinander angezeigt. Das Originalbild wird links angezeigt und das gefilterte Bild (ohne hohe Frequenzen) wird rechts angezeigt.
Bei der Ausführung erhalten wir die Ausgabe −
Beispiel 2:Bildgröße ändern mit B =idct2(A, m,n)
Der Code, den wir haben, ist −
% 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');
Im Beispiel haben wir −
- Die Funktion imread wird verwendet, um das Bild aus einer Datei (in diesem Fall „autumn.tif“) zu lesen und in der Variablen img zu speichern.
- Wenn das Bild ein Farbbild ist (d. h. es drei Kanäle für Rot, Grün und Blau hat), wird es mit der Funktion rgb2gray in Graustufen konvertiert. Dieser Schritt ist wichtig, da die 2D-DCT normalerweise auf Graustufenbilder angewendet wird.
- Die dct2-Funktion berechnet die 2D-DCT des Bildes. Das Ergebnis wird in der Variablen dct_img gespeichert. Die DCT stellt das Bild im Frequenzbereich dar, wobei unterschiedliche Frequenzen des Bildes durch unterschiedliche Koeffizienten dargestellt werden.
- Um die Größe des Bildes zu ändern, ändern wir die Größe der DCT-Koeffizientenmatrix (dct_img) auf eine kleinere Größe. Dies geschieht mit der Funktion imresize, die die neue Größe als die Hälfte der Originalgröße angibt (new_size =size(img) / 2). Dadurch wird die Frequenzbereichsdarstellung des Bildes effektiv reduziert.
- Die Funktion idct2 berechnet die inverse 2D-DCT der geänderten DCT-Koeffizienten (dct_resized). Dieser Vorgang rekonstruiert effektiv das in der Größe geänderte räumliche Domänenbild aus seiner in der Größe geänderten Frequenzdomänendarstellung.
- Abschließend werden das Originalbild und das in der Größe geänderte Bild mithilfe der Imshow-Funktion nebeneinander angezeigt. Das Originalbild wird auf der linken Seite und das verkleinerte Bild (erhalten mit 2D-IDCT) auf der rechten Seite angezeigt.
Die Ausgabe bei der Ausführung ist −
Beispiel 3:Größenänderung einer Matrix mithilfe der zweidimensionalen inversen diskreten Kosinustransformation (IDCT)
Der Code, den wir haben, ist wie folgt:−
% 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);
In diesem Beispiel erstellen wir eine 4x4-Beispielmatrix A. Anschließend wenden wir die 2D-IDCT auf A an und ändern die Größe des Ergebnisses auf eine 3x2-Matrix [m, n] =[3, 2]. Die geänderte Matrix B wird nach der Transformation angezeigt.
Die Ausgabe, die wir erhalten, ist wie folgt:−
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 - Schleifentypen
- MATLAB - Operatoren
- MATLAB - Datenausgabe
- MATLAB-Leitfaden:Effiziente Berechnung von Polynomableitungen
- MATLAB - Überblick
- MATLAB - Plotten
- Visualisieren Sie mathematische Ausdrücke in MATLAB:Leitfaden zum 2D- und 3D-Plotten
- MATLAB - Grundlegende Syntax
- MATLAB - Funktionen
- MATLAB - Variablen