1. 直方图基础

图像直方图,说白了就是一张统计图。它告诉你图像里每种亮度值出现了多少次。我刚开始接触数字图像处理时,觉得这玩意儿太简单了——不就是数数吗?后来才发现,直方图是理解图像本质的钥匙。

什么是图像直方图

想象你有一张灰度图,每个像素的亮度在 0 到 255 之间。直方图就是统计每个亮度值有多少个像素。横轴是亮度值,纵轴是像素个数。

举个例子:一张纯黑的图,所有像素都是 0。它的直方图就只在 0 的位置有一根柱子,其他位置全是 0。一张曝光过度的图,像素都集中在 200 以上。直方图能一眼看出图像的明暗分布。

核心理解:直方图不关心像素的位置,只关心像素的数值分布。两张完全不同的图,可能有完全相同的直方图。

直方图的数学定义

数学上,直方图可以写成这样:

h(r_k) = n_k

其中:

  • r_k 是第 k 个灰度级(比如 0, 1, 2, ..., 255)
  • n_k 是灰度级 r_k 出现的像素个数
  • h(r_k) 就是该灰度级的频数

更常用的是归一化直方图:

p(r_k) = n_k / N

N 是图像总像素数。p(r_k) 表示灰度级 r_k 出现的概率,所有 p(r_k) 加起来等于 1。

我的习惯:做直方图分析时,我几乎只用归一化版本。因为不同尺寸的图像,原始频数没法直接比较。归一化后,概率分布才是真正有意义的。

直方图的性质

直方图有几个重要性质,我在项目中吃过亏才真正记住它们:

性质 说明 实际意义
位置无关性 直方图不包含空间信息 平移、旋转图像,直方图不变
可加性 子区域直方图之和等于整体直方图 可以分块处理再合并
唯一性 一张图只有一个直方图 但不同图可能有相同直方图
离散性 灰度级是离散的整数 处理时要注意量化误差

我曾经踩过的坑:做图像匹配时,我直接用直方图相似度判断两张图是否相同。结果一张猫和一张狗,因为整体亮度分布相似,直方图居然高度重合。嗯,从那以后我再也不敢只靠直方图做匹配了。

直方图的可视化

可视化直方图,最常见的就是柱状图。但实际工程中,我们更常用折线图或曲线图,因为更平滑、更容易观察趋势。

下面这张 SVG 图展示了本章的知识体系:

直方图基础 · 知识结构 图像直方图 数学定义 h(r_k) = n_k p(r_k) = n_k / N 四大性质 位置无关 · 可加 唯一 · 离散 可视化方法 柱状图 · 折线图 累积分布曲线 典型应用 亮度分析 · 对比度评估 图像增强 · 阈值分割 局限性 丢失空间信息 不同图可能同分布 直方图是图像处理的基础工具,但必须结合空间信息才能完整描述图像 后续章节的均衡化、规定化都建立在这个基础之上

如何读取直方图

拿到一张图的直方图,我一般会看这几个点:

  1. 峰值位置:像素集中在暗部还是亮部?
  2. 分布宽度:对比度高不高?分布越宽,对比度越高。
  3. 是否有断档:某些灰度级完全没有像素?说明量化损失了细节。
  4. 多峰分布:可能有多个物体或区域,每个峰对应一个主要亮度。

我建议:刚开始学的时候,找几张不同风格的图——夜景、雪景、人像、文档扫描件——分别看它们的直方图。看多了,你就能凭直方图反推图像的大致样子。这能力在调试图像处理算法时特别有用。

直方图与图像质量

直方图还能反映图像质量。你想想看:

  • 曝光不足:直方图整体偏左,右边大片空白
  • 曝光过度:直方图整体偏右,左边大片空白
  • 低对比度:直方图集中在中间窄带
  • 高对比度:直方图覆盖整个范围,两端都有像素

这些特征,一眼就能看出来。我在做图像采集系统时,就用直方图实时监控相机曝光是否正常。比人眼判断快多了。

小结

直方图是图像处理的地基。它简单,但强大。理解直方图,你就能看懂图像的「脾气」——是暗是亮,对比度够不够,细节有没有丢失。后面的均衡化和规定化,都是在这个地基上盖房子。

嗯,这一章就到这里。记住:直方图不完美,但它是最直观的图像统计工具。用好它,你的图像处理之路会顺畅很多。