ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

图像融合评估指标全解析:SSIM、MI与QAB/F的应用

图像融合评估指标全解析:SSIM、MI与QAB/F的应用 1. 先回答一个更底层的问题融合网络的输出到底拿什么做参照1.1 超分有真值融合没有标准融合图做图像融合的人几乎都被同一个问题卡过模型训练完了融合图肉眼看确实不错但到了写论文、跑对比实验的时候客观指标一列自己都说不清哪个数字代表什么。为什么会这样因为图像融合和超分辨率、去噪、修复这类低级视觉任务有一个本质区别你没有 ground truth。超分可以拿高分辨率图当真值去噪可以拿干净图当真值分割有 label检测有框。融合呢你给我一张可见光图加一张红外图我应该输出的标准融合图长什么样这个问题本身就没有唯一答案。同一组输入完全可能存在两张同样合理但风格不同的理想融合结果一张更偏可见光纹理一张更偏红外目标你没法说哪张对。所以融合评估不像其他任务那样算一个 PSNR/SSIM 和真值比一比就完事。它需要一套没有真值也能评的策略这也是通用评估指标这个词在融合方向特别重要的原因。这里说的通用指的是不依赖某个具体任务定制逻辑、可以跨多聚焦、多曝光、红外可见光、医学影像等融合场景反复使用的一套指标集合。1.2 三类评估范式有参考、半参考、无参考既然没有真值那参考从哪来答案是源图像。这是刚入门时最容易绕晕的概念。很多资料把 SSIM、互信息 MI 这类归成有参考指标你以为参考的是融合真值其实参考的是融合前的多张源图。真正准确的说法是这类指标衡量的是融合结果与各源图之间的关系而不是和某个标准答案的关系。以这个为基础评估范式大致分三类有参考类其实是依赖源图类SSIM、MI、QAB/F、VIF、PSNR 变体。它们通过计算融合图和源图之间的结构相似度、信息量保留程度、边缘传递效率来打分。半参考类部分指标只需要源图的部分统计信息比如某频段能量就能估算质量融合里用得少常见于视频质量评估。无参考类只看融合图本身。信息熵 EN、标准差 SD、平均梯度 AG、空间频率 SF以及 QNR 这种专门为遥感融合设计的无参考指标。理解了这个分类你再去看论文里的指标表格就不会觉得它们是一堆互不相干的数字。每种指标本质上都在回答一个不同的问题结构像不像信息留没留住边缘保没保住看起来自不自然1.3 指标之间为什么经常互相矛盾这一点值得在开头就讲清楚。融合质量有两个核心维度信息保持和视觉感知。信息保持关心的是融合图里有没有把所有源图的重要信息都装进来视觉感知关心的是人眼看着舒不舒服、有没有伪影、纹理是否自然。这两个目标不是总一致的。一张融合图如果做了强锐化视觉上可能很清晰但边缘周围会出现伪影如果做平滑降噪结构很干净但纹理细节和信息量又下降了。于是你会发现锐化过的融合图 AG 和 SF 很高SSIM 却偏低平滑过的图 SSIM 还行互信息 MI 却掉下去了。指标打起来架不是写错了是它们本身衡量的就是不同性质。所以后面提到的每一种指标我都会把它的偏向性讲清楚再给你一个配合使用的思路而不是丢一堆公式让你自己琢磨。2. 高频评估指标逐个拆解数学直觉与最小实现2.1 结构相似性 SSIM融合论文的标配之一SSIM 是 Wang 等人提出的结构相似性指标核心假设是人眼对图像的感知主要来自局部结构的对比而不是逐像素差值。它把一个图像块分解成三个分量亮度、对比度、结构然后分别比较。公式核心大致是[ SSIM(x,y)\frac{(2\mu_x\mu_yC_1)(2\sigma_{xy}C_2)}{(\mu_x^2\mu_y^2C_1)(\sigma_x^2\sigma_y^2C_2)} ]其中 (\mu) 是均值(\sigma) 是方差(\sigma_{xy}) 是协方差(C_1,C_2) 是防除零的小常数。这个公式说明三件事均值接近代表亮度保留得好方差接近代表对比度保留得好协方差高代表结构变化一致。在融合评估里SSIM 不是直接把融合图和一个真值比而是分别算 (SSIM(a,f)) 和 (SSIM(b,f))再做一个平均或加权操作。常见做法是取两者均值也有论文用最大值认为融合图只要很好地保留了某一侧的结构就算成功。我个人在做多聚焦融合对比时更推荐均值因为最大值策略会掩盖掉另一张源图信息丢失的事实。Python 里用 scikit-image 实现非常直接from skimage.metrics import structural_similarity as ssim score_a ssim(img_a, img_f, data_range255, win_size11) score_b ssim(img_b, img_f, data_range255, win_size11) score (score_a score_b) / 2.0这个指标之所以被广泛接受是因为它对轻微噪声不敏感与人眼的结构感知比较吻合。但它也有一个明显短板窗口平均会把局部细节磨掉两张图如果整体亮度结构很接近但局部纹理差异很大SSIM 仍然可能给出高分。所以单独拿 SSIM 作为网络优劣的唯一依据很容易翻车。2.2 互信息 MI用信息论量化保留了多少源图信息互信息衡量的是两个变量之间的统计相关性用在融合评估里表达的是融合图像 (f) 从源图 (a) 和 (b) 中继承了多少信息。它的定义来自信息熵[ MI(a,f) H(a) H(f) - H(a,f) ]其中 (H(\cdot)) 是信息熵(H(a,f)) 是联合熵。融合总互信息通常写成[ MI_{total}(a,b,f) MI(a,f) MI(b,f) ]实现思路是先对图像灰度做离散化统计联合直方图再算熵。一个用 NumPy 写的最小实现大概是这样的import numpy as np def mutual_information(img_x, img_y, bins256): hist_xy, _, _ np.histogram2d( img_x.ravel(), img_y.ravel(), binsbins, range[[0, 255], [0, 255]] ) p_xy hist_xy / hist_xy.sum() p_x p_xy.sum(axis1, keepdimsTrue) p_y p_xy.sum(axis0, keepdimsTrue) h_x -(p_x * np.log2(p_x 1e-12)).sum() h_y -(p_y * np.log2(p_y 1e-12)).sum() h_xy -(p_xy * np.log2(p_xy 1e-12)).sum() return h_x h_y - h_xy注意上面代码里我加了一个 (1e-12) 的 epsilon防止 log 0 报错这是实际写评估脚本时最容易漏的问题。互信息的好处是它不关心像素具体长什么样只关心灰度分布的对应关系所以对跨模态图像融合特别友好——红外图和可见光图在像素级别差异很大但在统计相关性上仍然能反映出信息是否被保留。缺点是它是全局统计完全忽略空间结构。两张图一张左亮右暗一张左暗右亮只要灰度分布相同MI 可能算出来一样。另外直方图 bins 的选取对结果影响很大后面踩坑部分会细讲。2.3 QAB/F基于边缘信息传递的融合质量指标QAB/F 是 Xydeas 和 Petrovic 提出的边缘信息保持度指标全称是 gradient-based fusion performance。它的基本逻辑是人眼对图像的理解很大程度上依赖边缘和轮廓所以只要融合图把源图里的边缘信息完整搬运过来就可以认定融合质量高。计算过程分四步用 Sobel 算子分别提取源图 (a)、(b) 和融合图 (f) 的边缘强度 (g) 和边缘方向 (\alpha)。对源图 (a) 和融合图 (f) 的每个像素计算边缘强度保持系数 (Q_g^{af}) 和方向保持系数 (Q_\alpha^{af})。保持系数通过比较 (g) 的比值接近 1 的程度、(\alpha) 的角度差大小来得到一般会套一个 sigmoid 形式的函数让比值越接近 1、角度差越小时分数越高。将两者相乘得到该像素的边缘信息保持度 (Q^{af} Q_g^{af} \cdot Q_\alpha^{af})。对 (a) 和 (f)、(b) 和 (f) 分别计算加权平均权重一般取源图边缘强度[ Q^{AB/F}\frac{\sum_{i,j}(Q^{af} w^a_{ij} Q^{bf} w^b_{ij})}{\sum_{i,j}(w^a_{ij}w^b_{ij})} ]这个指标最容易被新手忽略的是它计算前需要把图像转成灰度并且对图像中的噪声非常敏感。Sobel 算子本质上是一种高通滤波如果融合图里有细小的伪影或噪声这些高频成分会被当成边缘干扰后续的强度和方向估计。实测下来QAB/F 对轻微模糊最敏感融合图只要稍微偏平滑分值明显下降因此它特别适合作清晰度维度的主指标。2.4 感知类指标的借调逻辑VIF、LPIPS 与深度学习特征传统指标之后这几年越来越多人把图像质量评价里的感知指标直接搬到融合评估里。VIFVisual Information Fidelity是其中一个代表。它基于自然场景统计模型衡量融合图像中有多少视觉信息被保真地传递给了人眼。VIF 的好处是它有一个完整的 HVS 模型坏处是实现复杂、参数多不同开源实现的结果有差异。更受年轻研究者欢迎的是 LPIPSLearned Perceptual Image Patch Similarity。LPIPS 先把图像送进一个预训练的 VGG 或 ResNet提取多层特征然后计算两张图在特征空间的距离值越低代表感知上越接近。在融合任务中使用 LPIPS一般做法是把融合图和每张源图计算 LPIPS取平均作为一项附加指标用来衡量融合结果和源图在语义特征层面的符合程度。我在实际测试中发现LPIPS 对医学影像这种和 ImageNet 分布差异较大的数据非常不稳定同一个结果在 ImageNet 预训练 VGG 下可能得分不错换医学数据训练的模型就完全对不上感觉。所以这个指标更适合自然图像场景跨领域使用需要谨慎解释。2.5 无参考统计指标信息熵、标准差、平均梯度、空间频率这几个指标看起来简单但它们是保底配置几乎所有融合论文都会附上。信息熵 EN 描述融合图包含的信息量直接计算灰度直方图分布的信息熵[ EN -\sum_{i0}^{255} p_i \log_2 p_i ]标准差 SD 衡量图像对比度灰度分布越分散标准差越大。平均梯度 AG 是像素级梯度幅度的均值空间频率 SF 是行方向频率和列方向频率的均方根[ SF \sqrt{\frac{1}{MN}\sum_{i,j}\left(RF^2 CF^2\right)} ]其中 RF 是行差分频率CF 是列差分频率。它们的共同优点是计算简单、稳定、不需要源图参与适合做消融实验里的辅助证据。共同缺点是很容易被骗一张加了很多椒盐噪声的融合图因为灰度分布被噪声打散EN 和 SD 反而很高一张边缘过度锐化的图AG 和 SF 也会虚高。所以这类无参考指标只适合横向比较不适合作为质量好坏的绝对标准。3. 面对不同融合任务指标选型的差异比想象中大3.1 同类源图像融合多聚焦、多曝光场景的指标偏好多聚焦融合和多曝光融合的输入源图来自同一个传感器只是成像参数不同。这类任务里源图之间天然具有强烈的结构一致性像素分布也处在相似的动态范围所以几乎传统指标都能用。多聚焦融合还有一个额外优势很多数据集可以用景深渲染原理合成带真值标签的数据于是部分论文会直接在这些合成数据上计算 PSNR 和 SSIM把它们当成有真值任务来做。这没有问题但我建议同时报告 QAB/F因为合成数据往往过于理想真值 SSIM 高不代表真实场景下同样有效。多曝光融合因为涉及亮度域的变化我一般会额外关注 VIF 这类感知指标单纯的 MI 在曝光差异大时意义有限。曝光差异主要体现在局部过曝或欠曝区域而这些区域的灰度被压缩到边界直方图统计难以反映细节保留情况。3.2 跨模态融合红外可见光、医学影像的指标偏好跨模态融合是另一个典型场景输入来自完全不同物理原理的传感器可见光提供纹理、颜色和背景细节红外提供热辐射目标信息医学 MRI/PET 更是结构图和功能图的组合。这种任务里源图之间的灰度分布几乎没有直接可比性因此 I 类指标灰度结构相似度就不如信息论指标好用。互信息 MI 因为只依赖统计分布能较好反映跨模态信息保留。QAB/F 同样适用因为边缘在跨模态图像里依然是语义上有意义的特征——热目标边缘、解剖结构边缘都存在。我在做红外可见光融合测试时通常会把 MI 和 QAB/F 作为主指标SSIM 作为辅助参考。同时因为红外图和可见光图的分辨率往往不一致做指标计算前必须先把两者 resize 到同一尺寸这一步很多复现代码没有处理好结果会出现离谱误差。3.3 我给不同任务开出的指标套餐实际操作中我不支持追求指标越多越好。指标越多矛盾和不确定因素越多。你应该根据任务特性选择 3 到 4 个核心指标再配合可视化主观对比构成一个完整评估方案。下表是给不同任务类型的参考搭配任务类型主指标辅助指标说明多聚焦融合QAB/F、SSIMSF、EN重点看边缘清晰度和结构保持多曝光融合VIF、SSIMAG、EN关注视觉自然感和信息量红外可见光融合MI、QAB/FEN、SF信息保留与目标边缘是关键医学图像融合MI、QAB/FSSIM、SD解剖细节不可丢失边缘谨慎处理遥感全色锐化QNRSAM、ERGAS空间与光谱保真要同时评估QNR 是一个专门为遥感全色锐化设计的无参考指标它不需要融合真值通过分析融合图与多光谱源图的空间一致性和光谱一致性来判断质量。这个指标不适用于自然图像融合却是遥感方向投稿的硬通货。如果你做的是遥感融合建议直接单独使用 QNR 家族指标。4. 实验环节最容易翻车的五个细节4.1 归一化和位深的隐形雷区这是我见过最频繁的翻车点而且坑得非常隐蔽。很多公开数据集里的图像是 uint8 格式像素范围 0 到 255但也有一些是我们自己处理出来的浮点图范围可能是 0 到 1。如果你直接用同一套脚本计算 SSIMdata_range 参数如果传错结果会差得很离谱。例如 scikit-image 的 structural_similarity 要求显式指定 data_range# 正确做法uint8 图像 score ssim(img_a, img_f, data_range255) # 错误做法uint8 图像却按 0-1 范围计算 score ssim(img_a, img_f, data_range1.0) # 结果会严重偏低另外一个更隐蔽的问题模型输出经常是 0 到 1 的浮点图很多复现脚本直接用它算指标。但如果你在指标计算前做了一次 gamma 校正或 clip 操作几次操作叠加之后你的指标反映的就不再是网络性能而是后处理参数。正确做法是在论文里明确写出指标计算使用的像素范围并保证所有对比方法都走同一条后处理管线。4.2 直方图 bins 和梯度阈值这类参数的敏感性互信息的 bins 选择是典型例子。同一个融合结果用 256 bins 算 MI 可能是 3.2用 64 bins 可能变成 2.5而且不同 bins 下方法排名还可能发生变化。原因是 bin 数决定了直方图的粗糙程度bin 太稀疏灰度细节被合并熵被低估bin 太密集联合直方图大量为空估计不稳定。我的经验是有参考对比实验时全数据集统一用 256 bins不要每张图单独调整。对于高分辨率图像超过 1024×1024可以降到 128 bins 提速但不建议低于 128。QAB/F 默认实现里有两个灵敏度参数 p 和 k它们控制了强度保持系数和方向保持系数的 sigmoid 陡峭程度。很多开源实现直接用默认值但如果是低对比度医学图像边缘强度普遍偏低直接用默认参数会得到偏低的 QAB/F。我建议在正式跑实验前先用两张典型图画一下边缘强度直方图看分布是否合理必要时再统一调整。切记所有对比方法必须使用同一套参数不要为了自己方法刷高分而单独改参数审稿人查出来会很麻烦。4.3 SSIM 在灰度、多通道计算上的口径问题处理彩色图像时SSIM 有两种计算口径直接在 RGB 三通道上算或者先转 YCbCr 只算亮度分量。用不同口径得到的结果差异能达到 0.01 以上这个数字在论文对比表里已经足够影响排名。我的建议是所有对比统一使用灰度口径也就是先转 YCbCr只对 Y 通道计算指标。原因有两个一是 SSIM 本身是基于亮度感知设计的色度通道对结构判断贡献小二是很多公开数据的评测脚本都默认转灰度转灰度后你的结果才和别人报告的数字可比。如果你一定要用三通道计算skimage 需要显式传 channel_axisscore_rgb ssim(img_a, img_f, data_range255, channel_axis-1)但请注意这个计算结果是三通道的均值和灰度口径的结果不能混着比较。4.4 指标互相打架时应该怎么办这是所有做融合的人都会遇到的时刻你的方法在 QAB/F 上领先了 0.02MI 却比 baseline 低了 0.15另一篇论文的指标组合里 SSIM 很高但你复现出来的 EN 却一般。出现这种情况不要第一时间怀疑代码写错而要认真分析指标背后的含义。我总结了一个非常实用的指标打架解读表现象可能原因建议分析方向SSIM 高、MI 低融合图过于平滑结构保留但细节纹理被抹掉检查融合图是否丢失高频纹理GT 边缘是否变糊EN 高、QAB/F 低噪声或伪影抬高了熵边缘被污染用细节放大图查看是否存在振铃或椒盐噪声AG 高、SSIM 低边缘过度锐化产生伪边缘检查是否做了额外锐化后处理MI 高、SF 低灰度分布接近但空间细节贫乏可能融合策略偏向平均细节被压制写论文时如果某个指标不占优势不要回避它。更专业的做法是承认该指标反映的维度上当前方法有局限并解释这是模型设计中的某种权衡。这比故意少报一个指标要可信得多。4.5 开源实现之间的不可比问题融合评估指标的开源实现五花八门Matlab 有经典 Image Fusion ToolboxPython 有各种零散脚本不同实现之间对边界条件、卷积 padding、图像边界处理的策略不同算出来的结果能差出好几个百分点。我踩过一次很深的坑用 Matlab 版 QAB/F 算出来的 baseline 分数和用某个 Python 复现算出来的差 0.05当时以为模型出了问题折腾了一整天才发现两个实现对边缘像素的处理策略不同。后来我定了一条规则同一篇论文里所有指标统一用同一套代码计算不混用多个开源实现并在论文的实验设置里明确写清楚所有指标均使用我们统一实现的评估脚本。如果你要兼容已有发表的对比数字只比较对方论文里明确公布了数值的指标不做二次复现指标的横向拼凑。5. 论文报告指标时的规范与最新趋势5.1 传统六件套还能打多久目前融合方向论文里最常见的指标组合是 MI、QAB/F、SSIM、PSNR、EN、SF俗称六件套。这套组合之所以长盛不衰是因为审稿人熟悉它们而且一个表格里同时放上信息类、结构类、无参考类指标看起来比较全面。但近两年有明显信号表明这套组合在松动。一些高水平论文开始把 LPIPS、DISTS、DeepSim 这类基于深度特征的感知指标加进表里专门用来评估融合结果的语义一致性。原因也很直接传统指标在像素和 shallow 边缘层面打转难以反映深度网络在不同尺度上的语义损失而 LPIPS 在特征空间计算距离能捕捉到传统指标看不见的语义漂移。我个人的判断是未来两年融合评估大概率会演变成传统指标 感知指标双层结构。如果你现在开始做融合方向的投稿建议至少补一个 LPIPS 或 DISTS 结果这不仅增加说服力也能应对审稿人对指标体系的追问。5.2 只看均值不看方差容易被审稿人攻击很多同学的对比表只有一个均值数字没有方差没有显著性检验这个在审稿人眼里是明显漏洞。两个方法在 QAB/F 上差 0.005如果没有统计检验谁也不能说明这个方法真的更好。处理方式并不复杂固定测试集不变同一个方法跑多次或对 Dataloader 做不同的随机裁剪记录每一次的指标值最后报告 mean ± std。如果计算资源有限至少要做到对测试集逐张图给出指标列表然后用配对 t 检验或 Wilcoxon 符号秩检验衡量两个方法之间的差异是否显著。另外关于最优指标排名不要只加粗自己方法所有的最高分。审稿人看到所有指标全是最优第一反应不是你有多强而是你只挑了有利的测试集并做了针对性调参。更稳妥的是在对比表里同时暴露一些次优指标并在正文里解释权衡这反而显得严谨。5.3 一套相对稳妥的完整评估方案回到标题说的问题图像融合网络的通用评估指标怎么搭配才足够严谨。我在多个融合项目里跑下来总结了一套兼具说服力和可复现性的方案核心指标固定选四个QAB/F、SSIM、MI、EN分别覆盖边缘、结构、信息、内容量四个维度。依据任务类型补一个专项指标多聚焦补 SF多曝光补 VIF医学补 SD遥感换 QNR。新增一个感知类指标自然图像任务建议 LPIPS有条件和数据支持可以再加 DISTS。所有指标统一数据位深、统一代码实现、统一参数。除了一张全局指标表再额外给三张典型图的局部放大对比以及至少一位观察者做主观评分。这套组合不是最省事的但它在审稿人眼里是完整且严谨的。尤其最后一条主观对比非常关键。客观指标再全面也不能替代人眼对融合伪影的感知。很多指标高分的方法在局部放大图上会出现明显的颜色偏移或边缘荧光这种问题只有可视化才能暴露。代码层面下面是我常用的计算模板融合进你自己的流程里稍作修改即可import numpy as np from skimage.metrics import structural_similarity as ssim def compute_fusion_metrics(img_a, img_b, img_f, data_range255): # 统一转灰度 if img_a.ndim 3: img_a rgb_to_y(img_a) img_b rgb_to_y(img_b) img_f rgb_to_y(img_f) ssim_score (ssim(img_a, img_f, data_rangedata_range) ssim(img_b, img_f, data_rangedata_range)) / 2.0 mi_score (mutual_information(img_a, img_f) mutual_information(img_b, img_f)) / 2.0 qabf_score edge_based_fusion_quality(img_a, img_b, img_f) en_score image_entropy(img_f) return { SSIM: ssim_score, MI: mi_score, QAB/F: qabf_score, EN: en_score }这段模板没写 rgb_to_y 和 edge_based_fusion_quality 的完整实现因为后者涉及多步滤波和方向统计篇幅太长你可以在官方图像融合工具箱里找到成熟实现。关键是保持所有对比方法走完全相同的函数。5.4 最后的一点个人经验回到开头说的那段尴尬经历。后来我复盘那次实验发现SSIM 差 0.003 是因为复现 baseline 时把边缘 padding 方式搞错了MI 高 0.1 是因为我的网络确实在纹理细节上保留得更好而 QAB/F 对不上是因为两个工具包对 Sobel 边缘的归一化方式不同。三件事混在一起搞得我一度怀疑模型本身。这件事给我的教训是图像融合的评估环节与其说是找一堆指标证明我的方法最强不如先建立一套对自己完全透明的评估管道。跑任何实验之前先把所有指标的输入输出、参数含义、数据范围固定下来甚至可以先在几张已知好坏的图上做 sanity check确认指标能正确反映好坏趋势再拿去做正式对比。评估指标是手段不是目的。一个指标的组合再漂亮也不如融合结果本身经得起人眼推敲。把指标当成帮助你发现问题、定位短板的工具而不是论文里用来装点门面的数字你会发现很多训练阶段的调参决策也会变得更清晰。这也是我在多次踩坑之后最想告诉你的经验。
返回列表