|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
<P>function MSE=dct2(check,trueImage,Cnum)<BR>%trueImage为待压缩的原图像,Cnum为压缩时保留的系数个数<BR>%check<1×6>为checkbox的选项数据,控制输出<BR>h = waitbar(0,'Please wait...'); %等待条<BR> for i=1:100,<BR> waitbar(i/100,h)<BR> end<BR> close(h)<BR>file=trueImage;</P>
<P>trueImage=imread(trueImage);<BR>trueImage1=trueImage;<BR>if jpgread(file)==0 %导入jpgread函数,判断是否为彩色图像<BR>trueImage1=rgb2gray(trueImage); %如果是彩色图像转成灰度的<BR>end<BR>trueImage=double(trueImage1)/255;<BR>dctm=dctmtx(8);<BR>%进行基于子块的DCT变换<BR>imageDCT=blkproc(trueImage,[8 8],'P1*x*P2',dctm,dctm.');<BR>DCTvar=im2col(imageDCT,[8 8],'distinct').';<BR>n=size(DCTvar,1);<BR>DCTvar=(sum(DCTvar.*DCTvar)-(sum(DCTvar)/n).^2)/n;<BR>[dum,order]=sort(DCTvar);<BR>Cnum=64-Cnum;<BR>mask=ones(8,8); <BR>mask(order(1:Cnum))=zeros(1,Cnum);<BR>im8x8=zeros(9,9);<BR>im8x8(1:8,1:8)=mask;<BR>im128x128=kron(im8x8(1:8,1:8),ones(16));<BR>if check(2)==1<BR>figure('name','DCT系数');<BR>imshow(im128x128);<BR>title('DCT系数');<BR>end<BR>if check(3)==1<BR>figure('name','8*8DCT变换系数图'); <BR>mesh(imageDCT); <BR>title('8*8DCT变换系数图');<BR>end<BR>dctm=dctmtx(8);<BR>newImage=blkproc(imageDCT,[8 8],'P1*(x.*P2)*P3',dctm.',mask(1:8,1:8),dctm);<BR>if check(5)==1<BR>figure('name','重构图像对比');<BR>subplot(1,2,1);<BR>imshow(trueImage1);<BR>title('原始图像');<BR>subplot(1,2,2);<BR> imshow(newImage);<BR>title('重构图像');<BR>end<BR>if check(6)==1<BR>figure('name','误差图像');<BR>imshow(trueImage-newImage+0.45); %对误差图像曾亮显示<BR>title('误差图像');<BR>end<BR>error=(trueImage-newImage).^2; %均方误差计算<BR>A=sum(error(:));<BR>B=prod(size(trueImage));<BR>MSE=A/B;<BR>这是灰度变换,彩色变换如何修改,请HAPPY教授指点,谢谢</P> |
|