2、直方图基础:灰度直方图的概念、直方图的性质、如何读取直方图信息。
好,咱们进入第二章。直方图这东西,说白了就是图像的“体检报告”。
我刚入行那会儿,觉得直方图就是个花架子,调色全凭感觉。后来被一个老前辈点醒,他说:“你不看直方图,就像医生不看化验单,全靠猜。” 从那以后,我养成了一个习惯:拿到一张图,先看直方图,再看画面本身。这个顺序,帮我省了太多时间。
2.1 灰度直方图的概念
什么是灰度直方图?
很简单。一张灰度图,每个像素都有一个亮度值,范围通常是0到255。0是纯黑,255是纯白。直方图就是统计一下:这张图里,亮度为0的像素有多少个?亮度为1的有多少个?……一直到亮度为255的有多少个?
把这些统计结果画成柱状图,横轴是亮度值(0到255),纵轴是像素数量。这就是灰度直方图。
核心定义:灰度直方图是图像中像素灰度级分布的函数,描述了图像中每种灰度级出现的频率。
举个例子,一张纯黑的图,所有像素都是0,直方图就只在0的位置有一根冲天柱,其他地方全是平的。一张纯白的图,就只在255的位置有一根柱子。一张曝光正常的风景照,直方图通常像一个中间高、两边低的山丘。
2.2 直方图的性质
直方图有几个很重要的性质,我挑三个最常用的讲讲。
性质一:位置缺失性
直方图只告诉你“有多少个像素是这个亮度”,但它不告诉你“这些像素在图像的哪个位置”。
举个例子,一张左边全黑、右边全白的图,和一张上半部分全黑、下半部分全白的图,它们的直方图是一模一样的。都是0的位置有一半像素,255的位置有一半像素。
为什么会这样?因为直方图丢弃了空间位置信息。它只关心“量”,不关心“在哪”。
我在项目中遇到过这种情况:用直方图匹配算法做色调统一,结果两张图直方图一模一样,但画面内容完全不同。嗯,这就是位置缺失性在作怪。所以,直方图是全局信息,不能完全代表画面内容。
性质二:可叠加性
如果你把一张图切成上下两半,分别计算直方图,然后把这两个直方图对应位置的数值相加,得到的结果就是整张图的直方图。
这个性质很实用。比如你想分析一张图的暗部细节,可以单独提取暗部区域的直方图,和整体直方图对比,看看暗部细节是否丰富。
性质三:与图像的一一对应关系(不成立)
这个性质其实是性质一的推论。不同的图像可以有完全相同的直方图。所以,直方图和图像之间不是一一对应的关系。
你想想看,如果两张图直方图一样,它们看起来可能完全不一样。这就是为什么我们不能只靠直方图来还原图像。
2.3 如何读取直方图信息
读直方图,其实就是在读图像的“明暗分布”。我一般会看三个维度:范围、峰值、形状。
看范围:曝光是否正常
直方图的横轴范围是0到255。如果直方图的左右两端都有大量像素堆积,说明图像存在“过曝”或“欠曝”。
- 左边撞墙(0附近有高峰): 图像有大量纯黑区域,细节丢失。这叫“欠曝”或“暗部溢出”。
- 右边撞墙(255附近有高峰): 图像有大量纯白区域,细节丢失。这叫“过曝”或“亮部溢出”。
- 中间饱满,两边不撞墙: 曝光比较理想,细节丰富。
注意: 并不是所有图像都要避免撞墙。比如一张夜景图,暗部撞墙是正常的。一张雪景图,亮部撞墙也是正常的。关键看画面内容是否合理。
看峰值:对比度是否合适
直方图的峰值分布,反映了图像的对比度。
- 峰值集中在中间窄区域: 图像对比度低,看起来灰蒙蒙的,像蒙了一层雾。
- 峰值分布在整个横轴,且比较均匀: 图像对比度高,层次感强。
- 峰值集中在两端,中间很少: 图像对比度过高,可能丢失中间调细节。
我个人习惯,拿到一张灰蒙蒙的图,第一件事就是看直方图。如果峰值都挤在中间,我就知道该做对比度拉伸了。
看形状:细节是否丰富
直方图的形状,能反映图像的细节丰富程度。
- 平滑、连续的山丘状: 细节丰富,过渡自然。
- 锯齿状、有断崖: 可能经过了过度处理,或者图像本身质量不高。
- 出现多个明显的峰: 图像可能包含多个亮度层次分明的区域,比如逆光人像(背景亮、人脸暗)。
我曾经处理过一张老照片,直方图全是锯齿,一看就是被反复压缩保存过。这种图想恢复细节,难度很大。
2.4 直方图的核心逻辑
下面这张图,是我自己总结的直方图知识体系。你看一眼,就能把刚才讲的内容串起来。
2.5 实战:读一张图的直方图
假设你拿到一张图,直方图长这样:
- 左边0-50区域有一个很高的峰
- 右边200-255区域有一个中等高度的峰
- 中间50-200区域几乎没什么像素
你能读出什么信息?
第一,这张图暗部很多,而且暗部细节可能丢失(因为左边峰很高且靠近0)。第二,亮部也有一定数量,但不如暗部多。第三,中间调很少,说明这张图对比度很高,可能是一张逆光照片或者夜景灯光图。
我遇到这种情况,会先判断:暗部撞墙是不是合理的?如果是夜景,那没问题。如果是白天风景,那就要考虑提亮暗部了。
小技巧: 在Photoshop或Lightroom里,按住Alt键拖动“黑色”滑块,可以实时看到哪些区域在撞墙(变成纯黑)。按住Alt键拖动“白色”滑块,可以看到哪些区域在过曝(变成纯白)。这个技巧我用了十年,非常实用。
好了,直方图的基础就这些。记住三个关键词:范围看曝光、峰值看对比度、形状看细节。下次拿到一张图,别急着调色,先看一眼直方图。你会发现,很多问题一眼就能看出来。