请用matlab写出计算融合图像评估指标SSIM和PSNR的程序
时间: 2023-12-10 17:41:48 浏览: 108
以下是MATLAB代码实现SSIM和PSNR指标的计算:
```matlab
function [ssimval, psnrval] = evaluate_fusion(img1, img2)
% img1和img2是融合之前的两幅图像
% 计算SSIM指标
K = [0.01 0.03];
window = fspecial('gaussian', 11, 1.5);
L = 255;
[ssimval, ~] = ssim(img1, img2, 'K', K, 'Window', window, 'DynamicRange', L);
% 计算PSNR指标
mse = mean(mean((double(img1) - double(img2)).^2));
if mse > 0
psnrval = 10*log10(255^2/mse);
else
psnrval = Inf;
end
end
```
使用方法:
```matlab
% 假设img1和img2是两幅图像
[ssimval, psnrval] = evaluate_fusion(img1, img2);
fprintf('SSIM指标值为:%f, PSNR指标值为:%f\n', ssimval, psnrval);
```
注意:这里使用的SSIM指标计算方法是MATLAB自带的`ssim`函数,如果需要使用其他SSIM指标计算方法,需要对应修改计算代码。
相关问题
请写出图像融合评估指标 并用matlab写出计算这些指标的代码
常见的图像融合评估指标包括以下几种:
1. 均方误差(MSE)
2. 峰值信噪比(PSNR)
3. 结构相似性指数(SSIM)
4. 信息熵(Entropy)
5. 互信息(MI)
以下是用 Matlab 实现这些指标的代码:
1. 均方误差(MSE)
```matlab
function mse = computeMSE(img1, img2)
diff = double(img1) - double(img2);
mse = sum(diff(:).^2) / numel(img1);
end
```
2. 峰值信噪比(PSNR)
```matlab
function psnr = computePSNR(img1, img2)
mse = computeMSE(img1, img2);
psnr = 10 * log10((255^2) / mse);
end
```
3. 结构相似性指数(SSIM)
```matlab
function ssimval = computeSSIM(img1, img2)
k1 = 0.01;
k2 = 0.03;
L = 255;
c1 = (k1 * L)^2;
c2 = (k2 * L)^2;
mu1 = mean2(img1);
mu2 = mean2(img2);
sigma1 = std2(img1);
sigma2 = std2(img2);
sigma12 = cov2(img1, img2);
ssimval = ((2 * mu1 * mu2 + c1) * (2 * sigma12 + c2)) / ((mu1^2 + mu2^2 + c1) * (sigma1^2 + sigma2^2 + c2));
end
```
4. 信息熵(Entropy)
```matlab
function entropyval = computeEntropy(img)
[counts, ~] = imhist(img);
p = counts / sum(counts);
entropyval = -sum(p.*log2(p));
end
```
5. 互信息(MI)
```matlab
function mival = computeMI(img1, img2)
nbins = 256;
[counts1, ~] = imhist(img1, nbins);
[counts2, ~] = imhist(img2, nbins);
jointHist = histcounts2(img1(:), img2(:), nbins);
jointHist = jointHist / sum(jointHist(:));
p1 = counts1 / sum(counts1);
p2 = counts2 / sum(counts2);
mi = 0;
for i=1:nbins
for j=1:nbins
if jointHist(i,j) > 0
mi = mi + jointHist(i,j) * log2(jointHist(i,j) / (p1(i) * p2(j)));
end
end
end
mival = mi;
end
```
请用matlab写出计算融合后图像的CE(Cross entropy),EN(Entropy),MI(Mutual information),PSNR(Peak signal-to-nosie ration),SSIM(Structural similarity index measure),RMSE(Root mean squared error,AG(Average gradient),EI(Edge Intensity),SD(Standard deviation),SF(Spatial frequency), QABF(Gradient-based fusion performance)的程序,并说明计算原理
由于计算融合后图像的各项指标需要融合前后的两幅图像,因此需要先将两幅图像读取进来,并将它们进行融合。在这里,我们使用Pyramid-based image fusion算法进行融合。
以下是计算各项指标的程序及其计算原理:
```matlab
% 读取两幅图像
image1 = imread('image1.jpg');
image2 = imread('image2.jpg');
% 将两幅图像进行融合
fused_image = pyramid_fusion(image1, image2);
% 计算CE
CE = cross_entropy(image1, fused_image);
% 计算EN
EN = entropy(fused_image);
% 计算MI
MI = mutual_information(image1, image2, fused_image);
% 计算PSNR
PSNR = psnr(image1, fused_image);
% 计算SSIM
SSIM = ssim(image1, fused_image);
% 计算RMSE
RMSE = sqrt(mean(mean((double(image1) - double(fused_image)).^2)));
% 计算AG
AG = average_gradient(fused_image);
% 计算EI
EI = edge_intensity(fused_image);
% 计算SD
SD = std2(fused_image);
% 计算SF
SF = spatial_frequency(fused_image);
% 计算QABF
QABF = gradient_fusion_performance(image1, image2, fused_image);
```
下面是各项指标的计算原理:
1. Cross entropy (CE): 交叉熵是比较两个概率分布的差异性的一种度量方法。在图像融合中,交叉熵可以用于评价融合图像与原始图像之间的差异程度。计算公式为:
$$
CE = - \sum_{i=1}^{N} p_i \log q_i
$$
其中,$p_i$是原始图像中像素值为$i$的像素点的概率,$q_i$是融合图像中像素值为$i$的像素点的概率。$N$为像素值的总数。
2. Entropy (EN): 熵是用来描述一个信源的不确定性的度量方法。在图像融合中,熵可以用于评价融合图像的信息量大小。计算公式为:
$$
EN = - \sum_{i=1}^{N} p_i \log p_i
$$
其中,$p_i$是融合图像中像素值为$i$的像素点的概率。$N$为像素值的总数。
3. Mutual information (MI): 互信息是比较两个信源之间关联程度的度量方法。在图像融合中,互信息可以用于评价融合图像与原始图像之间的关联程度。计算公式为:
$$
MI = \sum_{i=1}^{N} \sum_{j=1}^{N} p(i,j) \log \frac{p(i,j)}{p(i)p(j)}
$$
其中,$p(i,j)$是融合图像和原始图像中像素值分别为$i$和$j$的像素点的联合概率,$p(i)$和$p(j)$分别是融合图像和原始图像中像素值为$i$和$j$的像素点的概率。$N$为像素值的总数。
4. Peak signal-to-noise ratio (PSNR): PSNR是衡量两幅图像相似度的度量方法。在图像融合中,PSNR可以用于评价融合图像与原始图像之间的相似度。计算公式为:
$$
PSNR = 10 \log_{10} \frac{L^2}{MSE}
$$
其中,$L$是像素值的最大值,$MSE$是均方误差,计算公式为:
$$
MSE = \frac{1}{MN} \sum_{i=1}^{M} \sum_{j=1}^{N} [I(i,j) - K(i,j)]^2
$$
其中,$I$是原始图像,$K$是融合图像,$M$和$N$分别是图像的宽度和高度。
5. Structural similarity index measure (SSIM): SSIM是衡量两幅图像相似度的度量方法。在图像融合中,SSIM可以用于评价融合图像与原始图像之间的相似度。计算公式为:
$$
SSIM = \frac{(2\mu_I\mu_K + c_1)(2\sigma_{IK} + c_2)}{(\mu_I^2 + \mu_K^2 + c_1)(\sigma_I^2 + \sigma_K^2 + c_2)}
$$
其中,$\mu_I$和$\mu_K$分别是原始图像和融合图像的均值,$\sigma_I^2$和$\sigma_K^2$分别是原始图像和融合图像的方差,$\sigma_{IK}$是原始图像和融合图像的协方差,$c_1$和$c_2$是常数。
6. Root mean squared error (RMSE): RMSE是衡量两幅图像之间差异的度量方法。在图像融合中,RMSE可以用于评价融合图像与原始图像之间的差异程度。计算公式为:
$$
RMSE = \sqrt{\frac{1}{MN} \sum_{i=1}^{M} \sum_{j=1}^{N} [I(i,j) - K(i,j)]^2}
$$
其中,$I$是原始图像,$K$是融合图像,$M$和$N$分别是图像的宽度和高度。
7. Average gradient (AG): 平均梯度是衡量图像边缘信息的度量方法。在图像融合中,平均梯度可以用于评价融合图像的边缘信息。计算公式为:
$$
AG = \frac{1}{MN} \sum_{i=1}^{M-1} \sum_{j=1}^{N-1} \sqrt{(K(i,j) - K(i+1,j))^2 + (K(i,j) - K(i,j+1))^2}
$$
其中,$K$是融合图像,$M$和$N$分别是图像的宽度和高度。
8. Edge intensity (EI): 边缘强度是衡量图像边缘信息的度量方法。在图像融合中,边缘强度可以用于评价融合图像的边缘信息。计算公式为:
$$
EI = \frac{1}{MN} \sum_{i=1}^{M-1} \sum_{j=1}^{N-1} \sqrt{(K(i,j) - K(i+1,j))^2 + (K(i,j) - K(i,j+1))^2} \times |I(i,j) - I(i+1,j)| + |I(i,j) - I(i,j+1)|
$$
其中,$I$是原始图像,$K$是融合图像,$M$和$N$分别是图像的宽度和高度。
9. Standard deviation (SD): 标准差是衡量图像灰度分布均匀性的度量方法。在图像融合中,标准差可以用于评价融合图像的灰度分布均匀性。计算公式为:
$$
SD = \sqrt{\frac{1}{MN} \sum_{i=1}^{M} \sum_{j=1}^{N} [K(i,j) - \mu]^2}
$$
其中,$K$是融合图像,$M$和$N$分别是图像的宽度和高度,$\mu$是融合图像的均值。
10. Spatial frequency (SF): 空间频率是衡量图像细节信息的度量方法。在图像融合中,空间频率可以用于评价融合图像的细节信息。计算公式为:
$$
SF = \frac{1}{MN} \sum_{i=1}^{M} \sum_{j=1}^{N} \sqrt{[K(i+1,j) - K(i,j)]^2 + [K(i,j+1) - K(i,j)]^2}
$$
其中,$K$是融合图像,$M$和$N$分别是图像的宽度和高度。
11. Gradient-based fusion performance (QABF): 基于梯度的融合性能是衡量图像融合质量的度量方法。在图像融合中,基于梯度的融合性能可以用于评价融合图像的质量。计算公式为:
$$
QABF = \frac{1}{MN} \sum_{i=1}^{M} \sum_{j=1}^{N} \sqrt{(I_x(i,j) - K_x(i,j))^2 + (I_y(i,j) - K_y(i,j))^2}
$$
其中,$I$是原始图像,$K$是融合图像,$I_x$和$I_y$分别是原始图像的$x$和$y$方向的梯度,$K_x$和$K_y$分别是融合图像的$x$和$y$方向的梯度,$M$和$N$分别是图像的宽度和高度。
阅读全文