基于MATLAB的图像融合评价指标实现方案

基于MATLAB的图像融合评价指标实现方案,包含PSNR、SSIM、MI、AG、SF等核心指标的代码实现及原理详解


一、核心指标实现代码

1. 峰值信噪比(PSNR)

function psnr_val = calculate_psnr(img1, img2)
    % 计算峰值信噪比(单位:dB)
    if size(img1,3) == 3
        img1 = rgb2gray(img1);
        img2 = rgb2gray(img2);
    end
    img1 = im2double(img1);
    img2 = im2double(img2);
    
    mse = mean((img1(:) - img2(:)).^2);
    if mse == 0
        psnr_val = Inf;
    else
        max_pixel = 1; % 归一化到[0,1]范围
        psnr_val = 10 * log10(1 / mse);
    end
end

2. 结构相似性指数(SSIM)

function ssim_val = calculate_ssim(img1, img2)
    % 计算结构相似性指数
    if size(img1,3) == 3
        img1 = rgb2gray(img1);
        img2 = rgb2gray(img2);
    end
    img1 = im2double(img1);
    img2 = im2double(img2);
    
    [m, n] = size(img1);
    window = fspecial('gaussian', [11 11], 1.5);
    K = [0.01 0.03];
    L = 1;
    
    C1 = (K(1)*L)^2;
    C2 = (K(2)*L)^2;
    
    mu1 = filter2(window, img1, 'valid');
    mu2 = filter2(window, img2, 'valid');
    
    mu1_sq = mu1.^2;
    mu2_sq = mu2.^2;
    mu1_mu2 = mu1 .* mu2;
    
    sigma1_sq = filter2(window, img1.^2, 'valid') - mu1_sq;
    sigma2_sq = filter2(window, img2.^2, 'valid') - mu2_sq;
    sigma12 = filter2(window, img1 .* img2, 'valid') - mu1_mu2;
    
    numerator = (2*mu1_mu2 + C1) .* (2*sigma12 + C2);
    denominator = (mu1_sq + mu2_sq + C1) .* (sigma1_sq + sigma2_sq + C2);
    
    ssim_map = numerator ./ denominator;
    ssim_val = mean(ssim_map(:));
end

3. 互信息(MI)

function mi_val = calculate_mutual_information(img1, img2, num_bins)
    % 计算互信息量
    if size(img1,3) == 3
        img1 = rgb2gray(img1);
        img2 = rgb2gray(img2);
    end
    img1 = im2double(img1);
    img2 = im2double(img2);
    
    [counts1, ~] = imhist(img1, num_bins);
    [counts2, ~] = imhist(img2, num_bins);
    [joint_counts, ~, ~] = imhist2(img1, img2, num_bins);
    
    p1 = counts1 / numel(img1);
    p2 = counts2 / numel(img2);
    p_joint = joint_counts / numel(img1);
    
    H1 = -sum(p1(p1 > 0) .* log2(p1(p1 > 0)));
    H2 = -sum(p2(p2 > 0) .* log2(p2(p2 > 0)));
    H_joint = -sum(p_joint(p_joint > 0) .* log2(p_joint(p_joint > 0)));
    
    mi_val = H1 + H2 - H_joint;
end

4. 平均梯度(AG)

function ag_val = calculate_average_gradient(img)
    % 计算平均梯度(清晰度指标)
    if size(img,3) == 3
        img = rgb2gray(img);
    end
    img = im2double(img);
    
    [dx, dy] = gradient(img);
    gradient = sqrt(dx.^2 + dy.^2);
    ag_val = mean(gradient(:));
end

5. 空间频率(SF)

function sf_val = calculate_spatial_frequency(img)
    % 计算空间频率
    if size(img,3) == 3
        img = rgb2gray(img);
    end
    img = im2double(img);
    
    [rows, cols] = size(img);
    RF = 0;
    CF = 0;
    
    for i = 1:rows
        for j = 2:cols
            RF = RF + (img(i,j) - img(i,j-1))^2;
        end
    end
    
    for j = 1:cols
        for i = 2:rows
            CF = CF + (img(i,j) - img(i-1,j))^2;
        end
    end
    
    sf_val = sqrt(RF/(rows*cols) + CF/(rows*cols));
end

二、综合评估函数

function metrics = evaluate_fusion(reference, fused, source1, source2)
    % 综合评估融合质量
    metrics = struct();
    
    % 转换为双精度浮点型
    reference = im2double(reference);
    fused = im2double(fused);
    source1 = im2double(source1);
    source2 = im2double(source2);
    
    % 计算各项指标
    metrics.PSNR = calculate_psnr(reference, fused);
    metrics.SSIM = calculate_ssim(reference, fused);
    metrics.MI = calculate_mutual_information(source1, fused, 256) + ...
                 calculate_mutual_information(source2, fused, 256);
    metrics.AG = calculate_average_gradient(fused);
    metrics.SF = calculate_spatial_frequency(fused);
    metrics.STD = std(fused(:));
end

三、使用示例

% 读取图像
reference = imread('source1.jpg');
source2 = imread('source2.jpg');
fused = imread('fused_image.jpg');

% 计算指标
results = evaluate_fusion(reference, fused, source1, source2);

% 输出结果
fprintf('=== 融合质量评估结果 ===
');
fprintf('PSNR: %.4f dB\n', results.PSNR);
fprintf('SSIM: %.4f\n', results.SSIM);
fprintf('MI: %.4f\n', results.MI);
fprintf('AG: %.4f\n', results.AG);
fprintf('SF: %.4f\n', results.SF);
fprintf('STD: %.4f\n', results.STD);

四、关键参数说明

指标名称 取值范围 最佳值 物理意义
PSNR [0, ∞) >30 dB 图像失真程度
SSIM [0, 1] 接近1 结构相似性程度
MI [0, ∞) 越高越好 信息保留程度
AG [0, ∞) 越高越好 图像清晰度
SF [0, ∞) 越高越好 灰度变化频率
STD [0, 1] 越高越好 细节丰富程度

参考代码 图像融合的评价指标程序代码 www.youwenfan.com/contentcnk/79017.html

五、注意事项

  1. 输入图像需为相同尺寸
  2. 彩色图像建议先转换为灰度图
  3. MI计算需保证图像数据类型为双精度
  4. 多指标综合评估时建议加权处理
posted @ 2025-11-04 10:16  我是一只小小鸟~  阅读(6)  评论(0)    收藏  举报