Графики абсолютных отклонений.
Вывод:
В результате расчетов PSNR во всех случаях получилось больше 37 дБ, следовательно, во всех случаях различия между оригиналом и восстановленным изображением практически незаметны.
Наибольшие значения PSNR получились у изображений 1, 4 и 5. Из этого можно сделать вывод, что лучше восстанавливаются изображения, у которых нет резких переходов от темного к светлому, а также меньше мелких объектов, т.е. меньше структурированность.
Наибольшая МАЕ( максимальная абсолютная ошибка) наблюдается у изображений 3, 4 и 6, т.к. здесь наблюдаются резкие переходы от светлого к темному. Например, граница между темным лесом и светлым полем или различия цветности между близко стоящими зданиями.
По индексу структурной похожести все изображения имеют достаточно близкое значение к 1, т.е. они достаточно схожи с оригиналом.
Наибольшее значение SSIM имеют те изображения, где наибольшее значение PSNR и наименьшее значение МАЕ.
Изображение 4 имеет достаточно большое значение PSNR, но также имеет большое значение МАЕ, что привело к сравнительно малому значению SSIM. Это можно объяснить тем, что параметр PSNR чувствителен к среднему отличаю сигналов по амплитуде.
Из этого можно сделать заключение, что наиболее хорошо восстанавливаются изображения, у которых меньше различие по структуре(например, отдельно поле или отдельно лес) и с меньшей контрастностью оригинала.
Приложение А
Текст программы
clear;
IMAGE=double(imread('out_8_1.bmp'));
NewImage=zeros(size(IMAGE)); % Сюда будут записываться пиксели восстановленного изображения.
% Размер тайла изображения.
x=128;
y=128;
%--------------------------------------------------------------------
Nlevels=16; %количество уровней квантователя. 16=2^4. Т.е. в 4 бита.
%Уровни квантования задаются границами квантования. Уровень равен середине
%отрезка между двумя границами.
%Инициализация квантователя
Nlevels=Nlevels/2;%Один бит оставляем для знака ошибки, т.е. всего уровней Nlevels/2.
levels=round(0:127/(Nlevels):127);%начальное положение границ квантователя.
baseeta=33;%Шаг адаптивности.
etamod=1.125;%Множитель шага адаптивности.
eta=baseeta;
cod=1;
%-------------------------------------------------
coded=[];%Сюда будут складываться сжатые данные
%Первое значение передаётся без сжатия.
%--------------------------------------------------
for ii=1:floor(size(IMAGE,1)/x)
for jj=1:floor(size(IMAGE,2)/y)
clc
[ii,jj]
M=IMAGE((ii-1)*x+1:ii*x,(jj-1)*y+1:jj*y);
N=zeros(size(M));
ind=[];
znach=M(1,1);
coded=[];
FirstPixel=M(1,1);
for l=1:x
for m=1:y
pred=predsimple(N,l,m,znach);%Предсказатель.
%Квантование одного пикселя изображения
[cod,znach,levels,eta]=aquant(M(l,m),pred,cod,levels,baseeta,eta,etamod);
%--------------------------------------
N(l,m)=znach;
% coded=[coded cod];
end;
% clc
% [l,m]
end;
%В данной реализации деквантования не производится, а
%восстановленное изображение получается сразу при сжатии.
NewImage((ii-1)*x+1:ii*x,(jj-1)*y+1:jj*y)=N;
imshow(NewImage,[0,255])
%Процедура деквантования аналогична процедуре квантования.
%--------------------------------------------------------
end;
end;
n = 1024.0;
m = 1024.0;
'--------------------------------------------------------------------'
%--------------------------------------------------------------------
k = 8; %количество уровней квантователя.
mse = 0.0;
for i = 1:m
for j= 1:n
mse = mse + (IMAGE(i,j)-NewImage(i,j))^2.0;
end;
end;
mse = mse/(m*n);
psnr = 10.0*log10((((2.0^k)-1)^2.0)/mse)
f=0;
d=0;
for i=1:m
for j=1:n
f=abs(IMAGE(i,j))^2.0;
if d<f
d=f;
end;
end;
end;
pmse = mse/d
z=double(0.0);
x=double(0.0);
for i=1:1024.0
for j=1:1024.0
z=z+IMAGE(i,j)^2.0;
end;
end;
nmse=mse*(n*m)/z
snr = 10.0*log10(1/nmse)
%----------------------------------------------------------------
mae = 0;
dif = zeros(1024);
[a,b] = meshgrid(1:n);
for i = 1:m
for j = 1:n
dif(i,j) = abs(IMAGE(i,j)-NewImage(i,j));
if mae < dif(i,j)
mae = dif(i,j);
end;
end;
end;
figure, mesh(a,b, abs(IMAGE-NewImage));
mae
%--------------------------------------------------------------------
s3 = 0.0;
s4 = 0.0;
s1 = 0.0;
s2 = 0.0;
for i = 1:m
for j= 1:n
s1 = s1 + IMAGE(i,j);
s2 = s2 + NewImage(i,j);
end;
end;
s1 = s1/(n*m);
s2 = s2/(n*m);
s5 = 0.0;
for i = 1:m
for j= 1:n
s3 = s3 + (IMAGE(i,j) - s1)^2.0;
s4 = s4 + (NewImage(i,j) - s2)^2.0;
s5 = s5 + (IMAGE(i,j)-s1)*(NewImage(i,j)-s2);
end;
end;
s3 = s3/(n*n);
s4 = s4/(n*n);
s5 = s5/(n*m);
c1 = (0.01*(2.0^k-1))^2.0;
c2 = (0.03*(2.0^k-1))^2.0;
ssim = ((2.0*s1*s2+c1)*(2.0*s5+c2))/((s1^2.0+s2^2.0+c1)*(s3+s4+c2))
