Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> MATLAB

MATLAB 2D Inverse Cosinus Transform:herstel afbeeldingen van frequentiegegevens

De inverse cosinustransformatie, vaak aangeduid als ICT of IDCT, is een wiskundige bewerking die het proces van de cosinustransformatie omkeert. Het is vooral nuttig bij signaal- en beeldverwerking voor het reconstrueren van signalen of afbeeldingen op basis van hun frequentiedomeinrepresentaties.

In de context van 2D-signalen of afbeeldingen converteert de 2D Inverse Cosinus Transformatie (2D ICT of 2D IDCT) een matrix van cosinuscoëfficiënten (die de frequentie-inhoud van het signaal of beeld vertegenwoordigen) terug naar het ruimtelijke domein, waardoor het oorspronkelijke signaal of beeld ontstaat.

De 2D-inverse cosinustransformatie in MATLAB wordt gebruikt om een matrix van cosinuswaarden om te zetten in een ruimtelijk domeinbeeld. Het is de omgekeerde werking van de 2D-cosinustransformatie en wordt vaak gebruikt bij beeldverwerking en compressie. De idct2-functie wordt gebruikt om de 2D-inverse cosinustransformatie in MATLAB uit te voeren.

2-D inverse discrete cosinustransformatie

In MATLAB wordt de idct2-functie gebruikt om de 2D-inverse cosinustransformatie uit te voeren. Het neemt een matrix van cosinuscoëfficiënten als invoer en retourneert de ruimtelijke domeinrepresentatie van het signaal of beeld. Het resultaat is een gereconstrueerd beeld dat kan worden weergegeven of verder kan worden verwerkt.

De Inverse Cosinus Transformatie is cruciaal in verschillende toepassingen, waaronder beeldcompressie (bijvoorbeeld bij JPEG-compressie), beeldreconstructie en signaalverwerkingstaken waarbij signalen of afbeeldingen na manipulatie van het frequentiedomein terug naar hun oorspronkelijke vorm moeten worden getransformeerd.

Syntaxis

B = idct2(A)
B = idct2(A,m,n)
B = idct2(A,[m n])

Syntaxisuitleg

B =idct2(A) − Berekent de tweedimensionale Inverse Discrete Cosinus Transformatie (IDCT) van matrix A, waarbij het resultaat in matrix B wordt geretourneerd. Deze bewerking reconstrueert effectief het ruimtelijke domeinbeeld op basis van de representatie van het frequentiedomein in A.

B =idct2(A, m,n) − berekent de tweedimensionale Inverse Discrete Cosinus Transformatie (IDCT) van matrix A en specificeert de grootte van de uitvoermatrix B als m-bij-n. Deze bewerking reconstrueert effectief het ruimtelijke domeinbeeld op basis van de representatie van het frequentiedomein in A, waarbij het formaat wordt gewijzigd naar de gespecificeerde afmetingen m-bij-n.

B =idct2(A, [m,n]) - berekent de tweedimensionale Inverse Discrete Cosinus Transformatie (IDCT) van matrix A en past de grootte van de uitvoermatrix B aan zodat deze m rijen en n kolommen bevat. Deze bewerking reconstrueert het ruimtelijke domeinbeeld op basis van de representatie van het frequentiedomein in A, waarbij het formaat wordt aangepast naar de opgegeven afmetingen [m n].

Laten we enkele voorbeelden bekijken van 2D-inverse discrete cosinustransformatie

Voorbeeld 1:hoge frequenties uit afbeeldingen verwijderen met de functie idct2()

De code die we hebben is −

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');

In het voorbeeld −

  • De imread-functie wordt gebruikt om de afbeelding uit een bestand (in dit geval 'autumn.tif') te lezen en op te slaan in de variabele img.
  • Als de afbeelding een kleurenafbeelding is (d.w.z. drie kanalen heeft voor rood, groen en blauw), wordt deze geconverteerd naar grijstinten met behulp van de rgb2gray-functie. Dit wordt gedaan omdat 2D DCT doorgaans wordt toegepast op grijswaardenafbeeldingen.
  • De dct2-functie berekent de 2D DCT van de afbeelding. Het resultaat wordt opgeslagen in de variabele dct_img. De DCT vertegenwoordigt het beeld in het frequentiedomein, waar hoogfrequente componenten overeenkomen met snelle veranderingen in pixelwaarden.
  • Er wordt een drempelwaarde gekozen om te bepalen welke DCT-coëfficiënten moeten worden behouden en welke moeten worden weggegooid. In dit voorbeeld kiezen we ervoor om alleen de eerste 50 coëfficiënten te behouden (in een afbeelding van 256x256 vertegenwoordigen deze coëfficiënten de laagste frequenties). De hoogfrequente coëfficiënten (die boven de drempelwaarde) worden op nul gezet.
  • De idct2-functie berekent de inverse 2-D DCT van de gewijzigde DCT-coëfficiënten (dct_img_thresh). Deze bewerking reconstrueert effectief het ruimtelijke domeinbeeld vanuit zijn frequentiedomeinrepresentatie. Het resultaat wordt opgeslagen in filtered_img.
  • Ten slotte worden de originele afbeelding en de gefilterde afbeelding naast elkaar weergegeven met behulp van de imshow-functie. De originele afbeelding wordt aan de linkerkant weergegeven en de gefilterde afbeelding (waarbij de hoge frequenties zijn verwijderd) wordt aan de rechterkant weergegeven.

Bij uitvoering is de uitvoer die we krijgen −

Voorbeeld 2:formaat van afbeelding wijzigen met B =idct2(A, m,n)

De code die we hebben is −

% 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');

In het voorbeeld hebben we −

  • De imread-functie wordt gebruikt om de afbeelding uit een bestand (in dit geval 'autumn.tif') te lezen en op te slaan in de variabele img.
  • Als de afbeelding een kleurenafbeelding is (d.w.z. drie kanalen heeft voor rood, groen en blauw), wordt deze geconverteerd naar grijstinten met behulp van de rgb2gray-functie. Deze stap is belangrijk omdat 2D DCT doorgaans wordt toegepast op grijswaardenafbeeldingen.
  • De dct2-functie berekent de 2D DCT van de afbeelding. Het resultaat wordt opgeslagen in de variabele dct_img. De DCT vertegenwoordigt het beeld in het frequentiedomein, waarbij verschillende frequenties van het beeld worden weergegeven door verschillende coëfficiënten.
  • Om het formaat van de afbeelding te wijzigen, passen we de DCT-coëfficiëntenmatrix (dct_img) aan naar een kleiner formaat. Dit wordt gedaan met behulp van de imresize-functie, waarbij de nieuwe grootte wordt opgegeven als de helft van de oorspronkelijke grootte (new_size =size(img) / 2). Dit vermindert effectief de frequentiedomeinrepresentatie van de afbeelding.
  • De idct2-functie berekent de inverse 2-D DCT van de gewijzigde DCT-coëfficiënten (dct_resized). Deze bewerking reconstrueert op effectieve wijze het verkleinde ruimtelijke domeinbeeld op basis van de verkleinde representatie van het frequentiedomein.
  • Ten slotte worden de originele afbeelding en de gewijzigde afbeelding naast elkaar weergegeven met behulp van de imshow-functie. De originele afbeelding wordt links weergegeven en de afbeelding met gewijzigd formaat (verkregen met 2D IDCT) wordt rechts weergegeven.

De uitvoer bij uitvoering is −

Voorbeeld 3:De grootte van een matrix wijzigen met behulp van 2D Inverse Discrete Cosinus Transform (IDCT)

De code die we hebben is als volgt −

% 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 dit voorbeeld maken we een 4x4 voorbeeldmatrix A. Vervolgens passen we de 2D IDCT toe op A en passen we het resultaat aan naar een 3x2 matrix [m, n] =[3, 2]. De gewijzigde matrix B wordt na de transformatie weergegeven.

De uitvoer die we krijgen is als volgt −

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

  1. MATLAB - Gegevens importeren
  2. MATLAB - Calculus
  3. MATLAB - Veeltermen
  4. Visualiseer wiskundige uitdrukkingen in MATLAB:2D- en 3D-plotgids
  5. MATLAB - GNU Octave-zelfstudie
  6. MATLAB - Differentieel
  7. MATLAB - Gegevenstypen
  8. MATLAB - Grafisch
  9. MATLAB - Looptypes
  10. MATLAB - Plotten
  11. MATLAB - Algebra