学习一下图像拼接会用到的评价指标
MSE:Mean Square Error,均方误差,能用来计算待评价图像和原始图像之间的差异。对于拼接来说,值越大说明质量越差。 RMSE:均方根误差。同样,值越大说明拼接效果越差。 SNR:信噪比,信噪比越大,说明混在信号里的噪声越小,采集到的的信号质量越高 PSNR:峰值信噪比 SSIM:结构相似度,值越大越相似,且最大值为1 熵值:反映了图像中平均信息量的多少,在图像拼接融合中,熵值越大,说明拼接融合效果越好。
MSE均方误差
如下公式,均方误差是值与参数真值之差平方的期望值(均值)。 在图像处理中,均方误差表示处理后图像像素值与原始像素值之差平方和的期望值。 图像尺寸为m*n,而x 和 y表示该某像素点的横纵坐标,I表示原图像,K表示处理后的图像
我们给出下面图片,来计算它们的MSE均方误差。其中mn图片有重合部分更相似,r与mn无重复部分。我们依次进行验证
Matlab计算MSE均方误差
%计算相同的两张图像m的均方误差
%A是处理后的图像,ref为参考图像,可根据需要进行图像修改
A=imread('m.png');
ref=imread('m.png');
err = immse(A, ref);
fprintf('\n The mean-squared error is %0.4f\n', err);
如下符合要求,均方误差为0 同理 采用m n 两张图(有重合部分)进行均方误差计算为3283.4812,可看出两图间差别越大值越大。 采用 m r两张图(无重合部分),均方误差为3766.2645,说明差别更大,符合图片描述。
RMSE均方根误差
相当于对均方误差MSE开根号。 同样采用mnr三张图片分别验证。
%输入两张相同的图片,其均方根误差为0,输入不同的两张图mn均方根误差为3.2835e+03,输入两张不同的图片mr为 3.7663e+03。
clc;
close all;
X = imread('m.png');% 读取图像
Y=imread('m.png');
figure;%展示图像
subplot(1, 3, 1); imshow(X); title('q1');
subplot(1, 3, 2); imshow(Y); title('q2');
% 使得图像每个像素值为浮点型
X = double(X);
Y = double(Y);
A = Y-X;
B = X.*Y;
%subplot(1,3,3);imshow(A);title('作差');
MSError = sum(A(:).*A(:))/numel(Y);% 均方根误差MSE,numel()函数返回矩阵元素个数
display(MSError);%均方根误差MSE
SNR信噪比
SNR为图像信噪比,图像的信噪比和图像的清晰度一样,也是衡量图像质量高低的重要指标。图像的信噪比是指视频信号的大小与噪波信号大小的比值
%信噪比说明混在信号里的噪声越小,因此输入mn图像(有重合区域),信噪比为6.7641;输入mr图像(无重合区域),信噪比为6.1683
clc;
close all;
X = imread('m.png');% 读取图像
Y=imread('n.png');
figure;% 展示图像
subplot(1, 3, 1); imshow(X); title('q1');
subplot(1, 3, 2); imshow(Y); title('q2');
% 使得图像每个像素值为浮点型
X = double(X);
Y = double(Y);
A = Y-X;
B = X.*Y;
MSError = sum(A(:).*A(:))/numel(Y);
SNR = 10*log10(sum(X(:).*X(:))/MSError/numel(Y));%信噪比SNR
display(MSError);%均方根误差MSE
display(SNR);%信噪比SNR
PSNR峰值信噪比
PSNR为峰值信噪比,即峰值信号的能量与噪声的平均能量之比,通常表示的时候取 log 变成分贝(dB),由于 MSE 均方误差为原图像与处理后图像之差的能量均值,而两者的差相当于噪声,因此 PSNR 即峰值信号能量与 RMSE (均方根误差)之比。其中,MAX是表示图像点颜色的最大数值,也就是灰度值的最大值,如果每个采样点用 8 位表示,那么就是 255。
%同样用图片mnr验证即可
clc;
close all;
X = imread('m.png');% 读取图像
Y=imread('r.png');
figure;% 展示图像
subplot(1, 3, 1); imshow(X); title('q1');
subplot(1, 3, 2); imshow(Y); title('q2');
% 使得图像每个像素值为浮点型
X = double(X);
Y = double(Y);
A = Y-X;
B = X.*Y;
RMSE = sum(A(:).*A(:))/numel(Y);% 均方根误差
PSNR = 10*log10(255^2/RMSE);% 峰值信噪比PSNR
display(PSNR);%峰值信噪比PSNR
SSIM结构相似度
SSIM为结构相似度,用来测量两幅图像的结构相似性大小(亮度、对比度以及结构间的对比),其是一个0-1之间的数,最大值为1。尤其反映了图像的轮廓,细节等的相似度,很适合作为图像拼接的客观评价指标。当两幅图像一模一样时,SSIM=1。 上公式中的三项分别代表三个特征(亮度,对比度以及结构)的占比。
结构相似度的数据模型可以表示为:
clc;
close all;
X = imread('m.png');% 读取图像
Y=imread('m.png');
figure;% 展示图像
subplot(1, 3, 1); imshow(X); title('q1');
subplot(1, 3, 2); imshow(Y); title('q2');
% 使得图像每个像素值为浮点型
X = double(X);
Y = double(Y);
A = Y-X;
B = X.*Y;
MSError = sum(A(:).*A(:))/numel(Y);
%以下为结构相似度SSIM
ux=sum(X(:).*X(:))/numel(X);
uy=sum(Y(:).*Y(:))/numel(Y);
sigmoidx=sum(X(:).*X(:)-ux)/numel(X);
sigmoidy=sum(Y(:).*Y(:)-uy)/numel(Y);
sigmoidxy=sum(B(:).*B(:))/(numel(B)*ux*uy)-ux*uy;
SSIM=(2*ux*uy)*(2*sigmoidxy)/(ux*ux+uy*uy)/(sigmoidx*sigmoidx+sigmoidy*sigmoidy);
display(SSIM);%结构相似性SSIM
熵值
反映图像信息丰富程度。通常情况下,图像信息熵越大,其信息量就越丰富,质量越好。对于图像拼接融合来说,熵值越大融合越好。 分别对较好拼接和较差拼接进行熵值的计算。 较差拼接: 较好拼接:
clc
clear
close all
%---------------------------------
%求一幅图像的熵值
%---------------------------------
I=imread('较好拼接.jpg');
[C,L]=size(I); %求图像的规格
Img_size=C*L; %图像像素点的总个数
G=256; %图像的灰度级
H_x=0;
nk=zeros(G,1);%产生一个G行1列的全零矩阵
for i=1:C
for j=1:L
Img_level=I(i,j)+1; %获取图像的灰度级
nk(Img_level)=nk(Img_level)+1; %统计每个灰度级像素的点数
end
end
for k=1:G %循环
Ps(k)=nk(k)/Img_size; %计算每一个像素点的概率
if Ps(k)~=0 %如果像素点的概率不为零
H_x=-Ps(k)*log2(Ps(k))+H_x; %求熵值的公式
end
end
运行后,在命令框输入H_x. 较好拼接熵值:7.5314 较差拼接:7.5210
由此符合我们的分析,熵值越大,拼接效果越好。
参考
|