Illuminant Estimation from Projections on the Planckian Locus
基于普朗克轨迹投影的光源估计 —— 论文详细总结(重点:投影与插值原理)
论文信息:Baptiste Mazin, Julie Delon, Yann Gousseau(LTCI, Télécom-ParisTech, CNRS) ECCV 2012 Workshops (LNCS 7584), pp. 370–379
一句话概括:一种免学习(learning-free)的光源自动估计方法——筛选出图像中"最可能是灰色"的像素,把它们投影到 CIE 1960 uv 色度图上的普朗克轨迹,用投影得到的色温构建加权直方图投票,选出最可信色温
T
0
T_0
T0,最后用投票像素的加权重心得到完整光源色度。
目录
1. 问题定义与动机
1.1 问题:欠约束(underconstrained)
人眼在不同光谱光源下能稳定感知物体颜色(色彩恒常性),相机则不能。光源估计的目标是从一张照片中分离出:
观测颜色
=
f
(
物体固有颜色
,
光源颜色
)
\\text{观测颜色} = f(\\text{物体固有颜色},\\ \\text{光源颜色})
观测颜色=f(物体固有颜色, 光源颜色)
中的光源成分
L
=
(
L
R
,
L
G
,
L
B
)
\\mathbf{L} = (L_R, L_G, L_B)
L=(LR,LG,LB)。
根本困难:同样的像素值可以由"不同物体颜色 × 不同光源"组合产生——这是一个欠约束问题,必须引入额外假设。
1.2 已有假设的局限
| 场景构成假设 | White-Patch / Max-RGB、Grey-World | 场景中无白物体 / 平均反射率非灰 |
| 物理模型约束 | Gamut Mapping(Forsyth) | 依赖训练图像的色域统计 |
| 二色反射模型 | 镜面分量方法 | 高光不足的场景 |
| 多方法组合 + 学习 | ML 类方法 | 需要训练数据 |
没有任何一个假设对所有"场景-光源"组合都成立,且不同方法的失效场景互不相同。
1.3 本文的出发点
引入两条互补的先验:
方法完全免学习,计算代价合理,性能达到免学习方法中的最优水平。
2. 理论基础:成像模型与普朗克假设
2.1 色彩成像模型(Lambertian 简化的二色模型)
像素值由光源光谱
L
(
λ
)
L(\\lambda)
L(λ)、表面反射率
S
(
λ
,
x
)
S(\\lambda, x)
S(λ,x)、相机光谱灵敏度
ρ
c
(
λ
)
\\rho_c(\\lambda)
ρc(λ) 决定:
p
c
(
x
)
=
∫
ω
L
(
λ
)
S
(
λ
,
x
)
ρ
c
(
λ
)
d
λ
,
c
∈
{
R
,
G
,
B
}
p_c(x) = \\int_\\omega L(\\lambda)\\, S(\\lambda, x)\\, \\rho_c(\\lambda)\\, d\\lambda, \\qquad c \\in \\{R, G, B\\}
pc(x)=∫ωL(λ)S(λ,x)ρc(λ)dλ,c∈{R,G,B}
若把相机灵敏度近似为波长
λ
R
,
λ
G
,
λ
B
\\lambda_R, \\lambda_G, \\lambda_B
λR,λG,λB 处的 Dirac δ 函数,则退化为乘性模型:
p
c
(
x
)
=
L
(
λ
c
)
S
(
λ
c
,
x
)
p_c(x) = L(\\lambda_c)\\, S(\\lambda_c, x)
pc(x)=L(λc)S(λc,x)
光源估计即求
L
=
(
L
(
λ
R
)
,
L
(
λ
G
)
,
L
(
λ
B
)
)
\\mathbf{L} = (L(\\lambda_R), L(\\lambda_G), L(\\lambda_B))
L=(L(λR),L(λG),L(λB));求得后可用 Von Kries 模型(对角阵白平衡)或更复杂模型把场景校正到标准光源
L
u
L_u
Lu 下。
2.2 普朗克黑体辐射假设
理想黑体在温度
T
T
T(开尔文)下的辐射光谱由普朗克公式给出:
L
(
T
,
λ
)
=
c
1
λ
−
5
[
exp
(
c
2
λ
T
)
−
1
]
−
1
L(T, \\lambda) = c_1 \\lambda^{-5} \\left[\\exp\\!\\left(\\frac{c_2}{\\lambda T}\\right) – 1\\right]^{-1}
L(T,λ)=c1λ−5[exp(λTc2)−1]−1
其中
c
1
=
3.74183
×
10
16
W
m
2
c_1 = 3.74183 \\times 10^{16}\\ \\mathrm{Wm^2}
c1=3.74183×1016 Wm2,
c
2
=
1.4388
×
10
−
2
m
K
c_2 = 1.4388 \\times 10^{-2}\\ \\mathrm{mK}
c2=1.4388×10−2 mK。
关键推论:普朗克公式能准确近似大多数真实光源(尤其是日光 [11])的光谱。因此在黑体假设下,灰色像素可能呈现的颜色被限制在色度图上一条曲线附近——普朗克轨迹(Planckian locus)。这就是"可行光源色度约束"。
2.3 色度图
色度图是 3D 颜色信息丢弃强度分量后的 2D 投影:
- RGB →(设备相关矩阵)→ XYZ → 归一化
x
+
y
+
z
=
1
x + y + z = 1
x+y+z=1 → CIE 1931 xy 色度图; - 本文实际使用 CIE 1960 uv 色度图(原因见第 5 节)。
3. 已有方法(对比基线)
3.1 全像素统计类
Shades of Grey 框架(Finlayson [13])——统一了 Grey-World 与 Max-RGB:
L
c
=
(
∫
p
c
(
x
)
n
d
x
∫
d
x
)
1
/
n
L_c = \\left( \\frac{\\int p_c(x)^n\\, dx}{\\int dx} \\right)^{1/n}
Lc=(∫dx∫pc(x)ndx)1/n
-
n
=
1
n = 1
n=1:Grey-World(场景平均反射率无色); -
n
=
∞
n = \\infty
n=∞:Max-RGB(White-Patch,最亮点为完美反射面); - general Grey-World [14]:先做高斯卷积再统计。
Grey-Edge(van de Weijer [15])——扩展到梯度域:
L
c
=
(
∫
∥
∂
k
p
c
(
x
)
∂
x
k
∥
n
d
x
)
1
/
n
L_c = \\left( \\int \\left\\| \\frac{\\partial^k p_c(x)}{\\partial x^k} \\right\\|^n dx \\right)^{1/n}
Lc=(∫
∂xk∂kpc(x)
ndx)1/n
(假设反射率差分的平均是无色的。)
3.2 灰像素检测类
先检测"可能是灰色表面"的像素,再从这些像素估计光源 [16][17]:
- Li 等 [16]:迭代估计使灰像素数目最大的白点——但初始估计(来自式(5))可能不准,作者自己也承认这一步非常棘手;
- Kwon 等 [17]:在色度空间中选取靠近普朗克轨迹的点再取平均——可避免"紫色光源"这类荒谬估计,但当场景中存在两个灰色表面时会失败(平均结果落在两表面之间的中间点,两个都不是真实光源)。
3.3 投票类方法
- Sapiro [18]:每个像素对反射率参数集投票,Hough 变换选最优;
- Riess 等 [19]:选很多 patch,各自在逆色度空间估计光源,成功的 patch 投票;
- Vazquez-Corral 等 [20]:用"通用颜色类别"的感知约束加权投票,同样免学习。
本文方法属于"灰像素检测 + 投票"的融合,但用直方图投票替代简单平均,从而克服 [17] 的"多灰表面取中间点"缺陷。
4. 核心方法:普朗克轨迹投影 + 投票(重点)
4.1 方法思想(四步)
① 筛选灰像素:在色度空间中找靠近普朗克轨迹的像素
↓ (这些像素 = "最可能是灰色"的像素)
② 投影求色温:把每个灰像素投影到普朗克轨迹,得到其色温 T(p)
↓
③ 直方图投票:以 MIRED 尺度构建加权色温直方图,取峰值 T₀
↓ (投票解决"多个灰色表面"的歧义——取主导温度而非平均)
④ 加权重心:对投票给 T₀ 邻域的所有像素,按亮度加权求色度重心
↓
输出光源色度 (u₀, v₀)
4.2 与简单平均方法([17])的本质区别
| 多灰表面场景 | 输出两表面色度的中间点(错误,两边都不对) | 直方图出现两个峰,取主导峰
T 0 T_0 T0(正确对齐其中一个表面) |
| 离群像素 | 直接拉偏平均值 | 被直方图峰值选择自然抑制 |
| 可解释性 | 无中间信息 | 直方图给出图像中所有"候选光源"的分布(论文指出可用于多光源估计) |
4.3 三个关键设计选择
T
M
i
r
e
d
=
10
6
/
T
T_{Mired} = 10^6 / T
TMired=106/T):开尔文尺度对普朗克轨迹的采样不均匀,MIRED 尺度(Priest [22])符合人眼感知,采样均匀(见第 6 节);
luminance
(
p
)
n
\\text{luminance}(p)^n
luminance(p)n——暗像素噪声大、不可靠,给小权重;亮像素更接近 White-Patch 的可信观测。这是 Grey-World 与 White-Patch 两种假设之间的折中(
n
n
n 控制偏向:
n
n
n 越大越接近 White-Patch)。
5. 投影的几何原理详解(重点)
5.1 为什么"投影 = 读出色温"
在 CIE 1960 uv 平面上:
v
│ ● 黑体 6500K
│ ●
│ ● ← 普朗克轨迹(黑体随温度移动的曲线)
│ ●
│● 黑体 2500K
│ P(某像素色度)
│ ↓ 沿等温线(轨迹垂线)投影
│ ● p_Planck(垂足)
└──────────────────── u
- 等温线:过普朗克轨迹上每一点、垂直于轨迹的直线族。同一等温线上的所有色度点具有相同的相关色温(CCT);
- CCT 的定义(在 uv 空间):像素的 CCT = 其最近黑体辐射体的温度;
- 因此"把像素
p
u
v
p_{uv}
puv 投影到轨迹上最近点p
P
l
a
n
c
k
p_{Planck}
pPlanck"这一操作,同时完成两件事: - 距离判断:
d
=
∥
p
u
v
−
p
P
l
a
n
c
k
∥
d = \\|p_{uv} – p_{Planck}\\|
d=∥puv−pPlanck∥——衡量该像素"有多像灰色"。d
<
δ
d < \\delta
d<δ(如 0.01)的像素才被认为是灰像素候选; - 色温读取:垂足
p
P
l
a
n
c
k
p_{Planck}
pPlanck 对应的黑体温度T
(
p
)
T(p)
T(p) 就是该像素的 CCT。
5.2 投影的双重筛选作用
投影把二维色度信息降维为一维色温标量,同时完成质量筛选:
p
u
v
→
最近点投影
(
p
P
l
a
n
c
k
,
T
(
p
)
,
d
)
p_{uv} \\xrightarrow{\\text{最近点投影}} (p_{Planck},\\ T(p),\\ d)
puv最近点投影
(pPlanck, T(p), d)
-
d
d
d 大 → 像素明显带色(不是灰表面,或不是黑体类光源)→ 丢弃; -
T
(
p
)
∉
[
2000
K
,
20000
K
]
T(p) \\notin [2000K, 20000K]
T(p)∈/[2000K,20000K] → 超出常见光源范围(可能是噪声/饱和色)→ 丢弃; - 通过筛选的像素 → 只保留色温标量
T
(
p
)
T(p)
T(p) 参与投票。
这正是"投影"的核心价值:灰色表面在未知光源下的色度未知,但若光源在普朗克轨迹上,则灰像素色度必然落在轨迹附近;投影把"估计二维光源色度"分解为"筛选(距离)+ 一维投票(色温)",大幅缩小搜索空间且对离群点鲁棒。
5.3 为什么能克服"多灰表面"问题
设场景中有两个灰色表面,分别在光源
T
a
T_a
Ta、
T
b
T_b
Tb 下成像(例如室内阴影 + 窗外日光):
- 平均法 [17]:输出色度 ≈ 轨迹上
T
a
T_a
Ta、T
b
T_b
Tb 对应点的连线中点——通常偏离轨迹,既不是T
a
T_a
Ta 也不是T
b
T_b
Tb,校正后两边都偏色; - 投票法:直方图在
T
a
M
i
r
e
d
T_a^{Mired}
TaMired 和T
b
M
i
r
e
d
T_b^{Mired}
TbMired 处形成两个峰,argmax 选出像素数多/亮度高的主导光源T
0
T_0
T0,重心计算又限制在[
T
0
−
σ
,
T
0
+
σ
]
[T_0-\\sigma, T_0+\\sigma]
[T0−σ,T0+σ] 邻域内——只对主导光源负责,不被次要表面污染。
6. MIRED 色温尺度与直方图插值(重点)
6.1 为什么不用开尔文尺度做直方图
普朗克轨迹上等间距的开尔文采样点,在色度图上的空间分布极不均匀:
- 低温端(2500K→4000K):轨迹移动很快,色度变化大;
- 高温端(10000K→20000K):轨迹几乎不动,色度挤在一起。
若按开尔文分 bin,低温端一个 bin 覆盖的色度范围过大,投票分辨率不足;高温端又大量空 bin。
MIRED 尺度(Micro-Reciprocal Degree,Priest 1933 [22]):
T
M
i
r
e
d
=
10
6
T
T_{Mired} = \\frac{10^6}{T}
TMired=T106
- 色品随
1
/
T
1/T
1/T 近似线性变化; - MIRED 均匀采样 ≈ 普朗克轨迹的近似等弧长采样,符合人眼对色温差异的感知;
- 例:2500K → 400 Mired,4000K → 250,6500K → 154,10000K → 100,20000K → 50。
6.2 直方图的构建与平滑(插值环节)
直方图
H
H
H 共
N
=
1000
N = 1000
N=1000 个 bin,覆盖 50~400 Mired(即 2500K~20000K):
p
p
p,把权重
w
(
p
)
=
luminance
(
p
)
n
w(p) = \\text{luminance}(p)^n
w(p)=luminance(p)n 加到 bin
⌊
T
M
i
r
e
d
(
p
)
⌋
\\lfloor T_{Mired}(p) \\rfloor
⌊TMired(p)⌋ 上;
σ
=
2
\\sigma = 2
σ=2(Mired 单位)的归一化高斯核滤波直方图:
H
s
m
o
o
t
h
(
T
)
=
∑
T
′
H
(
T
′
)
G
σ
(
T
−
T
′
)
H_{smooth}(T) = \\sum_{T'} H(T')\\, \\mathcal{G}_\\sigma(T – T')
Hsmooth(T)=T′∑H(T′)Gσ(T−T′)
这一步本质上是核密度估计(KDE)式的连续化插值:离散 bin 上的投票被高斯核扩散成连续的温度分布,作用有三:
- 把相邻 bin 的孤立票"桥接"起来,消除量化噪声;
- 使峰值附近形成平滑的单峰,argmax 稳定;
-
σ
\\sigma
σ 同时定义了后续"投票给T
0
T_0
T0"的邻域[
T
0
−
σ
,
T
0
+
σ
]
[T_0 – \\sigma, T_0 + \\sigma]
[T0−σ,T0+σ](Mired 域 ±2,对应 6500K 处约 ±470K 的容差)。
T
0
=
arg
max
T
H
s
m
o
o
t
h
(
T
)
T_0 = \\arg\\max_T H_{smooth}(T)
T0=argmaxTHsmooth(T);
T
M
i
r
e
d
(
p
)
∈
[
T
0
−
σ
,
T
0
+
σ
]
T_{Mired}(p) \\in [T_0-\\sigma, T_0+\\sigma]
TMired(p)∈[T0−σ,T0+σ] 的所有像素,按
w
(
p
)
w(p)
w(p) 加权求 uv 色度重心:
(
u
0
,
v
0
)
=
∑
p
∈
L
w
(
p
)
p
u
v
∑
p
∈
L
w
(
p
)
(u_0, v_0) = \\frac{\\sum_{p \\in L} w(p)\\, p_{uv}}{\\sum_{p \\in L} w(p)}
(u0,v0)=∑p∈Lw(p)∑p∈Lw(p)puv
注意:最终光源色度不是直接取轨迹上的点,而是投票像素原始色度的重心——保留了轨迹法向的真实偏移信息,比投影点更准确。
6.3 空直方图回退
若没有任何像素通过筛选(
H
=
∅
H = \\emptyset
H=∅,如极端场景),返回标准光源
(
u
r
e
f
,
v
r
e
f
)
(u_{ref}, v_{ref})
(uref,vref)(canonical illuminant),保证算法总有输出。
7. Algorithm 1 完整流程逐行解读
输入:sRGB 图像
p
p
p,距离阈值
δ
\\delta
δ,bin 数
N
N
N,高斯标准差
σ
\\sigma
σ,亮度幂次
n
n
n,标准光源
(
u
r
e
f
,
v
r
e
f
)
(u_{ref}, v_{ref})
(uref,vref) 输出:CIE uv 光源色度
(
u
0
,
v
0
)
(u_0, v_0)
(u0,v0) 实验参数:
δ
=
0.01
\\delta = 0.01
δ=0.01,
N
=
1000
N = 1000
N=1000,
σ
=
2
\\sigma = 2
σ=2,
n
=
3
n = 3
n=3
初始化直方图 H = 0(N 个 bin)
foreach 像素 p do
① p_uv ← Convert_sRGB→uv(p) # 转到 CIE 1960 uv 色度
② [p_Planck, T(p)] ← Proj_Planck(p_uv) # 投影到普朗克轨迹最近点
# T(p) = 垂足的黑体温度(K)
③ d ← distance(p_uv, p_Planck) # 到轨迹的距离 = "灰度可信度"
if d < δ and 2000K ≤ T(p) ≤ 20000K then # 双重筛选:够近 + 色温合理
④ T_MIRED(p) ← 10⁶ / T(p) # 开尔文 → MIRED 尺度
⑤ weight(p) ← luminance(p)ⁿ # 亮度加权(GW/WP 折中)
⑥ H[T_MIRED(p)] += weight(p) # 投票累积
end
end
if H == ∅ then
return (u₀, v₀) = (u_ref, v_ref) # 回退:标准光源
end
⑦ 用标准差 σ 的归一化高斯核平滑 H # 连续化/插值
⑧ T₀ ← argmax(H) # 主导色温(投票胜出者)
⑨ L ← { p : T_MIRED(p) ∈ [T₀−σ, T₀+σ] } # 胜出温度邻域内的像素集合
⑩ (u₀, v₀) ← Barycenter(L, weight(L)) # 加权重心 = 最终光源
return (u₀, v₀)
要点总结
| ①② | sRGB→uv + 轨迹最近点投影 | 2D 色度降为 1D 色温 + 灰度可信度 |
| ③ |
d < δ d < \\delta d<δ 且 T ∈ [ 2000 K , 20000 K ] T \\in [2000K, 20000K] T∈[2000K,20000K] |
只保留"像灰像素且色温物理合理"的候选 |
| ④ | MIRED 尺度 | 均匀采样普朗克轨迹,符合感知 |
| ⑤ | 亮度
n n n 次幂加权 |
抑制暗像素噪声,GW/WP 折中 |
| ⑦ | 高斯核平滑 | 离散投票连续化,峰值稳定 |
| ⑧⑨⑩ | 峰值选择 + 邻域重心 | 克服多灰表面歧义;重心保留法向信息 |
8. 算法流程图
#mermaid-svg-kXo1jEzbcKByzzr6{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kXo1jEzbcKByzzr6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kXo1jEzbcKByzzr6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kXo1jEzbcKByzzr6 .error-icon{fill:#552222;}#mermaid-svg-kXo1jEzbcKByzzr6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kXo1jEzbcKByzzr6 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kXo1jEzbcKByzzr6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kXo1jEzbcKByzzr6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kXo1jEzbcKByzzr6 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kXo1jEzbcKByzzr6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kXo1jEzbcKByzzr6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kXo1jEzbcKByzzr6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kXo1jEzbcKByzzr6 .marker.cross{stroke:#333333;}#mermaid-svg-kXo1jEzbcKByzzr6 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kXo1jEzbcKByzzr6 p{margin:0;}#mermaid-svg-kXo1jEzbcKByzzr6 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-kXo1jEzbcKByzzr6 .cluster-label text{fill:#333;}#mermaid-svg-kXo1jEzbcKByzzr6 .cluster-label span{color:#333;}#mermaid-svg-kXo1jEzbcKByzzr6 .cluster-label span p{background-color:transparent;}#mermaid-svg-kXo1jEzbcKByzzr6 .label text,#mermaid-svg-kXo1jEzbcKByzzr6 span{fill:#333;color:#333;}#mermaid-svg-kXo1jEzbcKByzzr6 .node rect,#mermaid-svg-kXo1jEzbcKByzzr6 .node circle,#mermaid-svg-kXo1jEzbcKByzzr6 .node ellipse,#mermaid-svg-kXo1jEzbcKByzzr6 .node polygon,#mermaid-svg-kXo1jEzbcKByzzr6 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kXo1jEzbcKByzzr6 .rough-node .label text,#mermaid-svg-kXo1jEzbcKByzzr6 .node .label text,#mermaid-svg-kXo1jEzbcKByzzr6 .image-shape .label,#mermaid-svg-kXo1jEzbcKByzzr6 .icon-shape .label{text-anchor:middle;}#mermaid-svg-kXo1jEzbcKByzzr6 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kXo1jEzbcKByzzr6 .rough-node .label,#mermaid-svg-kXo1jEzbcKByzzr6 .node .label,#mermaid-svg-kXo1jEzbcKByzzr6 .image-shape .label,#mermaid-svg-kXo1jEzbcKByzzr6 .icon-shape .label{text-align:center;}#mermaid-svg-kXo1jEzbcKByzzr6 .node.clickable{cursor:pointer;}#mermaid-svg-kXo1jEzbcKByzzr6 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kXo1jEzbcKByzzr6 .arrowheadPath{fill:#333333;}#mermaid-svg-kXo1jEzbcKByzzr6 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kXo1jEzbcKByzzr6 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kXo1jEzbcKByzzr6 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kXo1jEzbcKByzzr6 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kXo1jEzbcKByzzr6 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kXo1jEzbcKByzzr6 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kXo1jEzbcKByzzr6 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kXo1jEzbcKByzzr6 .cluster text{fill:#333;}#mermaid-svg-kXo1jEzbcKByzzr6 .cluster span{color:#333;}#mermaid-svg-kXo1jEzbcKByzzr6 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kXo1jEzbcKByzzr6 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kXo1jEzbcKByzzr6 rect.text{fill:none;stroke-width:0;}#mermaid-svg-kXo1jEzbcKByzzr6 .icon-shape,#mermaid-svg-kXo1jEzbcKByzzr6 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kXo1jEzbcKByzzr6 .icon-shape p,#mermaid-svg-kXo1jEzbcKByzzr6 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kXo1jEzbcKByzzr6 .icon-shape .label rect,#mermaid-svg-kXo1jEzbcKByzzr6 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kXo1jEzbcKByzzr6 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kXo1jEzbcKByzzr6 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kXo1jEzbcKByzzr6 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
否
是
是
否
输入: sRGB 图像 pδ=0.01, N=1000, σ=2, n=3
遍历每个像素
① sRGB → CIE 1960 uv
② 投影到普朗克轨迹最近点得垂足 p_Planck 与色温 T(p)
③ d = ‖p_uv − p_Planck‖
d < 0.01 且2000K ≤ T ≤ 20000K ?
④ T_MIRED = 10⁶/T⑤ w = luminanceⁿ⑥ H[T_MIRED] += w
直方图 H 为空?
返回标准光源 (u_ref, v_ref)
⑦ 高斯核(σ=2)平滑 H
⑧ T₀ = argmax H(主导色温胜出)
⑨ 收集 T_MIRED ∈ [T₀−σ, T₀+σ] 的像素集 L
⑩ (u₀,v₀) = L 的亮度加权重心
输出光源 (u₀, v₀)
9. 实验评估
9.1 数据库与协议
| Gehler / ColorChecker [12][24] | 568 张 | 仅用 RAW 版本(避免相机自动 ISP 的非线性破坏);分别在相机色彩空间和 sRGB 空间评估 |
| SFU grey-ball [23] | 11,346 张 | 线性化处理后评估 |
误差度量:估计光源
I
e
I_e
Ie 与真值
I
g
I_g
Ig 各定义一条"灰色轴",用两轴夹角衡量:
E
a
(
I
e
,
I
g
)
=
cos
−
1
(
I
e
⋅
I
g
∥
I
e
∥
∥
I
g
∥
)
E_a(I_e, I_g) = \\cos^{-1}\\!\\left( \\frac{I_e \\cdot I_g}{\\|I_e\\| \\, \\|I_g\\|} \\right)
Ea(Ie,Ig)=cos−1(∥Ie∥∥Ig∥Ie⋅Ig)
论文主张在 sRGB 空间评估更合理:(1) 相机 RGB 三通道动态范围差异大使误差有偏;(2) Gehler 库用了两台不同相机,在各自相机空间平均误差不一致。
9.2 主要结果(角度误差,度)
Gehler 数据库,sRGB 空间(Table 1):
| White-Patch | 9.6 | 7.7 | 8.6 | 2.2 | 20.3 |
| Grey-World | 9.1 | 8.6 | 8.8 | 2.9 | 16.2 |
| general Grey-World | 6.7 | 4.9 | 5.4 | 1.4 | 14.9 |
| 1st-order Grey-Edge | 7.0 | 6.3 | 6.4 | 2.8 | 12.5 |
| Pixel-based Gamut Mapping | 5.8 | 3.4 | 4.1 | 0.7 | 14.4 |
| Edge-based Gamut Mapping | 10.1 | 7.4 | 8.2 | 2.8 | 21.7 |
| ML (category-wise prior) | 4.3 | 3.6 | 3.7 | 1.4 | 8.4 |
| 本文方法 | 4.1 | 2.9 | 3.4 | 0.7 | 12.8 |
Gehler 数据库,相机 RGB 空间(Table 2):本文 4.1/3.1/3.3,仍优于全部免学习方法,接近 ML 方法(3.1/2.3)。
SFU grey-ball,sRGB 空间(Table 3):本文 10.9/8.5/9.1,median/trimean 优于所有对比方法(含 ML 的 8.9/9.2)。
9.3 结论
- 优于所有免学习方法(sRGB 与相机空间、mean 与 median 均如此);
- 同一组参数(δ=0.01, N=1000, σ=2, n=3)在两个数据库上都表现良好——方法稳定、无需调参;
- 性能接近复杂的学习类方法,而计算代价很低;
- sRGB 空间误差整体高于相机空间,源于相机色彩空间动态范围更窄。
10. 总结与启示
10.1 方法本质
把"二维光源估计"分解为"一维色温投票": 普朗克假设把可行光源约束到轨迹上 → 每个灰像素经最近点投影读出一个色温 → MIRED 尺度上构建亮度加权直方图 → 高斯平滑后取峰 → 胜出邻域内像素的加权重心即光源。
10.2 局限与展望
- 依赖普朗克假设:对远离普朗克轨迹的 LED/荧光灯光源,轨迹距离筛选会失效或给出误导性 CCT;
- 单一光源假设:算法输出单一光源;论文指出直方图本身包含多峰信息,细化的直方图分析可实现场景多光源估计——这是作者给出的未来方向。
网硕互联帮助中心






评论前必须登录!
注册