1 数学推导
1.1 符号说明如下
符号 | 含义 |
---|---|
D A D_A DA | 灰度变化前的灰度级 |
D B D_B DB | 灰度变化后的灰度级,灰度变化为 D B = f ( D A ) D_B=f(D_A) DB=f(DA) |
H A ( D ) H_A(D) HA(D) | 灰度变化之前的直方图 |
H B ( D ) H_B(D) HB(D) | 灰度变化之后的直方图 |
D m D_m Dm | 灰度级的个数 |
A 0 A_0 A0 | 该图像中总的像素个数 |
1.2 推导
由于某一特定灰度级变化前后包含的像素总数量永远不变,所以可得:
∫
D
B
D
B
+
Δ
D
B
H
B
(
D
B
)
d
D
=
∫
D
A
D
A
+
Δ
D
A
H
A
(
D
A
)
d
D
\int^{D_B+\Delta D_B}_{D_B}H_B(D_B)dD = \int^{D_A+\Delta D_A}_{D_A}H_A(D_A)dD
∫DBDB+ΔDBHB(DB)dD=∫DADA+ΔDAHA(DA)dD
当
Δ
D
B
→
0
,
Δ
D
B
→
0
\Delta D_B \to 0 ,\Delta D_B \to 0
ΔDB→0,ΔDB→0 时,上式可变化为:
H
B
(
D
B
)
Δ
D
B
=
H
A
(
D
A
)
Δ
D
A
H_B(D_B)\Delta D_B =H_A(D_A)\Delta D _A
HB(DB)ΔDB=HA(DA)ΔDA
所以:
H
B
(
D
B
)
=
H
A
(
D
A
)
Δ
D
A
Δ
D
B
H_B(D_B) = \frac{H_A(D_A)\Delta D _A}{\Delta D_B}
HB(DB)=ΔDBHA(DA)ΔDA
由于
Δ
D
B
→
0
,
Δ
D
B
→
0
,
D
B
=
f
(
D
A
)
\Delta D_B \to 0 ,\Delta D_B \to 0,D_B = f(D_A)
ΔDB→0,ΔDB→0,DB=f(DA),所以:
d
D
B
d
D
A
=
d
f
(
D
A
)
d
D
A
=
f
′
(
D
A
)
H
B
(
D
B
)
=
H
A
(
D
A
)
d
D
B
/
d
D
A
=
H
A
(
D
A
)
f
′
(
D
A
)
\frac{dD_B}{dD_A} = \frac{df(D_A)}{dD_A}=f'(D_A) \\ \ \\ \ H_B(D_B)= \frac{H_A(D_A)}{d D_B/dD_A} = \frac{H_A(D_A)}{f'(D_A)}
dDAdDB=dDAdf(DA)=f′(DA) HB(DB)=dDB/dDAHA(DA)=f′(DA)HA(DA)
推导至此,就可以很明显的看出变化前的直方图
H
A
(
D
)
H_A(D)
HA(D),变化后的直方图
H
B
(
D
)
H_B(D)
HB(D)以及变化函数
D
B
=
f
(
D
A
)
D_B=f(D_A)
DB=f(DA)之间的关系了😁。
再结合本章要讲的内容:直方图均衡化。想一下如何才能让原本分布不均匀的灰度经过变化后变得均匀呢?一个很简单的思想就是把变化后的直方图
H
B
(
D
)
H_B(D)
HB(D)设为一个定值,由于一共有
A
0
A_0
A0个像素,
D
m
D_m
Dm个灰度级。均衡化后最好的结果是每个灰度级的像素个数相同,即
A
0
D
m
\frac{A_0}{D_m}
DmA0,根据上述说明,我们只需保证
H
B
(
D
)
=
A
0
D
m
H_B(D)=\frac{A_0}{D_m}
HB(D)=DmA0即可,即:
H
B
(
D
)
=
A
0
D
m
=
H
A
(
D
A
)
f
′
(
D
A
)
↓
f
′
(
D
A
)
=
D
m
A
0
H
A
(
D
A
)
H_B(D)=\frac{A_0}{D_m}= \frac{H_A(D_A)}{f'(D_A)} \\ \downarrow \\ f'(D_A)=\frac{D_m}{A_0}H_A(D_A)
HB(D)=DmA0=f′(DA)HA(DA)↓f′(DA)=A0DmHA(DA)
想一下如何得到变化函数
f
f
f呢?当然跟简单,只需要对上述式子左右同时进行积分即可,即可得到:
f
(
D
A
)
=
D
m
A
0
∑
0
D
A
H
A
(
D
A
)
f(D_A) = \frac{D_m}{A_0}\sum^{D_A}_0 H_A(D_A)
f(DA)=A0Dm0∑DAHA(DA)
又由
D
B
=
f
(
D
A
)
D_B=f(D_A)
DB=f(DA)可得:
D
B
=
D
m
A
0
∑
0
D
A
H
A
(
D
A
)
D_B= \frac{D_m}{A_0}\sum^{D_A}_0 H_A(D_A)
DB=A0Dm0∑DAHA(DA)
这就完成了从原灰度级
D
A
D_A
DA经过直方图均衡化新的灰度级
D
B
D_B
DB的变化!
2 示例
待会抽空再写,困了🥱
3 均衡化代码
待会抽空再写,困了🥱