几种经典的二值化方法及其vb.net实现

几种经典的二值化方法及其vb.net实现,第1张

图像二值化的目的是最大限度的将图象中感兴趣的陪燃迅部分保留下来,在很多情况下,也是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果。

本文针对几种经典而常用的二值发放进行了简单的讨论并给出了其vb.net 实现。

1、P-Tile法

Doyle于1962年提出的P-Tile (即P分位数法)可以说是最古老的一种阈值选取方法。该方法根据先验概率来设定阈值,使得二值化后的目标或背景像素比例等于先验概率,该方法简单高效,但是对于先验概率难于估计的图像却无能为力。

2、OTSU 算法(大津法)

OSTU算法可以说是自适应计算单阈值(用来转换灰度图像为二值图像)的简单高效方法。1978 OTSU年提出芦此的最大类间方差法以其计算简单、稳定有效,一直广为使用。

3、迭代法(最佳阀值法)

(1). 求出图象的最大灰度值和最小灰度值,分别记为Zl和Zk,令初始阈值为:

(2). 根据阈值TK将图象分割为前景和背景,分别求出两者的平均灰度值Z0和ZB:

式中,Z(i,j)是图像上(i,j)点的象素值,N(i,j)是(i,j)点的权值,一般取1。

(3). 若TK=TK+1,则所得即为阈值,否则转2,迭代计算。

4、一维最大熵阈值法

它的思想是统计图像中每一个灰度级出现的概率 ,计算该灰度级的熵 ,假设以灰度级T分割图像,图像中低于T灰度级的像素点构成目标物体(O),高于灰度级T的像素点构成背景(B),那么各个灰度级在本区的分布概率为:

O区: i=1,2……,t

B区: i=t+1,t+2……L-1

上式中的 ,这样对于数字图像中的目标和背景区域的熵分段瞎别为:

对图像中的每一个灰度级分别求取W=H0 +HB,选取使W最大的灰度级作为分割图像的阈值,这就是一维最大熵阈值图像分割法。

阈值分割的核心就是如何选取阈值, 选取正确的阈值是分割成功的关键。

全局阈值分割指的是将灰度值大于 thresh (阈值)的像素设为白色,小于或者等于 thresh 的像素设为黑色; 或者反过来, 将大于 thresh 的像素设为黑色, 小于或者等于 thresh 的像素设为白色, 两者的区别只是呈现形式不同。

需要注意的是,当类型为 THRESH_OTSU 或 THRESH_TRIANGLE 时,输入参数 src 只支持 uchar 类型, 这时 thresh 也是作为输出参数的, 即通过 Otsu 和 TRIANGLE 算法自动计算出来。

局部阈值分割的核心也是计算阈值矩阵,比较常用的是后面提到的自适应阈值算法(又称移动平均值算法) , 是一种简单但是高效的局部阈值算法,其核心思想就是把每一个像素的邻域的“平均值”作为该位置的阈值。

一幅含有一个与背景呈现 明显对比 的物体的图像具有包含 双峰 的直方图,两个峰值对应于物体内部和外部较多数目的点,两个峰值之间的波谷对应于物体边缘附近相对较少数目的点。侍指

直方图技术法就是首先找到这两个峰值,然后取两个峰值之 间的 波谷位置 对应的灰度值,就是所要的阈值。

一 种常用的方式是先对直方图进行高斯平滑处理,逐渐增大高斯滤波器的标准差,直到能从平滑后的直方图中得到两个唯一的波峰和它们之间唯一的最小值。但这种方式需要手动调节,下面介绍一种规则自动选取波峰和波谷的方式。

假设输入图像为I, 高为H、 宽为W, histogramI 代表其对应的灰度直方图, histogramI (k) 代表灰度值等于k的像素点个数, 其中0≤k≤255。

利用熵计算阈值的步骤如下:

在对图像进行阈值分割时,所选取的分割阈值应使前景区域的平均灰度、背景区域 的平均灰度与整幅图像的平均灰度之间的差异最大, 这种差异用区域的 方差 来表示。 Otsu[2]提出了最大方差法, 该算法是在判别分析最小二乘法原理的基础上推导得出的, 计算过程简单, 是一种常用的阈值分割的稳定算法。

在不均匀照明或者灰度值分布不均的情况下,如果使用全局阈值分割, 那么得到的分割效果往往会很不理想。那么想到的策略是针对每一个位置的灰度值 设置一个对应的阈值, 而该位置阈值的设置也和其 邻域 有必然的关系。

在对图像进行平滑处理时,均值平滑、高斯平滑、中值平滑用不同规则计算出以当前像素为中心的邻域内的灰度“平均值”, 所以可以使用平滑处理后的输出结果作为每纯梁个 像素设置阈值的参考值,如用均值滤波后的结果乘以某个比例系数作为最后的阈值矩阵。

平滑算子的宽度必须大于被识做谈运别物体的宽度,平滑算子的尺寸越大,平滑后的结果越能更好地作为每个像素的阈值的参考,当然也不能无限大。

就可以理解OpenCV提供的自适应阈值函数:

OpenCV提供的两个函数 bitwise_and 和 bitwise_or 分别实现了两 个矩阵之间的与运算和或运算,它们本质上完成的是两个矩阵对应位置数值的逻辑运算。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12528197.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存