MATLAB 2次元逆離散コサイン変換(IDCT):周波数データから画像を復元
逆離散コサイン変換(IDCT、Inverse Cosine Transform)は、コサイン変換のプロセスを逆転させる数学演算です。信号や画像を周波数領域の表現から再構成する際、信号処理や画像処理で特に有用です。
2次元信号や画像の文脈では、2次元逆離散コサイン変換(2-D IDCT)は、コサイン係数の行列(信号や画像の周波数成分を表す)を空間領域に戻し、元の信号や画像を生成します。
MATLABでの2次元逆コサイン変換は、コサイン値の行列を空間領域の画像に変換するために使用されます。これは2次元コサイン変換の逆演算であり、画像処理と圧縮で一般的に用いられます。idct2 関数を使用して2次元逆コサイン変換を実行します。
2次元逆離散コサイン変換
MATLABでは、idct2 関数で2次元逆離散コサイン変換を実行します。コサイン係数の行列を入力として受け取り、信号や画像の空間領域表現を返します。結果は表示やさらなる処理が可能な再構成画像となります。
逆コサイン変換は、画像圧縮(JPEG圧縮など)、画像再構成、周波数領域での操作後に信号や画像を元の形に戻す必要がある信号処理タスクなど、さまざまな用途で重要です。
構文
B = idct2(A) B = idct2(A,m,n) B = idct2(A,[m n])
構文の説明
B = idct2(A)— 行列 A の2次元逆離散コサイン変換を計算し、結果を行列 B に返す。周波数領域表現 A から空間領域画像を効果的に再構成。B = idct2(A, m,n)— 行列 A の2次元IDCTを計算し、出力行列 B のサイズを m×n に指定。周波数領域表現 A から空間領域画像を再構成し、指定寸法 m×n にリサイズ。B = idct2(A, [m,n])— 行列 A の2次元IDCTを計算し、出力行列 B を m 行 n 列にリサイズ。周波数領域表現 A から空間領域画像を再構成し、指定寸法 [m n] にリサイズ。
2次元逆離散コサイン変換の例をいくつか見てみましょう。
例1:idct2()関数で画像から高周波成分を除去
img = imread('autumn.tif'); % グレースケール変換 if size(img, 3) == 3 img = rgb2gray(img); end % 2次元DCT計算 dct_img = dct2(double(img)); % 高周波成分除去の閾値設定(最初の50係数のみ保持) threshold = 50; dct_img_thresh = dct_img; dct_img_thresh(threshold+1:end, :) = 0; dct_img_thresh(:, threshold+1:end) = 0; % 逆2次元DCTでフィルタ済み画像取得 filtered_img = uint8(idct2(dct_img_thresh)); % 元画像とフィルタ済み画像を表示 figure; subplot(1, 2, 1); imshow(img); title('Original Image'); subplot(1, 2, 2); imshow(filtered_img); title('Filtered Image');
この例では:
imreadで画像を読み込み、カラーならrgb2grayでグレースケール変換(2次元DCTは通常グレースケールに適用)。dct2で2次元DCTを計算。結果は周波数領域表現で、高周波成分は画素値の急激な変化に対応。- 閾値を設定し、DCT係数のうち最初の50係数(低周波)のみ保持、それ以外をゼロに設定。
idct2で修正済みDCT係数から逆変換し、空間領域画像を再構成。- 元画像とフィルタ済み画像(高周波除去)を並べて表示。
例2:B = idct2(A, m,n) で画像をリサイズ
% 画像読み込み img = imread('autumn.tif'); % グレースケール変換 if size(img, 3) == 3 img = rgb2gray(img); end % 2次元DCT計算 dct_img = dct2(double(img)); % DCT係数行列をリサイズ(周波数領域表現を縮小) new_size = size(img) / 2; dct_resized = imresize(dct_img, new_size); % 逆2次元DCTでリサイズ済み画像取得 resized_img = uint8(idct2(dct_resized, size(img, 1), size(img, 2))); % 元画像とリサイズ画像を表示 subplot(1, 2, 1); imshow(img); title('Original Image'); subplot(1, 2, 2); imshow(resized_img); title('Resized Image using 2-D IDCT');
この例では:
- 画像読み込みとグレースケール変換。
dct2で2次元DCT計算。- 周波数領域表現(DCT係数行列)を
imresizeで半分のサイズに縮小。 idct2でリサイズ済みDCT係数から逆変換し、リサイズ済み空間領域画像を再構成。出力サイズを元画像サイズに指定。- 元画像とリサイズ画像を並べて表示。
例3:2次元IDCTで行列をリサイズ
% サンプル行列 A を作成 A = [ 10, 20, 30, 40; 50, 60, 70, 80; 90, 100, 110, 120; 130, 140, 150, 160 ]; % 元行列 A を表示 disp('Original Matrix A:'); disp(A); % Aの2次元IDCTを計算し、3x2行列にリサイズ B = idct2(A, [3, 2]); % リサイズ済み行列 B を表示 disp('Resized Matrix B (3x2):'); disp(B);
4×4のサンプル行列 A を作成し、2次元IDCTを適用して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
MATLAB
- MATLABベクトル完全マスター:行/列ベクトルの基礎と操作
- MATLABコロン演算子をマスター:ベクトル作成と効率的な反復処理
- MATLABで数式を可視化:2D/3Dプロッティング完全ガイド
- MATLAB 2次元逆離散コサイン変換(IDCT):周波数データから画像を復元
- MATLAB積分マスター:不定積分からリーマン和まで
- MATLAB基礎マスター:必須構文とコマンド完全ガイド
- MATLAB:ラプラシアン・オブ・ガウシアン(LoG)フィルタによるエッジ検出
- Simulink:MATLABの高度なシミュレーション&モデルベース設計ツール
- MATLAB:多次元配列と特殊配列をマスターする
- MATLABガイド:多項式の微分を効率的に計算する
- MATLABでの多項式の理解:表現と評価