图像⼆值化
应⽤场景
⼆值图像处理与分析在机器视觉与机器⼈视觉中⾮常重要,涉及到⾮常多的图像处理相关的知识,常见的⼆值图像分析包括轮廓分析、对象测量、轮廓匹配与识别、形态学处理与分割、各种形状检测与拟合、投影与逻辑操作、轮廓特征提取与编码等。⼆值化⽅法是⼀种应⽤⼴泛的图像分割⽅法,恰当的⼆值化结果对于 ⽂档图像分析、OCR以及医学图像中对 DNA 点阵图像分析等起着⾄关重要的作⽤。 通常可以分为全局⼆值化和局部⼆值化⽅法两类,前者将⼀个固定的阈值应⽤于整幅图像,简单易⾏,但在光照不均匀的条件难以应⽤,如Otsu 法;后者则针对图像的不同部分采⽤不同的阈值来解决光照问题,其阈值实际是⼀个随像素变化的曲⾯。本⽂将着重介绍如何从⼀幅图像中获取有⽬的性的⼆值图像。
⼆值图像定义
⼆值图像就是只有⿊⽩两种颜⾊表⽰的图像,在数字上⽤0 表⽰⿊⾊(0),1表⽰⽩⾊(255) 。在实际场景中,⼆值图像的获得⼀般需要经过如下过程。
从灰度图像到⼆值图像,本质上是对数据的⼆分类分割,所以很多数据处理的⽅法都可以使⽤,但是图像是特殊类型的数据,它有很多限制条件,决定了只有⼀些合适的⽅法才会取得⽐较好的效果。这些算法的最主要的⼀个任务就是寻合理的分割阈值T。
阈值获取的⽅法
⼆值化分割可分为⼿动阈值分割和⾃动阈值分割,前者是根据整幅图像的特征进⾏分析进⽽确定,⽬前常⽤的⽅法包括⼿动阈值法及⾃动阈值法,
⼿动阈值分割
dx4⾃动阈值分割
基于灰度图均值的⾃动分割
太子乐金100基于直⽅图的⾃动分割
OTSU(直⽅图出现双峰)
甘氨酸乙酯
Triangle(直⽅图出现单峰)
⾃适应阈值分割
下⾯以下图为例,对上述⼏种阈值分割⽅法进⾏分析和对⽐。
⼿动阈值法
该阈值T需要⼈为给定,取值范围为0-255,常规的定义为灰度图像上某点像素值 P(x, y) > T ? 255 : 0,除此之外,还有⼏种变式如下:P(x, y) > T ? 0: 255,表⽰像素值⼤于阈值时,为0,否则为255;
P(x, y) > T ? T : 0 ,表⽰像素值⼤于阈值时,为0,否则为255;
P(x, y) > T ? T : P(x, y) ,表⽰像素值⼤于阈值时,为阈值,否则为原像素;
P(x, y) > T ? P(x, y) : 0 ,表⽰像素值⼤于阈值时,为原像素,否则为0;
P(x, y) > T ? 0 : P(x, y) ,表⽰像素值⼤于阈值时,为0,否则为原像素;
图解表⽰为:
在OPENCV中有相应的API可以使⽤,可以根据任务需求,选择不同的type值。
函数原型:
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)参数含义:
InputArray src -输⼊原图像,需为灰度图像
OutputArray dst -输出图像
double thresh -阈值⼤⼩(即阈值T)滇虹康王
double maxval -最⼤值(⼀般指定为255,也可指定为其他数值)
int type -阈值模式(很重要,它决定这个函数的变式,0为常规型的,1-4均为变式)
深圳市龙华区基础教育其中,type可以取0-4中的任⼀个值,对应的含义如下:
0:THRESH_BINARY-当前点值⼤于阈值时,取Maxval,否则设置为0;
1:THRESH_BINARY_INV-当前点值⼤于阈值时,设置为0,否则设置为Maxval;
2:THRESH_TRUNC-当前点值⼤于阈值时,设置为阈值,否则不改变;
3:THRESH_TOZERO-当前点值⼤于阈值时,不改变,否则设置为0;
4:THRESH_TOZERO_INV-当前点值⼤于阈值时,设置为0,否则不改变。
设阈值T = 120 ,type分别取0-4,可以得到以下结果:1) type = 0
2)type = 1
柴油告急
3)type = 2
4) type = 3
5) type = 4