学习DIP第51天
转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro
新年第一篇博客,图像分割进行到阈值处理,前面学的边缘检测,然后将边缘连接起来,达到分割区域的目的,用到的基础原理是图像灰度的变化,而阈值处理用到的是阈值的不变,也就是把具有相同或相似的灰度的一类像素定义为一个区域,根据这个特点来定义并区分一个区域。而阈值可以理解为一个界限,或者一个划分,超过这个界限的是一个区域,没超过划分为另一个区域,而核心问题式确定这个阈值。
阈值处理用到的唯一公式如下,这是阈值处理的核心操作:
式子中T就是我们的阈值,我们将要学习的算法都是来确定这个T的。
当然这是单阈值的方法,如果有多个模式的时候我们也会使用多阈值,但多阈值难度较大,一般很少使用。
阈值根据不同得到阈值的方法可以将阈值分成以下几种类型:
可见阈值可以分成全局阈值,局部阈值和动态阈值,这些不同的阈值要根据不同的图像情况来确定使用不同的方法。
理解阈值我们可以将一副图像想象成一个三维场景,图像长和宽为三维空间中的x轴和y轴,而灰度强度为z轴,对于lena图,用Matlab产生下图,三维图像沿着x轴旋转:
其他角度观察此图:
我们使用一个简单的阈值处理,比如使用128作为阈值,大于128的灰度设为128,小于128的保持不变,可以理解为以横着切一刀,效果就下面:
阈值处理通过观察原图的直方图也可以得出很好的理解,当直方图为双峰,且波谷越深越宽的,使用阈值处理越好。
阈值处理可以产生二值图或者其他灰度图,可以根据需要来产生所需要的结果,一般可以产生下面几种结果,对于单阈值:
Minvalue最小值,最小灰度值,0
Maxvalue最大值,最大灰度值,255
dst(x,y)=src(x,y)>T?src(x,y):Minvalue;
dst(x,y)=src(x,y)>T?Maxvalue:src(x,y);
dst(x,y)=src(x,y)>T?Maxvalue:Minvalue;
//此处产生二值图像
dst(x,y)=src(x,y)>T?Minvalue:Maxvalue;
//此处产生二值图像,将上图反转
影响阈值处理的主要两个因素是噪声和光照观察下图为两个灰度的图像。
原图:
原图直方图:
加入标准差为1%(255的1%),均值为0的高斯噪声:
直方图:
加入标准差为3%(255的3%),均值为0的高斯噪声:
直方图:
加入标准差为5%(255的5%),均值为0的高斯噪声:
直方图:
加入标准差为7%(255的7%),均值为0的高斯噪声:
直方图:
直方图:
直方图:
以上直方图的变化可以清楚的发现,对于原图可以很容易使用一个阈值划分成两个部分,当噪声不断增加划分难度越来越大,阈值选择也越来越难,当噪声到15%时,双峰图消失,变成了单峰,对阈值确定产生了巨大的难度。
对于阈值处理第二个严重的影响是不均匀的光照,当图像有偏光,图像直方图会发生漂移如下:
使用偏光照射:
原图直方图:
偏移直方图:
背景系数图:
背景直方图:
对于上述这些影响因素,在阈值处理前需要相应的操作来去噪或者改变偏照的影响,具体方法可以使用顶帽操作或者使用逆光照模板处理,再或者使用可变阈值来处理。
影响直方图阈值的关键因素是:
图像反射特性的均匀性
针对上述这些特征和特殊情况开发出一系列的算法,使阈值处理达到实时和有效分割目标和背景。
根据不同的方法阈值算法可以分为以下几类:
其中包括:
1. 均值法
2. P-tile法
2. 直方图法
3. 边缘最大技术
4. visual technique法
阈值处理是相对较简单的一种分割方法(对于单个阈值),其关键是确定阈值,后面将详细介绍几种阈值确定方法。
祝大家新年快乐
待续。。。。
原文地址:http://blog.csdn.net/tonyshengtan/article/details/43906979