第三章 数字图像基础:像素与分辨率、色彩空间、直方图与文件格式
各位同学,欢迎来到第三章。说实话,这一章是整个视觉仿生系统的地基。你想想看,如果连图像的基本构成都不清楚,后面谈什么目标检测、特征提取?那都是空中楼阁。
我个人习惯,在开始任何项目之前,先把“原材料”吃透。图像就是我们的原材料。今天我们就把它掰开揉碎了讲清楚。
3.1 像素与分辨率:图像的“原子”与“尺度”
先问个问题:一张数字图像,本质上是什么?
说白了,就是一个二维数组。数组里的每个元素,就是一个像素(Pixel)。像素是图像的最小单元,就像原子之于物质。
每个像素存储着颜色信息。对于灰度图,一个像素就是一个亮度值(0-255)。对于彩色图,通常是三个值(R, G, B)。
分辨率呢?就是这张图像“有多细”。
- 空间分辨率:比如 1920×1080,表示宽1920个像素,高1080个像素。总像素数 = 1920 × 1080 ≈ 207万(也就是我们常说的200万像素)。
- 位深度:每个像素用多少位来表示。8位灰度图,每个像素占1字节。24位真彩色,每个像素占3字节。
核心公式:
图像数据量(字节) = 宽度(像素) × 高度(像素) × 位深度(字节/像素)
举个例子:一张 1920×1080 的24位真彩色图,未经压缩的数据量是:1920 × 1080 × 3 = 6,220,800 字节 ≈ 5.93 MB。
我的经验: 我在做嵌入式视觉项目时,经常要在“分辨率”和“帧率”之间做取舍。分辨率越高,数据量越大,处理时间越长。我曾经在一个无人机避障项目里,为了实时性,硬是把 1080p 降到了 640×480,帧率从15fps提到了30fps。嗯,有时候“够用”比“最好”更重要。
3.2 色彩空间:RGB、HSV 与灰度
色彩空间,就是描述颜色的数学模型。不同的模型适用于不同的场景。
3.2.1 RGB 色彩空间
这是最常用的模型。红(R)、绿(G)、蓝(B)三原色叠加。每个通道0-255,共1677万种颜色。
但 RGB 有个问题:它和人感知颜色的方式不太一样。你想想看,调整亮度时,R、G、B三个值都要改,很麻烦。
3.2.2 HSV 色彩空间
这个就好用多了。H(色调)、S(饱和度)、V(明度)。
- H(Hue):0-360°,代表颜色种类。红色在0°,绿色在120°,蓝色在240°。
- S(Saturation):0-100%,颜色纯度。0%是灰色,100%是纯色。
- V(Value):0-100%,明暗程度。
避坑指南: 我曾经在做一个颜色识别项目时,直接用 RGB 阈值去分割红色物体。结果光照一变,全乱了。后来换成 HSV,只对 H 通道做阈值,S 和 V 放宽范围,效果稳定多了。记住:做颜色检测,优先用 HSV。
3.2.3 灰度图
灰度图只有一个通道,值0(黑)到255(白)。
为什么需要灰度图?因为很多算法(比如边缘检测、特征点提取)只关心亮度变化,不关心颜色。灰度图数据量只有彩色图的1/3,处理速度更快。
RGB 转灰度的经典公式:
Gray = 0.299 × R + 0.587 × G + 0.114 × B
为什么权重不一样?因为人眼对绿色最敏感,对蓝色最不敏感。这是生理学决定的。
3.3 图像直方图:图像的“统计报告”
直方图,说白了就是统计每个亮度值有多少个像素。
横轴:亮度值(0-255)。纵轴:像素个数。
直方图能告诉我们什么?
- 曝光情况:像素集中在暗区,图像偏暗;集中在亮区,图像偏亮。
- 对比度:分布范围宽,对比度高;分布集中,对比度低。
- 图像质量:有没有过曝或欠曝的区域。
直方图均衡化: 这是我最常用的图像增强手段之一。它把直方图“拉平”,让像素分布更均匀,从而提升对比度。我在做夜间监控图像增强时,这招屡试不爽。
OpenCV 里实现直方图均衡化就一行代码:
import cv2
img = cv2.imread('dark_image.jpg', 0) # 以灰度图读取
equ = cv2.equalizeHist(img)
cv2.imwrite('enhanced.jpg', equ)
3.4 图像文件格式与压缩
原始图像数据量太大,必须压缩。不同的格式有不同的压缩策略。
| 格式 | 压缩方式 | 特点 | 适用场景 |
|---|---|---|---|
| BMP | 无压缩 | 质量无损,文件巨大 | 极少使用,仅用于测试 |
| JPEG | 有损压缩 | 压缩率高,细节有损失 | 照片、网络传输 |
| PNG | 无损压缩 | 支持透明通道,质量无损 | 图标、截图、需要透明背景 |
| GIF | 无损(256色) | 支持动画,颜色少 | 简单动画、表情包 |
我的建议: 在嵌入式系统里,我通常用 JPEG 做图像传输,用 PNG 做模板匹配的模板文件。为什么?JPEG 体积小,适合无线传输;PNG 无损,保证模板特征不丢失。
JPEG 的压缩原理很有意思。它利用人眼对亮度敏感、对颜色不敏感的特性,把颜色信息压缩得更狠。这就是为什么 JPEG 在文字边缘容易出现“振铃效应”——那些伪影。
注意: 不要反复保存 JPEG 文件。每次保存都会重新压缩,质量会逐次下降。我曾经见过一个同事,一张图反复编辑保存了十几次,最后图像全是马赛克。嗯,血的教训。
本章知识体系
下面这张图,是我用 SVG 画的本章知识结构。你可以把它当作一张“地图”,随时回来查阅。
好了,这一章的内容就到这里。像素、分辨率、色彩空间、直方图、文件格式——这些概念看似基础,但每一个都直接影响着后续算法的效果和性能。我建议你动手写几行代码,读一张图,看看它的直方图,再试试不同格式的压缩效果。实践出真知。
公众号:蓝海资料掘金营,微信deep3321