matlab jpeg反量化

发布网友 发布时间:2022-04-24 14:30

我来回答

1个回答

热心网友 时间:2023-10-16 11:21

%读入指定途径的图像
rgb=imread('图像所在加上盘符'); %RGB转换为YUV,即YCbCr
yuv=rgb2ycbcr(rgb);
%将得到的YUV转换为可进行数*算的double类型,原来为uint8 类型
yuv=double(yuv);
%分别提取其中的Y,U,V矩阵
y=yuv(:,:,1);
u=yuv(:,:,2);
v=yuv(:,:,3);
%设定量化步长
eql=8;
%设定块操作时dct矩阵
T = dctmtx(8);
%将Y,U,V矩阵分割为8*8 的小块,并对每个小块进行DCT变换
y_dct=blkproc(y,[8,8],'P1*x*P2',T, T');
u_dct=blkproc(u,[8,8],'P1*x*P2',T, T');
v_dct=blkproc(v,[8,8],'P1*x*P2',T, T');
%将得到的DCT系数除以量化步长
y_dct=y_dct/eql;
u_dct=u_dct/eql;
实验七 JEPG图像编码
85
v_dct=v_dct/eql;
%将量化后的系数四舍五入
y_dct_c=fix(y_dct);
u_dct_c=fix(u_dct);
v_dct_c=fix(v_dct);
%反量化
y_dct_c=y_dct_c*eql;
u_dct_c=u_dct_c*eql;
v_dct_c=v_dct_c*eql;
%进行DCT反变换
y_idct=blkproc(y_dct_c,[8,8],'P1*x*P2', T^-1,(T')^-1);
u_idct=blkproc(u_dct_c,[8,8],'P1*x*P2', T^-1,(T')^-1);
v_idct=blkproc(v_dct_c,[8,8],'P1*x*P2', T^-1,(T')^-1);
%恢复为YUV矩阵,转换为uint8 类型,
yuv(:,:,1)=y_idct;
yuv(:,:,2)=u_idct;
yuv(:,:,3)=v_idct;
yuv=uint8(yuv);
%YUV转换为RGB
rgb1=ycbcr2rgb(yuv);
%显示两幅图像
subplot(211),imshow(rgb),title('原始图像');
subplot(212),imshow(rgb1),title('处理后图像');

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com