基于颜色直方图的图像相似性度量工具
项目简介
本项目是一个基于 MATLAB 开发的图像对比分析系统。它通过提取图像的颜色特征,计算并量化两幅图像之间的视觉相似度。系统首先将图像转换至 HSV 颜色空间,提取 H(色调)、S(饱和度)、V(明度)三个通道的直方图特征,并结合四种经典的统计学算法(直方图交叉法、巴哈塔恰里亚系数、相关系数、卡方距离)进行加权综合评分。该工具能够有效地衡量图像在颜色分布上的相似程度,适用于图像检索、去重和分析等场景。
功能特性
- 交互式图像选择:通过系统文件对话框选择图像,如用户取消选择,系统自动生成随机噪声图像进行演示。
- 格式广泛支持:支持 JPG, JPEG, PNG, BMP, TIF 等主流图像格式。
- 图像预处理:自动将输入图像归一化为 double 类型,并统一缩放至 256x256 像素,消除尺寸差异对算法的影响。
- HSV 颜色空间分析:将图像从 RGB 转换为 HSV 空间,因为 HSV 模型比 RGB 更接近人类对颜色的感知方式。
- 多维度相似性算法:实现了四种不同的数学度量方法,并对负值和距离进行了归一化映射。
- 加权评分机制:针对 H、S、V 通道赋予不同权重(H=0.5, S=0.25, V=0.25),更加侧重于色调的对比。
- 直观的可视化结果:输出包含原图对比、综合相似度评分以及 H/S/V 三个通道的直方图重叠对比曲线。
- 详细的分析报告:在命令行窗口输出每种算法的具体得分及最终的加权平均分。
系统要求
- MATLAB R2014b 或更高版本(代码中使用了
histcounts 函数)。 - Image Processing Toolbox(图像处理工具箱)。
使用方法
- 将项目代码保存为
main.m 文件。 - 在 MATLAB 命令窗口中运行
main。 - 系统将弹出第一次文件选择框,请选择“基准图像(图像 1)”。
- 系统将弹出第二次文件选择框,请选择“对比图像(图像 2)”。
- 等待程序运行完毕,查看弹出的可视化窗口和命令行输出的相似度报告。
核心算法与代码逻辑分析
本项目的主程序 main 严格按照以下逻辑流程执行:
1. 图像读取与预处理
程序首先根据用户选择的路径读取两幅图像。为了确保计算的一致性,使用
im2double 将图像数据转换为双精度浮点型,并利用
imresize 函数将两幅图像强制缩放到
[256, 256] 的标准尺寸。
2. HSV 颜色空间转换
考虑到 RGB 空间中颜色分量之间的高相关性以及对光照的敏感性,代码调用
rgb2hsv 将图像转换至 HSV 空间。
- H (Hue):色调,描述颜色的种类。
- S (Saturation):饱和度,描述颜色的纯度。
- V (Value):明度,描述颜色的亮度。
3. 直方图特征提取
系统通过
computeHSVHistograms 子函数计算直方图:
- 分箱 (Binning):对 H、S、V 三个通道分别划分 30 个区间(Bins)。
- 统计:使用 MATLAB 的
histcounts 函数统计像素分布。 - 归一化:采用 L1 范数(除以总像素数),将直方图转换为概率分布,确保得分为 0 到 1 之间,不受由于图像内容总像素数不同带来的误差影响。
4. 相似度计算策略
代码定义了权重向量
weights = [0.5, 0.25, 0.25],认为色调(H)主要决定视觉相似性。针对每个通道,计算以下四种指标,并按权重加权求和:
- 直方图交叉法 (Histogram Intersection)
*
原理:计算两个直方图重叠部分的面积。
*
代码实现:
sum(min(H1, H2))。对于归一化直方图,结果范围 [0, 1],1 表示完全相同。
- 巴哈塔恰里亚系数 (Bhattacharyya Coefficient)
*
原理:测量两个概率分布的重叠量,通过几何平均数积分近似。
*
代码实现:
sum(sqrt(H1 .* H2))。结果范围 [0, 1],1 表示完全相同。
- 相关系数 (Correlation Coefficient)
*
原理:衡量两个直方图分布的线性相关程度。
*
代码实现:使用
corrcoef 函数。
*
处理:原始结果为 [-1, 1]。代码通过
max(0, score) 将负相关截断为 0,仅关注正相关部分。
- 卡方相似度 (Chi-Square Similarity)
*
原理:基于卡方统计量衡量分布差异。
*
代码实现:
sum((H1 - H2).^2 ./ (H1 + H2 + epsilon))。
*
映射:原始结果为距离(值越小越相似,归一化数据的最大距离为 2)。代码通过公式
1 - (distance / 2) 将其转换为 [0, 1] 的相似度评分。
5. 综合评分
最终的“综合相似度 (Grand Similarity)”是上述四种加权算法结果的算术平均值:
grand_similarity = (final_intersect + final_bhat + final_corr + final_chi) / 46. 结果可视化
代码使用
stairs 函数绘制阶梯状直方图,清晰展示离散数据的分布轮廓。同时使用
area 函数在图表中用绿色半透明区域填充两个直方图的重叠部分,直观地反映了“直方图交叉”的物理意义。
输出示例
命令行输出:
========================================
图像相似度分析报告
========================================
算法度量指标 (加权平均后):
- 直方图交叉法 (Intersection): 0.8523
- 巴氏系数 (Bhattacharyya): 0.9102
- 相关系数 (Correlation): 0.8845
- 卡方相似度 (Chi-Square): 0.8760
----------------------------------------
最终综合评分 (0-1): 0.8807
========================================
图形界面:
窗口顶部显示原图对比,底部显示 H、S、V 三个通道的直方图对比曲线(红线为图1,蓝虚线为图2,绿色区域为重叠相似部分)。