1、直方图基础:图像直方图定义、灰度直方图与彩色直方图、直方图的性质与意义
各位同学,咱们今天开始聊图像直方图。说实话,我刚开始接触图像处理时,觉得直方图不就是个柱状图嘛,有啥好学的?后来在项目中吃过亏才明白——直方图是理解图像最直观的“体检报告”。你拿到一张图,先看它的直方图,基本就能判断出这图“身体”好不好。
1.1 图像直方图的定义
直方图说白了,就是统计图像中每个灰度值出现了多少次。横轴是灰度级(0~255),纵轴是该灰度级的像素个数。
数学上定义很简单:
对于灰度级 r_k,其像素个数为 n_k
直方图函数:h(r_k) = n_k
归一化直方图:p(r_k) = n_k / N
其中 N 为图像总像素数
归一化后的直方图,纵轴变成了概率密度。我个人习惯用归一化版本,因为不同尺寸的图像之间可以直接对比。
核心要点:直方图只统计像素出现的频率,不包含像素的位置信息。同一张直方图可能对应完全不同的图像——这个坑我后面会细说。
1.2 灰度直方图与彩色直方图
灰度图只有一个通道,直方图就是一根曲线。彩色图有三个通道(RGB),每个通道都可以画一个直方图。
| 类型 | 通道数 | 直方图数量 | 典型用途 |
|---|---|---|---|
| 灰度直方图 | 1 | 1 | 亮度分布分析、对比度评估 |
| 彩色直方图 | 3(RGB) | 3 | 颜色分布分析、图像检索 |
| 彩色直方图(HSV) | 3(H/S/V) | 3 | 色调分离、光照不变性分析 |
我记得有一次做肤色检测,直接用RGB直方图效果很差。后来换成HSV空间的H通道直方图,一下子就准了。为什么?因为RGB三个通道高度相关,而HSV把色调和亮度分开了。
我的经验:做颜色分析时,优先考虑HSV或Lab空间的直方图,别死磕RGB。RGB直方图更适合做亮度相关的分析。
1.3 直方图的性质
直方图有几个重要性质,我挑最常用的说:
- 归一化不变性:直方图归一化后,图像尺寸变化不影响形状。你放大缩小一张图,归一化直方图基本不变。
- 可叠加性:两张图的直方图可以直接相加。这个性质在做图像拼接时特别有用。
- 位置无关性:直方图不记录像素位置。同一张直方图可以对应无数种空间排列的图像。
避坑指南:我曾经在项目中用直方图做图像匹配,结果两张完全不同的图直方图几乎一样——都是中等亮度、均匀分布。后来我才意识到,直方图只能描述全局统计特征,空间信息是缺失的。所以做匹配时,一定要结合空间特征(如纹理、边缘)一起用。
1.4 直方图的意义
直方图能告诉我们什么?我总结了几点:
- 图像亮度分布:直方图集中在暗区,说明图像偏暗;集中在亮区,说明偏亮。
- 对比度高低:直方图分布范围窄,对比度低;分布范围宽,对比度高。
- 是否存在过曝/欠曝:直方图两端有尖峰,说明有大量像素被截断。
- 图像质量评估:好的图像直方图应该分布均匀,没有明显的断层或尖峰。
你想想看,拿到一张图,先看直方图,基本就能判断出要不要做增强、怎么做增强。这就是直方图的价值所在。
1.5 直方图知识体系
下面这张图是我画的直方图知识体系框架,帮你理清本章的核心脉络:
1.6 直方图的实际应用场景
说了这么多理论,咱们看看直方图在实际项目中怎么用:
| 应用场景 | 直方图特征 | 处理方法 |
|---|---|---|
| 图像偏暗(欠曝) | 直方图集中在左侧 | 直方图均衡化、伽马校正 |
| 图像偏亮(过曝) | 直方图集中在右侧 | 直方图压缩、对比度拉伸 |
| 对比度低(雾感) | 直方图分布范围窄 | 直方图均衡化、CLAHE |
| 图像偏色 | RGB三通道直方图偏移 | 直方图匹配、白平衡 |
| 图像检索 | 直方图相似度 | 直方图距离计算(巴氏距离、卡方距离) |
小技巧:判断一张图是否过曝,别只看视觉感受。看直方图最右侧有没有“撞墙”——就是像素堆积在255处。如果有,说明高光细节已经丢失了,后期再怎么拉也拉不回来。