数字图像处理总结一
@Eason Sheng
图像概念 & 阈值分割
文末有代码链接。
图像
数字图像描述的是一个二元函数f(x,y),将图像的坐标和图上某处的值联系起来。
有三种图片,但本质都是灰度图像,像素值也称为灰度值。
图像种类分为:
二值图像 –
g
r
a
y
l
e
v
e
l
=
0
o
r
255
/
1
gray level = 0 or 255/1
graylevel=0or255/1
灰度图像 –
g
r
a
y
l
e
v
e
l
∈
[
0
,
255
]
gray level \in [0,255]
graylevel∈[0,255]
彩色图像 – 三个通道的灰度图片
伪彩图像、高维图片 – 不作详细介绍
阈值分割算法
阈值分割就是利用图片灰度的分布规律,来分割出图片中不同的物体。
而每个物体在图片中的都是一个个的正态分布
所以阈值分割就需要找到一个阈值来分出几个正态分布
而要找到那个阈值,就需要引入一个概念 – 灰度直方图
灰度直方图
就是统计图片中的灰度分布。
横坐标是0~255的灰度值,纵坐标是每个灰度值在图片中的出现的个数
每一个物体都有在一段灰度值中的分布,可以看出图片中物体的分布
找到那个阈值之后,是可以将阈值之下的置为0,之上的置为最高值。
但每张图都有不同的阈值,所以需要一个算法,可以针对不同的图,自动找到那个可以分割出的阈值
即算法的普适性
OTSU
OTSU是一个可以自动找到分割阈值的算法
其核心思想是:
将所有像素通过一个阈值分为前景和背景,然后用一个方差来描述两个类距离图像中心的距离的加和,这个方差最大时,两个类分得最开,对应用的阈值最优
算法描述:
先得到灰度直方图
对0-255的每个灰度值,来计算方差
方差公式:
σ
2
=
ω
0
ω
1
(
μ
1
−
μ
0
)
2
\sigma^2=\omega_0 \omega_1(\mu_1-\mu_0)^2
σ2=ω0ω1(μ1−μ0)2
ω
=
∑
P
(
i
)
\omega =\sum P(i)
ω=∑P(i)
P
(
i
)
=
n
i
/
N
P(i)=n_i/N
P(i)=ni/N
μ
=
∑
i
P
(
i
)
/
ω
\mu =\sum iP(i)/\omega
μ=∑iP(i)/ω
得到最大方差对应的阈值作为分割阈值
Entropy
熵分割也是一种可以自己找到分割需要的阈值的算法
熵描述的是信息量
而阈值分割问题,其实就是将图片分为前景和背景
如果前景信息量大的同时,背景的信息量也很大,那么就说明分割的比较好
所以核心思想就是:
Maximum(
H
=
H
W
+
H
B
H=H_W+H_B
H=HW+HB)
算法描述:
求出灰度直方图
对每个像素值,计算前景背景熵之和
得到熵最大的那个阈值作为最终的阈值
熵:
H
b
=
−
∑
0
→
t
p
i
l
o
g
(
p
i
)
H_b=-\sum^{0 \to t}{p_i log(p_i)}
Hb=−∑0→tpilog(pi)
H
w
=
−
∑
t
+
1
→
255
p
i
l
o
g
(
p
i
)
H_w=-\sum^{t+1 \to 255}{p_ilog(p_i)}
Hw=−∑t+1→255pilog(pi)
Code
这里的两种阈值算法都可以在我的GitHub上的项目里找到。
访问受限时可在码云访问。
该项目是一个包括阈值分割、卷积滤波、形态学和灰度形态学的数字图像处理算法集合
且带有GUI,有很好的演示效果
觉得可以别忘了star哦~