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. 图像亮度分布:直方图集中在暗区,说明图像偏暗;集中在亮区,说明偏亮。
  2. 对比度高低:直方图分布范围窄,对比度低;分布范围宽,对比度高。
  3. 是否存在过曝/欠曝:直方图两端有尖峰,说明有大量像素被截断。
  4. 图像质量评估:好的图像直方图应该分布均匀,没有明显的断层或尖峰。

你想想看,拿到一张图,先看直方图,基本就能判断出要不要做增强、怎么做增强。这就是直方图的价值所在。

1.5 直方图知识体系

下面这张图是我画的直方图知识体系框架,帮你理清本章的核心脉络:

直方图知识体系框架 直方图知识体系框架 图像直方图 定义与数学表达 灰度 vs 彩色直方图 性质与意义 h(r_k) = n_k 归一化:p(r_k) = n_k/N 灰度:单通道 彩色:RGB/HSV三通道 归一化不变性 位置无关性 直方图是图像分析的“第一眼诊断工具” 先看直方图,再做增强决策

1.6 直方图的实际应用场景

说了这么多理论,咱们看看直方图在实际项目中怎么用:

应用场景 直方图特征 处理方法
图像偏暗(欠曝) 直方图集中在左侧 直方图均衡化、伽马校正
图像偏亮(过曝) 直方图集中在右侧 直方图压缩、对比度拉伸
对比度低(雾感) 直方图分布范围窄 直方图均衡化、CLAHE
图像偏色 RGB三通道直方图偏移 直方图匹配、白平衡
图像检索 直方图相似度 直方图距离计算(巴氏距离、卡方距离)

小技巧:判断一张图是否过曝,别只看视觉感受。看直方图最右侧有没有“撞墙”——就是像素堆积在255处。如果有,说明高光细节已经丢失了,后期再怎么拉也拉不回来。