cv基础组队学习
计算机视觉基础-图像处理(上)-Task05 图像分割/二值化
1 简介
该部分的学习内容是对经典的阈值分割算法进行回顾,图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域不具有这种一致属性。这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。
2 学习目标
了解阈值分割基本概念
理解最大类间方差法(大津法)、自适应阈值分割的原理
掌握OpenCV框架下上述阈值分割算法API的使用
3 内容介绍
1、最大类间方差法、自适应阈值分割的原理
2、OpenCV代码实践
4 算法理论介绍
4.1 最大类间方差法(大津阈值法)
大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大。
它被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。
应用: 是求图像全局阈值的最佳方法,应用不言而喻,适用于大部分需要求图像全局阈值的场合。
优点: 计算简单快速,不受图像亮度和对比度的影响。
缺点: 对图像噪声敏感;只能针对单一目标分割;当目标和背景大小比例悬殊、类间方差函数可能呈现双峰或者多峰,这个时候效果不好。
求类间方差:
OTSU算法的假设是存在阈值TH将图像所有像素分为两类C1(小于TH)和C2(大于TH),则这两类像素各自的均值就为m1、m2,图像全局均值为mG。同时像素被分为C1和C2类的概率分别为p1、p2。因此就有:
m1p1+m2p2=mG (1)
m1+m2=1 (2)
类间方差表达式为:
将(1)式代入类间方差表达式化简:
遍历灰度值0-255,求出使上式最大的K值 ,就是大津法下的阈值。
效果图:
与原图对比:
有挺多细节被直接抹去了,这就是大津法的确定。
4.2 自适应阈值
对于目标类间方差多峰这种情况,办法就是自适应阈值法(adaptiveThreshold),它的思想不是计算全局图像的阈值,而是根据图像不同区域亮度分布,计算其局部阈值,所以对于图像不同区域,能够自适应计算不同的阈值,因此被称为自适应阈值法。(其实就是局部阈值法)
如何确定局部阈值呢?可以计算某个邻域(局部)的均值、中值、高斯加权平均(高斯滤波)来确定阈值。值得说明的是:如果用局部的均值作为局部的阈值,就是常说的移动平均法。
效果图:
相比大津法,细节多了很多。
5 记录函数
ret, dst = cv2.threshold(src, thresh, maxval, type)
- src:表示的是图片源
- thresh:表示的是阈值(起始值)
- maxval:表示的是最大值
- type:表示的是这里划分的时候使用的是什么类型的算法,常用值为0(cv2.THRESH_BINARY),THRESH_OTSU表示使用大津法。
//自适应阈值二值化
dst = cv2.adaptiveThreshold(src, maxval, thresh_type, type, Block Size, C)
- src: 输入图,只能输入单通道图像,通常来说为灰度图
- dst: 输出图
- maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
- thresh_type: 阈值的计算方法,包含以下2种类型:cv2.ADAPTIVE_THRESH_MEAN_C;
cv2.ADAPTIVE_THRESH_GAUSSIAN_C. - type:二值化操作的类型,与固定阈值函数相同,包含以下5种类型: cv2.THRESH_BINARY;
cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC;
cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV. - Block Size: 图片中分块的大小
- C :这个参数实际上是一个偏移值调整量,用均值和高斯计算阈值后,再减或加这个值就是最终阈值。