MATLAB代做|FPGA代做|simulink代做——图像的PSNR计算
% plot PSNR comparsion Curve
% Requirement:
clear all
clc
% Introduction for input
fps = 30; % frame rate
width = 176; % Width
height = 144; % Height
M = 13; % Number for each sequence
init_qp =[23]; % The first file begin no for each sequence
ori_dir = 'D:\test_seqs\'; % Directory for Original YUV file
ori_suffix = '_qcif.yuv'; % Suffix for Original YUV file name
rec_dir = 'D:\projectC\Encoder\test\test71\'; % Directory for Reconstruct YUV file
rec_suffix = '.yuv'; % Suffix for Reconstruct YUV file name
FigMaker = 0; % FigMaker = 1 output-subplot(2,2,);FigMaker = 0 output-Figure()
%determine the YUV test sequence Name
YUV_name{1} = 'foreman'; % Name for testing sequence
ext{1} = 'x264';
ext{2} = 'jm';
N = length(YUV_name);
Type = length(ext);
if (length(init_qp)~=N)
disp('Lack of the first test sequence begin NO! ');
stop;
end
num_cell = zeros(N,M);
for i = 1:N
num_cell(i,:) = init_qp(i):init_qp(i)+M-1;
end
pixframeY = width*height;
pixframeUV = pixframeY/2;
Maker{1} = 'o'; % Circle
Maker{2} = 's'; % Square
Maker{3} = 'd'; % Diamond
Maker{4} = 'v'; % Downward-pointing triangle
Maker{5} = '+'; % Plus sign
Maker{6} = 'x'; % Cross
Maker{7} = '.'; % Point
color{1} = 'r'; % Red
color{2} = 'b'; % Blue
color{3} = 'g'; % Green
color{4} = 'm'; % Cyan
color{5} = 'k'; % Magenta
color{6} = 'c'; % Yellow
color{7} = 'y'; % Black
linetype{1} = '-'; % Solid line (default)
linetype{2} = '--'; % Dashed line
linetype{3} = ':'; % Dotted line
linetype{4} = '-.'; % Dash-dot line
for jj = 1:N
for nn = 1:Type
bitrate_psnr = [];
for kk = 1:M
fi = fopen(strcat(ori_dir,YUV_name{jj},ori_suffix),'rb');
fo = fopen(strcat(rec_dir,YUV_name{jj},int2str(num_cell(jj,kk)),ext{nn},rec_suffix),'rb');
fseek(fi,0,'eof');
fseek(fo,0,'eof');
over_ori = ftell(fi);
over_R = ftell(fo);
fseek(fi,0,'bof');
fseek(fo,0,'bof');
len = min(over_ori,over_R);
frames = fix(2*len/(width*height*3));
f_bs = fopen(strcat(rec_dir,YUV_name{jj},int2str(num_cell(jj,kk)),'.',ext{nn}),'rb');
fseek(f_bs,0,'eof');
Bs_len = ftell(f_bs);
fclose(f_bs);
sum_psnr = 0;
for ii = 1:frames
A0 = fread(fi,pixframeY,'uchar');
Ar = fread(fo,pixframeY,'uchar');
psnr = 10*log10(255*255*pixframeY/(sum((A0 - Ar).^2)+1)); % psnr--caculate method coming from JM
fseek(fi,pixframeUV,'cof');
fseek(fo,pixframeUV,'cof');
sum_psnr = sum_psnr + psnr;
end
fclose(fi);
fclose(fo);
avg_psnr = fix(sum_psnr*100/frames+0.5)/100;
bitrate = fix(Bs_len*fps*800/(1000*frames)+0.5)/100;
bitrate_psnr = [bitrate_psnr;bitrate avg_psnr];
end
if (FigMaker == 1)
figure(fix((jj+3)/4));hold on;subplot(2,2,mod(jj,4));plot(bitrate_psnr(:,1),bitrate_psnr(:,2),strcat('-',color{nn},Maker{nn}));
else
figure(jj);hold on;plot(bitrate_psnr(:,1),bitrate_psnr(:,2),strcat('-',color{nn},Maker{nn})); %r-mii b-x264 g- jm
end
grid on;
end
title( strcat('"',YUV_name{jj},'"',' Testing Sequence'));
legend(ext);
xlabel('Bit rate (kbps)');
ylabel('Y PSNR (dB)');
end
% Requirement:
clear all
clc
% Introduction for input
fps = 30; % frame rate
width = 176; % Width
height = 144; % Height
M = 13; % Number for each sequence
init_qp =[23]; % The first file begin no for each sequence
ori_dir = 'D:\test_seqs\'; % Directory for Original YUV file
ori_suffix = '_qcif.yuv'; % Suffix for Original YUV file name
rec_dir = 'D:\projectC\Encoder\test\test71\'; % Directory for Reconstruct YUV file
rec_suffix = '.yuv'; % Suffix for Reconstruct YUV file name
FigMaker = 0; % FigMaker = 1 output-subplot(2,2,);FigMaker = 0 output-Figure()
%determine the YUV test sequence Name
YUV_name{1} = 'foreman'; % Name for testing sequence
ext{1} = 'x264';
ext{2} = 'jm';
N = length(YUV_name);
Type = length(ext);
if (length(init_qp)~=N)
disp('Lack of the first test sequence begin NO! ');
stop;
end
num_cell = zeros(N,M);
for i = 1:N
num_cell(i,:) = init_qp(i):init_qp(i)+M-1;
end
pixframeY = width*height;
pixframeUV = pixframeY/2;
Maker{1} = 'o'; % Circle
Maker{2} = 's'; % Square
Maker{3} = 'd'; % Diamond
Maker{4} = 'v'; % Downward-pointing triangle
Maker{5} = '+'; % Plus sign
Maker{6} = 'x'; % Cross
Maker{7} = '.'; % Point
color{1} = 'r'; % Red
color{2} = 'b'; % Blue
color{3} = 'g'; % Green
color{4} = 'm'; % Cyan
color{5} = 'k'; % Magenta
color{6} = 'c'; % Yellow
color{7} = 'y'; % Black
linetype{1} = '-'; % Solid line (default)
linetype{2} = '--'; % Dashed line
linetype{3} = ':'; % Dotted line
linetype{4} = '-.'; % Dash-dot line
for jj = 1:N
for nn = 1:Type
bitrate_psnr = [];
for kk = 1:M
fi = fopen(strcat(ori_dir,YUV_name{jj},ori_suffix),'rb');
fo = fopen(strcat(rec_dir,YUV_name{jj},int2str(num_cell(jj,kk)),ext{nn},rec_suffix),'rb');
fseek(fi,0,'eof');
fseek(fo,0,'eof');
over_ori = ftell(fi);
over_R = ftell(fo);
fseek(fi,0,'bof');
fseek(fo,0,'bof');
len = min(over_ori,over_R);
frames = fix(2*len/(width*height*3));
f_bs = fopen(strcat(rec_dir,YUV_name{jj},int2str(num_cell(jj,kk)),'.',ext{nn}),'rb');
fseek(f_bs,0,'eof');
Bs_len = ftell(f_bs);
fclose(f_bs);
sum_psnr = 0;
for ii = 1:frames
A0 = fread(fi,pixframeY,'uchar');
Ar = fread(fo,pixframeY,'uchar');
psnr = 10*log10(255*255*pixframeY/(sum((A0 - Ar).^2)+1)); % psnr--caculate method coming from JM
fseek(fi,pixframeUV,'cof');
fseek(fo,pixframeUV,'cof');
sum_psnr = sum_psnr + psnr;
end
fclose(fi);
fclose(fo);
avg_psnr = fix(sum_psnr*100/frames+0.5)/100;
bitrate = fix(Bs_len*fps*800/(1000*frames)+0.5)/100;
bitrate_psnr = [bitrate_psnr;bitrate avg_psnr];
end
if (FigMaker == 1)
figure(fix((jj+3)/4));hold on;subplot(2,2,mod(jj,4));plot(bitrate_psnr(:,1),bitrate_psnr(:,2),strcat('-',color{nn},Maker{nn}));
else
figure(jj);hold on;plot(bitrate_psnr(:,1),bitrate_psnr(:,2),strcat('-',color{nn},Maker{nn})); %r-mii b-x264 g- jm
end
grid on;
end
title( strcat('"',YUV_name{jj},'"',' Testing Sequence'));
legend(ext);
xlabel('Bit rate (kbps)');
ylabel('Y PSNR (dB)');
end
联系:highspeedlogic
QQ :1224848052
微信:HuangL1121
邮箱:1224848052@qq.com
微信扫一扫:
上一篇:MATLAB代做|FPGA代做|simulink代做——预去模糊算法处理 下一篇:MATLAB代做|FPGA代做|simulink代做——AES加解密代码