在进行图像二值化时总是存在一些明部、暗部的干扰,单一的使用opencv提供的原始二值化方法很难做到预期效果。一般我们都会采用分块二值化(将图像切为多个局部进行二值化)、对比度提升(对值域进行线性或者非线性变换、直方图均衡化)、局部二值化(Bernsen 算法、 Niblack 算法、Sauvola算法、 Chow 和 Kaneko 算法等)的方式进行二值化。这些手段限制了思路的发挥,不一定适用于所有场景。这里对可搜集的二值化方法进行汇总。共统计出4种二值化方法:1、颜色空间转换,2、多次二值化,3、背景光补偿,4、梯度信息补充。本博文介绍了各个方法的案例、核心思想、基本步骤和适用范围,并对算法的扩展改进提出探讨思考。
1、颜色空间转化
1.1 基本实现
rgb影像转灰度图后,在进行二值化时会遗失部分颜色信息,而在某些任务中颜色信息又是进行二值化的必须依赖。如,按照颜色提取图中的特定物体等。
具体案例:https://bbs.csdn.net/topics/390735437?page=1
原始思路:rgb=>gray=>otsu二值化
新思路:rgb=>hsv=>h通道otsu二值化
此外,对于hsv颜色空间,还可以对h*v进行二值化,这样子可以提取出图像中颜色显著的部分。
1.2 核心思想
通过转换颜色空间,对明度、亮度、颜色饱和度等信息进行二值化。
基本步骤:
1、进行颜色空间转换,使颜色突出的部分区域在指定通道(明度、亮度、颜色饱和度)上比较突出;(如hsv的h和v通道,lab的l通道)
2、对指定通道进行二值化
适用范围:以颜色显著变换为主的形态分割
1.3 扩展思考
这种颜色空间转换,本质就是换一种数据展现方式,使图像中的目标区域亮度值偏大,然后进行二值化。其不一定局限与单通道信息的二值化,可以多通道信息进行融合然后再进行二值化。例如:将hsv颜色空间中的s*v融合后进行二值化,或者将h(hsv空间)+l(lab空间)等跨颜色空间的组合。
2、多次二值化
2.1 基本实现
对于一些存在亮部和暗部的图像,使用一个二值化阈值进行操作是无法得到理想结果的,需要使用多个阈值进行二值化。
具体案例:https://blog.csdn.net/weixin_55984718/article/details/125769347
执行效果:
2.2 核心思想
进行2次OTSU分别提取出亮部和暗部的二值化阈值,然后根据2个阈值进行逐像素的二值化。
基本步骤:
1、基于OTSU得到二值化阈值t1和mask ;
2、获取mask中暗部的二值化阈值t2 ;
3、针对亮部和暗部区域分别使用不同的阈值 ;(足像素进行二值化)
适用范围:存在一个阴影或者亮部干扰的图像
2.3 扩展思考
多次二值化一定是只能进行两次二值化么【对暗部和亮部单独进行二值化么】?就比如上述2.1图中的‘38度泸州陈’这几个字就没有能很好的二值化。在算法研究实现中,或许可以使用迭代的思想,对亮部和暗部分别再此进行二值化得到亮部_亮部、亮部_暗部、暗部_亮部、暗部_暗部,然后再去得到二值化结果。
3、背景光补偿法
3.1 基本实现
在对书籍文本进行二值化化时,通常由于反光、数据表面不平使原始图像上存在亮斑和暗斑,这使得单一二值化阈值不再适用。
具体案例:https://blog.csdn.net/u013162930/article/details/47755363
执行效果:原图和求出的背景光补偿图
3.2 核心思想
通过邻域确定背景光补偿值,最终使图像的光照处于一个统一稳定的的水平,然后再进行二值化
基本步骤:
1、逐像素计算其邻域的最大值,作为背景值,然后计算出背景光补偿值
2、根据背景光补偿图对原图光照进行补偿,使图像的光照处于一个统一稳定的的水平
3、对图像进行otsu二值化
像数值和领域锚值差异小,补偿值接近0;原图过亮,补偿值为负数;原图过暗,补偿值为正数
适用范围:其计算背景光的方式使其仅能用于文本的二值化,若能从全局角度计算出背景光补偿值,则可以用于其他复杂场景
3.3 扩展思考
该方法的核心思路就是计算出背景光补偿值,严重依赖领域区域大小的设置,且通过光照补偿会降低原先的差异度。故此,计算出背景光补偿值不一定可取,其效果或许不如章节2中的多次二值化。
注1:还有另外一种背景光补偿法,其基于全局均值(锚值)和局部均值(当前值)做差得到补偿值 可以参考 https://harry.blog.csdn.net/article/details/54019994
注2:该方法作者提到了sauvola二值算法,其实现在https://blog.csdn.net/lcalqf/article/details/71479650
sauvola二值算法的使用效果可以参考,比起章节二中的多次二值化是要好一些
http://www.zhihuishi.com/source/248.html#download
4、梯度信息补充
4.1 基本实现
在某些光照环境下,亮与暗为一个基于对比的相对关系,某些像数值在亮部区域算暗,而在暗部区域算亮。
例如上图,若适用单一阈值进行处理则会得到以下结果:
具体案例:https://blog.woyou.cool/post/%e4%b8%8d%e5%9d%87%e5%8c%80%e5%85%89%e7%85%a7%e4%b8%8b%e7%9a%84%e5%9b%be%e5%83%8f%e4%ba%8c%e5%80%bc%e5%8c%96%e5%a4%84%e7%90%86%e6%96%b9%e6%a1%88/
4.2 核心思想
通过边缘梯度信息对二值化结果再次进行分割判断
基本步骤:
1、先求出原图的边缘梯度信息(包含xy方向)
2、对原图进行二值化
3、使用边缘梯度信息分割二值图
4、根据均值选择连通域
适用范围:其基于梯度信息对二值化结果进行优化,只能用于提取面积较大的图形(对于字符的提取是不行的)文章来源:https://www.toymoban.com/news/detail-574151.html
4.3 扩展思考
利用边缘梯度确实再一定程度上弥补了单像素二值化对全局信息的缺失,通过对该角度的思考,我们或许可以将边缘梯度信息扩展为区域信息(将边缘扩展为连通域,使用连通域的均值对区域内原先的像素值进行调整,类似于背景光补偿法)。文章来源地址https://www.toymoban.com/news/detail-574151.html
到了这里,关于Opencv 基本操作八 不均匀光照下的图像二值化探讨的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!