- 阈值分割是一种基于区域的、简单的通过灰度信息提取形状的技术,实现简单、计算量小、性能稳定,因此应用广泛。阈值分割后的输出图像只有两种灰度值:255和0,因此阈值分割处理又被称为图像二值化。
1.方法概述
- 全局阈值分割
全局阈值分割是将灰度值大于thresh(阈值)的像素设为白色,小于或者等于thresh的像素设为黑色;或者反过来。
假设输入图像为 I I I,高为 H H H,宽为 W W W, I ( r , c ) I(r,c) I(r,c)代表 I I I的第 r r r行第 c c c列的灰度值, 0 ≤ r < H , 0 ≤ c < W , 0 \leq r<H,0\leq c<W, 0≤r<H,0≤c<W,全局阈值处理后的输出图像为 O O O,则:
O ( r , c ) = { 255 , I ( r , c ) > t h r e s h 0 , I ( r , c ) ≤ t h r e s h O(r,c)= \begin{cases}255,&I(r,c)>thresh\\ 0,&I(r,c)\leq thresh \end{cases} O(r,c)={ 255,0,I(r,c)>threshI(r,c)≤thresh
或者
O ( r , c ) = { 0 , I ( r , c ) > t h r e s h 255 , I ( r , c ) ≤ t h r e s h O(r,c)= \begin{cases}0,&I(r,c)>thresh\\ 255,&I(r,c)\leq thresh \end{cases} O(r,c)={ 0,255,I(r,c)>threshI(r,c)≤thresh
threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
//src-输入矩阵,数据类型为CV_8U或者CV_32F
//dst-输出矩阵
//thresh-阈值
//maxval-图像二值化时,一般为255
//type-类型
当type=THRESH_BINARY,
d s t ( r , c ) = { m a x v a l , s r c ( r , c ) > t h r e s h 0 , s r c ( r , c ) ≤ t h r e s h dst(r,c)= \begin{cases}maxval,&src(r,c)>thresh\\ 0,&src(r,c)\leq thresh \end{cases} dst(r,c)={
maxval,0,src(r,c)>threshsrc(r,c)≤thresh
当type=THRESH_BINARY_INV,
d s t ( r , c ) = { 0 , s r c ( r , c ) > t h r e s h m a x v a l , s r c ( r , c ) ≤ t h r e s h dst(r,c)= \begin{cases}0,&src(r,c)>thresh\\ maxval,&src(r,c)\leq thresh \end{cases} dst(r,c)={
0,maxval,src(r,c)>threshsrc(r,c)≤thresh
当type为THRESH_OTSU或THRESH_TRIANGLE时,src只支持uchar类型,此时thresh作为输出参数,即通过Otsu和TRIANGLE算法自动计算。
//examples:
threshold(src, dst, 150, 255, THRESH_BINARY);
triThe = threshold(src, dst_tri, 0, 255, THRESH_TRIANGLE+THRESH_BINARY);
手动设置阈值效果不是很好,直方图技术法、Otsu算法、熵算法是比较流行的自动选取全局阈值的算法。
- 局部阈值分割
在有些情况下,如光照不均,全局阈值分割效果不理想,使用局部阈值(自适应阈值)可以产生较好的效果。
O ( r , c ) = { 255 , I ( r , c ) > t h r e s h ( r , c ) 0 , I ( r , c ) ≤ t h r e s h ( r , c ) O(r,c)= \begin{cases}255,&I(r,c)>thresh(r,c)\\ 0,&I(r,c)\leq thresh(r,c) \end{cases} O(r,c)={ 255,0,I(r,c)>thresh(r,c)I(r,c)≤thresh(r,c)
或者
O ( r , c ) = { 0 , I ( r , c ) > t h r e s h ( r , c ) 255 , I ( r , c ) ≤ t h