数字图像处理|Matlab-灰度和彩色图像的离散余弦变换-对分块图像进行离散余弦变换(DCT)

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章