MATLAB,求峰值信噪比(代码已给出,编译的时候52行有错误,求大神解决)

clearimg_original=imread('barb_g.bmp');%%%读入图象imshow(img_original);%%%%显示原图象title('原图... clear
img_original=imread('barb_g.bmp');%%%读入图象
imshow(img_original);%%%%显示原图象
title('原图象');
img_original=double(img_original);%%%%%%%%因为要进行加减运算,原来的UNIT8类型不能进行这种运算,需要转变类型
img=img_original;
figure,imshow(img/255);
title('原图象');
img=img-128;%%%%从0到255转变成-128到127的范围
A=[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];%%%%%%打进量化表A,这里用的是亮度量化表

[a,b]=size(img);%%%%求出尺寸
%%%%%%图象的大小是a*b大小的,它有(a/8)*(b/8)个8*8的图象块,以下分别取出这些8*8的图象块,
%%%%%%然后先进行DCT变换,再对这些变换后的图象块进行量化处理,并将其去整。
for i=1:a/8
for j=1:b/8
sub_block=img((i-1)*8+1:(i-1)*8+8,(j-1)*8+1:(j-1)*8+8);%%%求出每个子块
dct_subcoef=dct2(sub_block);%%%%对每个子块进行DCT变换
dct_subcoef=round(dct_subcoef./A);%%%%%%点除量化表,并将结果取整
dct_coef((i-1)*8+1:(i-1)*8+8,(j-1)*8+1:(j-1)*8+8)=dct_subcoef;%%%%%得到的dct系数,这里dct_coef也是一个256*256大小的矩阵;
end
end
figure,imshow(dct_coef);
title('dct系数的值');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-----------------------------------------
%%%%%%-----以下是逆变换的过程------------------
%%%%%--------------------------------------------------------------
for i=1:a/8
for j=1:b/8
dct_subcoef=dct_coef((i-1)*8+1:(i-1)*8+8,(j-1)*8+1:(j-1)*8+8);%%%%取每个子块的DCT系数
dct_subcoef=dct_subcoef.*A;%%%%%这是反量化的过程
sub_block=idct2(dct_subcoef);%%%%对每个子块进行反DCT变换
img_last((i-1)*8+1:(i-1)*8+8,(j-1)*8+1:(j-1)*8+8)=round(sub_block);%%%%%%img1存放还原后的图象
end
end
img_last=img_last+128;
figure,imshow(img_last/255);%%%显示还原的图象
title('恢复的图象');
figure,imshow(img_original-img_last);%%%显示恢复图象与原始图象之差
title('恢复图象与原始图象之差');

mseValue=(double(img_original-img_last))^2/[a,b];
psnrValue=10*log10(255^2/mseValue);
disp(['输入数据的MSE为:',num2str(mseValue)]);
disp(['输入数据的PSNR为:',num2str(psnrValue)]);
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
百度网友7d7ebc3
2014-05-18 · TA获得超过531个赞
知道小有建树答主
回答量:630
采纳率:50%
帮助的人:608万
展开全部
52行是哪一行,不能单独列出那一句代码么,顺带附上错误提示会更好!
更多追问追答
追问
错误:
??? Error using ==> mrdivide
Matrix dimensions must agree.

Error in ==> jpeg at 52
mseValue=double(img_original-img_last)^2/[a,b];

>>
追答
程序显示矩阵维数不匹配,我看这句主要 有两个问题,mseValue=double(img_original-img_last)^2/[a,b];,这句中平方,是矩阵操作,也就是你的计算是两个矩阵相乘,不是矩阵中每个数的平方,如果 需要数值操作,请采用点操作,后面除以[a,b]你也用的矩阵操作,而且[a,b]是图像的尺寸,应该是一个二维矩阵,一个图像除以他的尺寸,矩阵操作不合适,这里还得分析下!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式