七天速成数字图像处理之七(颜色图像处理基础)
✳️ 第一节:颜色模型基础
✅ 步骤目标:
理解常用颜色模型的结构、数学表达与使用场景。
📥 输入内容:
一张 RGB 彩色图像。
🔍 关键知识任务:
-
RGB(Red, Green, Blue)
构成:每个像素由 R/G/B 三个分量组成,值范围通常为 [0, 255]。
特点:适合显示设备,但不适合色调、亮度调节。
例子:原始数码相机输出图像。
-
HSV(Hue, Saturation, Value)
Hue:色相(色彩种类,0-360°)
Saturation:饱和度(纯度)
Value:明度(亮度)
💡 应用场景:颜色分割(如检测黄色车牌、红色苹果等)更容易在人类感知空间中进行。
-
YCrCb(亮度+色度)
Y:亮度(Luminance)
Cr、Cb:色度信息(红/蓝差)
💡 应用场景:压缩标准(如 JPEG/MPEG)更偏爱 YCrCb,因人眼对亮度更敏感。
-
Lab(CIELAB)
L:亮度
a、b:颜色维度(绿-红轴、蓝-黄轴)
💡 优势:更贴近人类感知的颜色差异度量(用于图像比对、图像增强)
颜色模型 | 应用优势 | 是否感知友好 | 是否常用于分割/增强 |
---|---|---|---|
RGB | 图像采集、显示设备 | ❌ | 一般 |
HSV | 色彩选择、颜色分割 | ✅ | ✅ |
YCrCb | 视频压缩、肤色检测 | ✅ | ✅ |
Lab | 感知增强、颜色匹配 | ✅ | ✅ |
✅ Done Criteria:
能区分并理解每种颜色模型的结构与应用;
能说出什么时候 RGB 不好用,什么时候 HSV 更适合;
能通过 OpenCV 将 RGB 图像转换为 HSV 或 YCrCb;
🎨 第二节:颜色空间转换(含代码与操作)
✅ 步骤目标:
掌握如何在不同颜色模型之间进行转换,并理解其实际用途。
📥 输入内容:
一张 RGB 彩色图像;
Python 环境(推荐使用 OpenCV);
python
import cv2
import matplotlib.pyplot as plt
# 读取图像(确保是 BGR)
image = cv2.imread("your_image.jpg")
# 转换为 RGB(Matplotlib 显示用)
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 转换为 HSV
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 转换为 YCrCb
ycrcb_image = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb)
# 转换为 Lab
lab_image = cv2.cvtColor(image, cv2.COLOR_BGR2Lab)
# 显示图像
titles = ['RGB', 'HSV', 'YCrCb', 'Lab']
images = [rgb_image, hsv_image, ycrcb_image, lab_image]
plt.figure(figsize=(12, 8))
for i in range(4):
plt.subplot(2, 2, i+1)
plt.imshow(images[i])
plt.title(titles[i])
plt.axis('off')
plt.tight_layout()
plt.show()
转换 | 作用 | 使用场景 |
---|---|---|
RGB → HSV |
将图像转换为色相、饱和、明度 | 颜色分割、选色、图像调整 |
RGB → YCrCb |
分离亮度与色差信息 | 人脸识别、视频压缩(JPEG) |
RGB → Lab |
感知友好、颜色差异度量 | 图像匹配、颜色增强、对比提升 |
🎯 衍生任务建议:
可提取某一通道如 HSV[..., 0](色调),进行颜色掩膜分割;
可对 Y 通道做直方图均衡,用于亮度提升;
对 Lab 图像中 L 通道增强 + a/b 保持,可做对比度优化不影响色彩。
✅ Done Criteria:
能用代码在 RGB 与其他颜色空间之间自由转换;
知道各个颜色空间的通道意义;
能结合任务场景选用合适的颜色空间。
🎨 第三节:颜色通道处理与颜色增强
✅ 步骤目标:
理解颜色通道的独立性与协同性;
学会在每个通道上进行操作(如增强红色、调节亮度);
掌握通道分离、合并、增强的基本流程;
📥 输入内容:
一张 RGB 图像;
使用 OpenCV 或 Matplotlib 的可视化环境;
🧩 任务 1:颜色通道的分离与合并
python
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('your_image.jpg')
b, g, r = cv2.split(img)
# 显示每个通道
plt.figure(figsize=(12, 4))
for i, (channel, title) in enumerate(zip([b, g, r], ['Blue', 'Green', 'Red'])):
plt.subplot(1, 3, i+1)
plt.imshow(channel, cmap='gray')
plt.title(title)
plt.axis('off')
plt.tight_layout()
plt.show()
# 合并通道
merged = cv2.merge([b, g, r])

🧩 任务 2:只增强某个通道(如红色)
python
# 让红色更强烈
r_boosted = cv2.add(r, 50) # 限制最大值为255
boosted_img = cv2.merge([b, g, r_boosted])
# 可视化
plt.imshow(cv2.cvtColor(boosted_img, cv2.COLOR_BGR2RGB))
plt.title("Red Channel Boosted")
plt.axis('off')
plt.show()

🧩 任务 3:颜色通道的"单通道显示" vs "通道叠加显示"
单通道显示:提取 R/G/B 作为灰度图表示各通道强度;
通道叠加显示:将通道值置为 0,只保留目标通道可形成色彩图:
python
# 只显示红色部分(非灰度)
zeros = b * 0
red_only = cv2.merge([zeros, zeros, r])

操作类型 | 示例 | 效果 |
---|---|---|
通道加亮 | cv2.add(r, 50) |
增强亮度/颜色强度 |
对比度提升 | cv2.equalizeHist(g) |
强化颜色分布 |
掩膜增强 | 只在特定区域增强某通道 | 聚焦目标,如红色区域增强 |
通道互换 | 交换 R ↔ G | 改变视觉色彩表现 |
加权组合 | gray = 0.3*r + 0.59*g + 0.11*b |
转灰度、亮度融合 |
🎯 输出产物 | ||
你可以实现如下功能: |
精准提取和增强某一通道的图像效果;
手动构建灰度图或亮度图;
通过通道操作进行视觉风格修改;
✅ Done Criteria:
能够用代码拆分与合并颜色通道;
能对单个通道进行亮度、对比度或掩膜增强;
能清晰区分"单通道灰度显示"与"通道色彩叠加显示"的含义;
第四章:伪彩色处理与应用(Pseudocolor Processing)
✅ 步骤目标
理解什么是伪彩色(Pseudocolor)及其与真彩色的区别;
掌握灰度图转伪彩色图的方法;
学会常见伪彩色映射策略及其用途;
实践多个伪彩色映射函数在 OpenCV / Matplotlib 中的应用;
📥 输入内容
一张灰度图像或亮度图像;
可选:红外图像、热成像图像、医学图像(如X光);
使用 OpenCV 和/或 Matplotlib 进行处理与可视化;
🔍 关键任务
🧩 任务 1:什么是伪彩色图像?
真彩色图像(True Color):RGB 三通道均来源于真实颜色;
伪彩色图像(Pseudocolor):
原图可能只有灰度(单通道);
使用某种 颜色映射表(colormap) 将灰度值映射为彩色;
视觉上更容易感知梯度、边界和差异。
python
import cv2
import matplotlib.pyplot as plt
gray = cv2.imread("test_gray.jpg", 0) # 读取为灰度图
# 应用伪彩色(如 JET、HOT、RAINBOW)
pseudo = cv2.applyColorMap(gray, cv2.COLORMAP_JET)
plt.imshow(cv2.cvtColor(pseudo, cv2.COLOR_BGR2RGB))
plt.title("Pseudocolor - JET")
plt.axis('off')
plt.show()
🎨 常用伪彩色表:
COLORMAP_JET: 热力图风格,红->绿->蓝;
COLORMAP_HOT: 黑->红->黄->白,适合热成像;
COLORMAP_OCEAN, COLORMAP_SUMMER, COLORMAP_RAINBOW 等可用于不同任务;
应用领域 | 图像类型 | 伪彩色作用 |
---|---|---|
医学影像 | X光、MRI | 强调病灶与正常区域的对比 |
热成像 | 红外图像 | 显示温度分布,增强识别力 |
工业检测 | 缺陷/厚度图 | 可视化微小纹理或材料差异 |
卫星遥感 | 地形图、波段图 | 分析植被、土地、水体等 |
数学图像分析 | 灰度图 | 显示梯度、边缘、亮度差异等 |
🎯 输出产物
你应该能够实现:
使用 OpenCV 加载灰度图并转换为任意伪彩色图像;
在 matplotlib 中使用不同 cmap 对图像视觉效果进行对比;
明确选择不同颜色映射表对结果的影响,并适配场景使用;
✅ Done Criteria
至少掌握 3 种伪彩色映射方式的应用;
能清楚解释伪彩色与真彩色的区别;
能将灰度图应用到不同颜色空间中,并解释视觉增强意义;