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