MATLAB - 二維逆餘弦變換



逆餘弦變換,通常表示為 ICT 或 IDCT,是一種數學運算,它反轉餘弦變換的過程。它在訊號和影像處理中特別有用,用於從其頻域表示中重建訊號或影像。

在二維訊號或影像的上下文中,二維逆餘弦變換(二維 ICT 或二維 IDCT)將餘弦係數矩陣(表示訊號或影像的頻率內容)轉換回空間域,從而產生原始訊號或影像。

MATLAB 中的二維逆餘弦變換用於將餘弦值矩陣轉換為空間域影像。它是二維餘弦變換的逆運算,通常用於影像處理和壓縮。idct2 函式用於在 MATLAB 中執行二維逆餘弦變換。

二維逆離散餘弦變換

在 MATLAB 中,idct2 函式用於執行二維逆餘弦變換。它以餘弦係數矩陣作為輸入,並返回訊號或影像的空間域表示。結果是可顯示或進一步處理的重建影像。

逆餘弦變換在各種應用中至關重要,包括影像壓縮(例如,在 JPEG 壓縮中)、影像重建和訊號處理任務,在這些任務中,需要在頻域操作後將訊號或影像轉換回其原始形式。

語法

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

語法說明

B = idct2(A) - 計算矩陣 A 的二維逆離散餘弦變換 (IDCT),並將結果返回到矩陣 B 中。此操作有效地從其頻域表示 A 中重建空間域影像。

B = idct2(A, m,n) - 計算矩陣 A 的二維逆離散餘弦變換 (IDCT),並將輸出矩陣 B 的大小指定為 m×n。此操作有效地從其頻域表示 A 中重建空間域影像,並將其調整為指定尺寸 m×n。

B = idct2(A, [m,n]) - 計算矩陣 A 的二維逆離散餘弦變換 (IDCT),並將輸出矩陣 B 調整為具有 m 行和 n 列。此操作從其頻域表示 A 中重建空間域影像,並將其調整為指定的尺寸 [m n]。

讓我們看看二維逆離散餘弦變換的一些示例

示例 1:使用 idct2() 函式從影像中去除高頻

我們的程式碼如下:

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

在示例中:

  • imread 函式用於從檔案(在本例中為“autumn.tif”)讀取影像並將其儲存在變數 img 中。
  • 如果影像為彩色影像(即,它具有紅色、綠色和藍色的三個通道),則使用 rgb2gray 函式將其轉換為灰度影像。這樣做是因為二維 DCT 通常應用於灰度影像。
  • dct2 函式計算影像的二維 DCT。結果儲存在變數 dct_img 中。DCT 以頻域表示影像,其中高頻分量對應於畫素值的快速變化。
  • 選擇一個閾值來確定要保留哪些 DCT 係數以及要丟棄哪些係數。在本例中,我們選擇僅保留前 50 個係數(在 256×256 的影像中,這些係數表示最低頻率)。高頻係數(超過閾值的係數)設定為零。
  • idct2 函式計算修改後的 DCT 係數 (dct_img_thresh) 的逆二維 DCT。此操作有效地從其頻域表示中重建空間域影像。結果儲存在 filtered_img 中。
  • 最後,使用 imshow 函式並排顯示原始影像和過濾後的影像。原始影像顯示在左側,過濾後的影像(已去除高頻)顯示在右側。

執行後,我們得到以下輸出:

示例 2:使用 B = idct2(A, m,n) 調整影像大小

我們的程式碼如下:

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

在示例中,我們有:

  • imread 函式用於從檔案(在本例中為“autumn.tif”)讀取影像並將其儲存在變數 img 中。
  • 如果影像為彩色影像(即,它具有紅色、綠色和藍色的三個通道),則使用 rgb2gray 函式將其轉換為灰度影像。此步驟很重要,因為二維 DCT 通常應用於灰度影像。
  • dct2 函式計算影像的二維 DCT。結果儲存在變數 dct_img 中。DCT 以頻域表示影像,其中影像的不同頻率由不同的係數表示。
  • 為了調整影像大小,我們將 DCT 係數矩陣 (dct_img) 調整為更小的尺寸。這是使用 imresize 函式完成的,指定新尺寸為原始尺寸的一半 (new_size = size(img) / 2)。這有效地減少了影像的頻域表示。
  • idct2 函式計算調整大小後的 DCT 係數 (dct_resized) 的逆二維 DCT。此操作有效地從其調整大小後的頻域表示中重建調整大小後的空間域影像。
  • 最後,使用 imshow 函式並排顯示原始影像和調整大小後的影像。原始影像顯示在左側,調整大小後的影像(使用二維 IDCT 獲得)顯示在右側。

執行後的輸出為:

示例 3:使用二維逆離散餘弦變換 (IDCT) 調整矩陣大小

我們的程式碼如下:

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

在此示例中,我們建立了一個 4×4 的示例矩陣 A。然後,我們將二維 IDCT 應用於 A 並將結果調整為 3×2 矩陣 [m, n] = [3, 2]。變換後的調整大小後的矩陣 B 將被顯示。

我們得到的輸出如下:

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
廣告

© . All rights reserved.