1. 图像直方图基础

图像直方图,说白了就是一张图的「像素统计报告」。我刚开始接触图像处理时,总觉得这玩意儿不就是个柱状图嘛,有啥好学的?直到有一次做工业检测项目,产品表面瑕疵死活看不出来,一画直方图,问题立马暴露——嗯,从那以后我再也不敢小看它了。

1.1 直方图的核心概念

什么是直方图?简单说,它统计了图像中每个灰度级(或颜色通道)上出现了多少个像素。横轴是灰度值(0~255),纵轴是像素个数或频率。

直方图的本质:一张图像的概率密度估计。它不关心像素「在哪」,只关心「有多少」。

举个例子。一张 256×256 的图像,总共 65536 个像素。如果灰度值 128 上有 1024 个像素,那直方图在 128 处的柱高就是 1024。你想想看,这能告诉我们什么?

  • 图像整体亮度——柱子集中在左边,图偏暗;集中在右边,图偏亮。
  • 对比度高低——柱子分布窄,对比度低;分布宽,对比度高。
  • 是否有过曝/欠曝——柱子顶到 0 或 255 边界,说明有信息丢失。

我的经验:做图像预处理时,我习惯先看一眼直方图。如果直方图两端「撞墙」,说明有像素被截断了,这时候做增强效果会很差。先做裁剪或归一化,再动手。

1.2 灰度直方图

灰度直方图是最基础的形式。它只处理单通道灰度图像,横轴 0~255,纵轴像素计数。

在 MATLAB 里,画灰度直方图就一行代码:

% 读取灰度图像
img = imread('cameraman.tif');
% 显示直方图
imhist(img);
% 或者获取数据
[counts, binLocations] = imhist(img);

这里 counts 是每个灰度级的像素个数,binLocations 是对应的灰度值。我个人习惯用 imhist 快速预览,用 histogram 做更精细的控制。

直方图形态 图像特征 常见场景
窄峰居中 低对比度,灰度集中 雾天、水下图像
双峰分布 前景与背景分离明显 文档扫描、细胞图像
单峰偏左 整体偏暗 夜景、低光照
单峰偏右 整体偏亮 过曝、雪景
均匀分布 高对比度,细节丰富 理想增强目标

注意:我曾经犯过一个错——直接用 imhist 看彩色图像。结果 MATLAB 报错,因为彩色图是三维的。必须先转成灰度,或者分别看每个通道。

1.3 彩色直方图

彩色图像有 R、G、B 三个通道。彩色直方图就是分别统计每个通道的像素分布。你可以把三个通道的直方图叠在一起看,也可以分开看。

MATLAB 实现:

% 读取彩色图像
img = imread('peppers.png');
% 分别提取通道
R = img(:,:,1);
G = img(:,:,2);
B = img(:,:,3);
% 画三个通道的直方图
subplot(1,3,1); imhist(R); title('Red Channel');
subplot(1,3,2); imhist(G); title('Green Channel');
subplot(1,3,3); imhist(B); title('Blue Channel');

这里有个坑——RGB 三个通道的直方图形态差异很大,说明图像颜色偏某个色调。比如红色通道直方图整体偏右,那图像就偏红。

避坑指南:我曾经做过一个肤色检测项目,直接用 RGB 直方图做阈值分割,效果一塌糊涂。后来换成 HSV 色相直方图,问题迎刃而解。记住:RGB 直方图对光照变化很敏感,做颜色分析时优先考虑 HSV 或 Lab 空间。

1.4 直方图的重要性质

直方图有几个性质,搞懂了它们,你才能用好直方图。我列了四个最关键的:

  1. 位置无关性——直方图不包含像素的空间位置信息。你把图像像素随机打乱,直方图完全不变。这意味着什么?直方图只能告诉你「有什么」,不能告诉你「在哪」。
  2. 可叠加性——两张图像的直方图可以直接相加(像素数对应相加)。这个性质在做图像拼接、区域统计时很有用。
  3. 归一化不变性——直方图除以总像素数,得到概率密度函数。归一化后,不同尺寸图像的直方图可以互相比较。
  4. 单峰/多峰特性——峰的数量和位置,直接反映了图像中主要灰度区域的分布。双峰图像通常适合做阈值分割。

核心理解:直方图是图像的「全局统计特征」,不是「局部结构特征」。它和傅里叶变换一样,都是换一个角度看图像。你失去空间信息,但获得了灰度分布的全局视图。

1.5 知识体系总览

下面这张图,是我梳理的本章知识结构。你可以把它当作学习地图:

图像直方图知识体系 图像直方图 灰度直方图 彩色直方图 直方图性质 单通道统计 亮度/对比度 imhist()函数 RGB三通道 通道分离 HSV/ Lab空间 位置无关性 可叠加性 归一化不变性 单峰/多峰特性 核心:直方图是全局统计,不包含空间位置信息

这张图把本章的三个核心模块串起来了。灰度直方图和彩色直方图是「工具」,直方图性质是「原理」。先理解性质,再掌握工具,后面做直方图均衡化、规定化时才能得心应手。

我的建议:学完这一章,打开 MATLAB,随便找几张图,用 imhist 和 histogram 反复看。看多了,你一眼就能从直方图猜出图像长什么样。这个「直觉」比背公式重要得多。