%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% main 主程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
I=imread('claire1.bmp'); %读入原始图像
I1=double(I);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 假设图像大小为SATURN.bmp(438×328)
% imgcolnumber 代表图形的长,即图像矩阵所有的列数-438
% imgrownumber 代表图像的高,即图像矩阵所有的行数-328
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[imgrownumber, imgcolnumber]=size(I);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% B=blkproc(A,[m n],fun,p1,p2...):应用函数fun对图像A的每个不同的m×n块进行处理,
% 必要的时候可对A的四周补0。 p1、p2为附加的传送给fun的参数。
% “.*”表示矩阵对应元素向量乘法,“*”表示矩阵乘法。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
T=dctmtx(8);
B=blkproc(I1,[8 8],'P1*x*P2',T,T');
% T和T'转置是DCT函数P1*x*P2的参数
% P1和P2是函数的参数,其中P1=T,而P2=T'(就是T的转置) x表示前面的I[8 8]
% 'P1*x*P2'在这里代替fun。
%下面这个mask就是书上278页表10.2(a) JPEG量化步长矩阵
mask=[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];
% 请大家重新定义一个mask,以演示不同的系数对重建图像的影响。
% 。。。。。。。。。。。。。
B1=blkproc(B,[8,8],'round(x./P1)',mask);
B2=blkproc(B1,[8,8],'x.*P1',mask);
I2=blkproc(B2,[8,8],'P1*x*P2',T',T);
%%% 用下面这两句表示在同一个figure内画两幅图
%请学生完成语句,添加图的名字,因为一页中有两个图,请区别哪一个是原始图像,哪一个是重建图像
figure;
subplot(1,2,1),imshow(uint8(I)); %。。。。。。。。。
subplot(1,2,2),imshow(uint8(I2)); %。。。。。。。。。
%%% 用下面这两句表示出现两个figure,每个figure内画一幅图
% 请大家编写语句完成图像的显示,要求一页只显示一个图,且带有图的名字。
% 。。。。。。。。。
评论1