MATLAB 2-D Inverse Cosinustransformatie: Afbeeldingen Herstellen uit Frequentiegegevens
De Inverse Cosinustransformatie, vaak aangeduid als ICT of IDCT, is een wiskundige operatie die het proces van de Cosinustransformatie omkeert. Het is bijzonder nuttig in signaal- en beeldverwerking voor het reconstrueren van signalen of afbeeldingen uit hun frequentiedomeinvertegenwoordiging.
In de context van 2-D signalen of afbeeldingen, converteert de 2-D Inverse Cosinustransformatie (2-D ICT of 2-D IDCT) een matrix van cosinuscoëfficiënten (vertegenwoordigend de frequentie-inhoud van het signaal of de afbeelding) terug naar het ruimtelijke domein, wat het oorspronkelijke signaal of de afbeelding oplevert.
De 2-D Inverse Cosinustransformatie in MATLAB wordt gebruikt om een matrix van cosinuswaarden om te zetten in een ruimtelijke domeinafbeelding. Het is de inverse operatie van de 2-D Cosinustransformatie en wordt veel gebruikt in beeldverwerking en compressie. De idct2 functie wordt gebruikt om de 2-D Inverse Cosinustransformatie in MATLAB uit te voeren.
2-D Inverse Discrete Cosinustransformatie
In MATLAB wordt de idct2 functie gebruikt om de 2-D Inverse Cosinustransformatie uit te voeren. Het neemt een matrix van cosinuscoëfficiënten als invoer en retourneert de ruimtelijke domeinvertegenwoordiging van het signaal of de afbeelding. Het resultaat is een gereconstrueerde afbeelding die getoond of verder verwerkt kan worden.
De Inverse Cosinustransformatie is cruciaal in diverse toepassingen, waaronder beeldcompressie (bijv. in JPEG-compressie), beeldreconstructie, en signaalverwerkingstaken waar signalen of afbeeldingen na frequentiedomeinmanipulatie terug naar hun oorspronkelijke vorm getransformeerd moeten worden.
Syntaxis
B = idct2(A) B = idct2(A,m,n) B = idct2(A,[m n])
Syntaxis Uitleg
B = idct2(A)– Berekent de tweedimensionale Inverse Discrete Cosinustransformatie (IDCT) van matrix A, retourneert het resultaat in matrix B. Deze operatie herstelt effectief de ruimtelijke domeinafbeelding uit haar frequentiedomeinvertegenwoordiging in A.B = idct2(A, m,n)– berekent de tweedimensionale IDCT van matrix A en specificeert de grootte van de uitvoermatrix B als m-x-n. Deze operatie herstelt de ruimtelijke domeinafbeelding uit haar frequentiedomeinvertegenwoordiging in A, met herschaling naar de gespecificeerde afmetingen m-x-n.B = idct2(A, [m,n])– berekent de tweedimensionale IDCT van matrix A en past de uitvoermatrix B aan om m rijen en n kolommen te hebben. Deze operatie herstelt de ruimtelijke domeinafbeelding uit haar frequentiedomeinvertegenwoordiging in A, met herschaling naar de gespecificeerde afmetingen [m n].
Laten we een paar voorbeelden zien voor 2-D inverse discrete cosinustransformatie.
Voorbeeld 1: Hoge Frequenties uit Afbeelding Verwijderen met idct2() Functie
De code is:
img = imread('autumn.tif');
% Converteer naar grijswaarden indien nodig
if size(img, 3) == 3
img = rgb2gray(img);
end
% Bereken 2-D DCT
dct_img = dct2(double(img));
% Stel een drempel in om hoge frequenties te verwijderen (bijv. behoud alleen de eerste 50 coëfficiënten)
threshold = 50;
dct_img_thresh = dct_img;
dct_img_thresh(threshold+1:end, :) = 0;
dct_img_thresh(:, threshold+1:end) = 0;
% Bereken de inverse 2-D DCT om de gefilterde afbeelding te krijgen
filtered_img = uint8(idct2(dct_img_thresh));
% Toon de originele en gefilterde afbeeldingen
figure;
subplot(1, 2, 1); imshow(img); title('Originele Afbeelding');
subplot(1, 2, 2); imshow(filtered_img); title('Gefilterde Afbeelding');
In het voorbeeld:
- De imread functie leest de afbeelding uit een bestand ('autumn.tif' in dit geval) en slaat het op in de variabele img.
- Als de afbeelding een kleurenafbeelding is (d.w.z. drie kanalen voor rood, groen en blauw), wordt deze omgezet naar grijswaarden met de rgb2gray functie. Dit wordt gedaan omdat de 2-D DCT doorgaans toegepast wordt op grijswaardenafbeeldingen.
- De dct2 functie berekent de 2-D DCT van de afbeelding. Het resultaat wordt opgeslagen in de variabele dct_img. De DCT vertegenwoordigt de afbeelding in het frequentiedomein, waar hoge-frequentiecomponenten overeenkomen met snelle veranderingen in pixelwaarden.
- Een drempelwaarde wordt gekozen om te bepalen welke DCT-coëfficiënten te behouden en welke te verwerpen. In dit voorbeeld kiezen we om alleen de eerste 50 coëfficiënten te behouden (in een 256x256 afbeelding vertegenwoordigen deze coëfficiënten de laagste frequenties). De hoge-frequentiecoëfficiënten (die boven de drempel liggen) worden op nul gezet.
- De idct2 functie berekent de inverse 2-D DCT van de gewijzigde DCT-coëfficiënten (dct_img_thresh). Deze operatie herstelt effectief de ruimtelijke domeinafbeelding uit haar frequentiedomeinvertegenwoordiging. Het resultaat wordt opgeslagen in filtered_img.
- Ten slotte worden de originele afbeelding en de gefilterde afbeelding naast elkaar getoond met de imshow functie. De originele afbeelding wordt links getoond, en de gefilterde afbeelding (met hoge frequenties verwijderd) wordt rechts getoond.
Bij uitvoering is de uitvoer:
(originele en gefilterde afbeelding naast elkaar)
Voorbeeld 2: Afbeelding Herformateren met B = idct2(A, m,n)
De code is:
% Lees de afbeelding
img = imread('autumn.tif');
% Converteer de afbeelding naar grijswaarden
if size(img, 3) == 3
img = rgb2gray(img);
end
% Bereken de 2-D DCT van de afbeelding
dct_img = dct2(double(img));
% Herformateer de DCT-coëfficiëntenmatrix (frequentiedomeinvertegenwoordiging) naar een kleinere grootte
% Laten we het herformateren naar half de originele grootte
new_size = size(img) / 2;
dct_resized = imresize(dct_img, new_size);
% Bereken de inverse 2-D DCT om de geherformateerde afbeelding te krijgen
resized_img = uint8(idct2(dct_resized, size(img, 1), size(img, 2)));
% Toon de originele en geherformateerde afbeeldingen
subplot(1, 2, 1); imshow(img); title('Originele Afbeelding');
subplot(1, 2, 2); imshow(resized_img); title('Geherformateerde Afbeelding met 2-D IDCT');
In het voorbeeld:
- De imread functie leest de afbeelding uit een bestand ('autumn.tif') en slaat het op in de variabele img.
- Als de afbeelding een kleurenafbeelding is, wordt deze omgezet naar grijswaarden met rgb2gray. Deze stap is belangrijk omdat de 2-D DCT doorgaans toegepast wordt op grijswaardenafbeeldingen.
- De dct2 functie berekent de 2-D DCT van de afbeelding. Het resultaat wordt opgeslagen in dct_img. De DCT vertegenwoordigt de afbeelding in het frequentiedomein, waar verschillende frequenties van de afbeelding vertegenwoordigd worden door verschillende coëfficiënten.
- Om de afbeelding te herformateren, herformateren we de DCT-coëfficiëntenmatrix (dct_img) naar een kleinere grootte. Dit wordt gedaan met de imresize functie, met de nieuwe grootte specificerd als half de originele grootte (new_size = size(img) / 2). Dit vermindert effectief de frequentiedomeinvertegenwoordiging van de afbeelding.
- De idct2 functie berekent de inverse 2-D DCT van de geherformateerde DCT-coëfficiënten (dct_resized). Deze operatie herstelt effectief de geherformateerde ruimtelijke domeinafbeelding uit haar geherformateerde frequentiedomeinvertegenwoordiging.
- Ten slotte worden de originele afbeelding en de geherformateerde afbeelding naast elkaar getoond met imshow. De originele afbeelding links, en de geherformateerde afbeelding (verkregen met 2-D IDCT) rechts.
De uitvoer bij uitvoering is:
(originele en geherformateerde afbeelding naast elkaar)
Voorbeeld 3: Een Matrix Herformateren met 2-D Inverse Discrete Cosinustransformatie (IDCT)
De code is als volgt:
% Maak een voorbeeldmatrix A
A = [ 10, 20, 30, 40;
50, 60, 70, 80;
90, 100, 110, 120;
130, 140, 150, 160 ];
% Toon de originele matrix A
disp('Originele Matrix A:');
disp(A);
% Bereken de 2-D IDCT van A en herformateer naar een 3x2 matrix
B = idct2(A, [3, 2]);
% Toon de geherformateerde matrix B
disp('Geherformateerde Matrix B (3x2):');
disp(B);
In dit voorbeeld maken we een 4x4 voorbeeldmatrix A. We passen vervolgens de 2-D IDCT toe op A en herformateren het resultaat naar een 3x2 matrix [m, n] = [3, 2]. De geherformateerde matrix B wordt getoond na de transformatie.
De uitvoer is als volgt:
Originele Matrix A: 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 Geherformateerde Matrix B (3x2): 122.0957 -11.9692 -97.4491 1.6910 12.0957 -1.9692
MATLAB
- MATLAB voor Calculus: Limieten, Differentiaal & Integralen
- MATLAB Matrix Basis: Data Aanmaken, Benaderen en Manipuleren
- MATLAB Dubbele Punt Notatie: Vectors Maken & Efficiënt Itereren
- Geavanceerde MATLAB Grafieken: Staafdiagrammen, Contouren & 3D Plots
- MATLAB M-Bestanden: Scripts en Functies voor Krachtig Programmeren
- Polynomen in MATLAB: Representatie, Evaluatie & Curve Fitting
- MATLAB Transformaties: Laplace, Fourier en FFT
- Variabelen in MATLAB Begrijpen: Basis en Voorbeelden
- MATLAB Functies: Definitie, Werkruimte, In- en Outputs
- Essentiële MATLAB Commando's voor Efficiënte Berekening
- MATLAB OOP Beheersen: Robuuste, Herbruikbare Code Bouwen met Klassen en Objecten