第2章 图像基础回顾
像素 · 灰度图 · 二值图 · 色彩空间 (RGB/HSV/LAB) 与边缘检测
1. 像素 —— 数字图像的最小单元
每个像素存储亮度或颜色信息。灰度图每个像素为 0~255 的标量;彩色图通常由多个通道组成。边缘检测本质上是分析像素邻域内的突变。
2. 灰度图与二值图
灰度图 (Grayscale)
单通道,每个像素亮度 0(黑)~255(白)。边缘检测常用灰度图作为输入,因为亮度梯度直接反映边缘强度。
二值图 (Binary)
仅 0 和 255 (或 0/1)。通过阈值分割得到,常用于轮廓查找、形态学操作。边缘检测结果常通过阈值转化为二值边缘图。
3. 色彩空间及其在边缘检测中的作用
| 色彩空间 | 通道说明 | 边缘检测适用性 |
|---|---|---|
| RGB | 红、绿、蓝三通道,强相关 | 直接对亮度不敏感;彩色边缘可分解各通道分别检测 |
| HSV | 色调(H)、饱和度(S)、明度(V) | V通道分离光照,适合光照不均场景;H/S用于颜色边缘 |
| LAB | 亮度(L)、绿-红(a)、蓝-黄(b) | L通道感知均匀,欧氏距离代表色差;边缘检测更符合人眼 |
💡 核心观点: 边缘检测通常将彩色图像转为灰度或提取亮度通道(如 HSV-V、LAB-L),以消除色度噪声,但保留颜色边缘可检测特定目标。
4. 为什么色彩空间对边缘检测重要?
- RGB 通道间相关性高,直接灰度化可能丢失微弱边缘;但彩色边缘(如红绿交界)在单通道中可能不明显。
- HSV 的 V 通道对光照变化鲁棒,适合阴影环境;H 通道可检测颜色跳变边缘。
- LAB 的 L 通道与人类亮度感知一致,a/b 通道用于检测色度边缘,在纹理分析中表现优异。
5. 代码速览:OpenCV 色彩空间转换与边缘检测
import cv2
import numpy as np
# 读取图像 (BGR)
img = cv2.imread('example.jpg')
# 转为灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 转为 HSV,取 V 通道
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
v_channel = hsv[:, :, 2]
# 转为 LAB,取 L 通道
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
l_channel = lab[:, :, 0]
# 使用 Canny 边缘检测 (基于灰度)
edges_gray = cv2.Canny(gray, 50, 150)
edges_v = cv2.Canny(v_channel, 50, 150)
edges_l = cv2.Canny(l_channel, 50, 150)
6. 图像类型与边缘检测适配性
| 图像类型 | 通道数 | 边缘检测常用策略 | 典型应用 |
|---|---|---|---|
| 灰度图 | 1 | 直接计算梯度 | 经典边缘检测 |
| 二值图 | 1 | 形态学梯度 / 轮廓查找 | 文档分析、轮廓提取 |
| RGB 彩色 | 3 | 各通道分别检测或转亮度 | 彩色边缘保留 |
| HSV | 3 | V 通道边缘 + H/S 颜色边缘 | 光照鲁棒场景 |
| LAB | 3 | L 通道亮度边缘 + ab 色度边缘 | 感知一致分割 |
要点 理解像素与色彩空间是边缘检测的基石,后续章节将基于这些概念构建梯度与算子。