返回

颜色空间与颜色直方图

Color Space & Histogram - 基于颜色特征的目标检测
第三章 / 特征明显方法
参数面板

切换显示模式查看不同颜色通道或 HSV 颜色提取结果;目标像素会同步驱动公式代入、当前直方图 bin 和颜色范围提取结果。

35
阈值含义

在 HSV 色调环上,以目标像素 H0 为中心,按 0°/360° 相邻的循环最短距离选择不超过 35° 的像素作为目标颜色。

当前图像

尺寸 96×96,共 9216 个像素。点击图像或使用方向键会同步刷新公式、直方图和 mask。

目标像素
坐标 (38, 44)
RGB (239, 91, 122)
HSV (347.4°, 62.1%, 93.9%)
窗口定位辅助操作
用方向键或下方 4 个按钮移动当前窗口;也可以直接点击原图或结果图跳转。
当前像素 (38, 44)4263 / 9216
方向
概念说明

为什么从 RGB 转到 HSV

HSV 将颜色和亮度拆开,更适合做颜色范围提取。图源:项目 HSV 示例图
任务

当想根据颜色把图像里的目标区域挑出来时,直接用 RGB 判断很容易出问题:光照变亮或变暗会让同一种颜色的 R、G、B 三个值一起改变,红色在阴影和强光下看起来数值差别很大。

思路

常用办法是先把颜色从 RGB 转到 HSV,然后只看色调范围来提取颜色;再用颜色直方图统计目标颜色在整幅图中的分布。这样亮度变化主要影响 V 通道,H 通道对同一种颜色更稳定。

观察

切换不同光照下的同一张图,或调整 HSV 的色调范围,观察 RGB 三个通道和 HSV 色调通道哪个更稳定;再拖动阈值,看掩膜里被保留的区域是随 H 变化还是随亮度变化。

方向键移动 / 点击原图或结果图定位像素当前结果像素 (38, 44)
4263 / 9216
真实 RGB 原图96×96
点击像素选择目标颜色并刷新 HSV 计算
RGB → HSV
4263 / 9216
RGB 彩图96×96
点击结果图同步定位像素
目标像素 RGB
R = 239
G = 91
B = 122
坐标 (38, 44) 的真实像素值进入后续 HSV 和直方图计算。
RGB → HSV
Cmax = 0.939,Cmin = 0.356,Δ = 0.583
H = 347.4°
S = 62.1%
V = 93.9%
H 色调直方图bin 17
0
3
6
9
12
15
当前 bin 有 275 个像素,比例为 3.0%
颜色范围提取
提示:颜色范围提取仅在“HSV 颜色提取”模式下生效;当前为 RGB 彩图,mask 统计仅供教学参考。
目标色调 H0 = 347.4°,阈值 T = 35°
当前 mask 共选中 765 / 9216 个像素。
目标像素:命中目标色范围
目标像素的 RGB → HSV 代入

HSV 先把 RGB 归一化,再用最大值、最小值和差值决定色调、饱和度与明度。

(38, 44)
归一化
R=239255=0.937 , G=91255=0.357 , B=122255=0.478
极值与差值
Cmax=max(0.939,0.356,0.478)=0.939 , Cmin=0.356 , Δ=0.583
HSV 结果
HSV(38,44) = (347.4°,0.621,0.939)
当前直方图 bin

直方图不关心颜色出现在哪里,只统计当前通道数值落入每个区间的像素比例。

0
3
6
9
12
15
H 色调 的归一化直方图
H(17) = count(17)N = 2759216 = 0.0298
HSV 颜色范围提取

以目标像素的 H 作为目标色调 H0,在色调环上按循环最短距离选择不超过阈值 T 的像素(0° 与 360° 相邻),得到右侧 mask。

Hue 阈值判定
|H(38,44)-H0| = 0.0° 35° = 1
Hue 距离按色相环的循环最短距离计算(0° 与 360° 相邻)。当前阈值选中 765 个像素,占整幅图 8.3%。
概念补充

RGB 适合描述显示设备中的三基色强度,HSV 把颜色拆成色调、饱和度和明度。目标颜色与背景差异明显时, H 分量和颜色直方图可以作为简单、直观的目标检测特征。

RGB 颜色立方体

三条彩色轴表示 R/G/B 强度,发光点是目标像素在立方体中的位置。

RGBCMY目标像素
R239 / 255
G91 / 255
B122 / 255
HSV 色相环与 S/V 平面

左侧选色相 H,右侧固定 H 后查看饱和度 S 与明度 V。

H 347.4°
S=0H 指针V=1V=0S=0S=1
H347.4°
S62.1%
V93.9%