Matlab-灰度和彩色圖像的離散餘弦變換
代碼鏈接:https://download.csdn.net/download/qq_43571150/12033265
問題
對輸入的灰度和彩色圖像進行分塊,每一塊圖像爲8*8像素的大小。對分塊圖像進行離散餘弦變換,輸出頻譜圖(DCT係數);
結果圖像👇
Matlab代碼👇
clc;clear;
RGB=imread('05.jpg');
gary=rgb2gray(RGB);
%亮度量化表
m=0.5*[ 16 11 10 16 24 40 51 61;
12 12 14 19 26 58 60 55;
14 13 16 24 40 57 69 56;
14 17 22 29 51 87 80 62;
18 22 37 56 68 109 103 77;
24 35 55 64 81 104 113 92;
49 64 78 87 103 121 120 101;
72 92 95 98 112 100 103 99];
%RGB圖分層處理? 得到3個分量圖
R = RGB(:,:,1);
G = RGB(:,:,2);
B = RGB(:,:,3);
%轉換爲雙精度
IR = double(R);
IG = double(G);
IB = double(B);
%建立8*8的DCT變換矩陣
T=dctmtx(8);
%進行DCT變換
RR = blkproc(IR,[8,8],'P1*x*P2',T,T');
GG = blkproc(IG,[8,8],'P1*x*P2',T,T');
BB = blkproc(IB,[8,8],'P1*x*P2',T,T');
D1=blkproc(gary,[8 8],'dct2');
D2=cat(3,RR,GG,BB);
subplot(2,2,1);imshow(RGB);title('彩色圖像')
subplot(2,2,2);imshow(log(abs(D2)));title('彩色圖像分塊DCT頻譜圖')
subplot(2,2,3);imshow(gary);title('灰度圖')
subplot(2,2,4);imshow(log(abs(D1)));title('灰度圖分塊DCT頻譜圖')
imwrite(log(abs(D2)),'05 彩色圖像分塊離散餘弦變換頻譜圖.jpg');
imwrite(log(abs(D1)),'05 灰度圖分塊離散餘弦變換頻譜圖.jpg');