二值化方法

一、全局阈值法

1.固定阈值方法

该方法是对于输入图像中的所有像素点统一使用同一个固定阈值。其基本思想如下:

其中,T为全局阈值。

 

缺点:很难为不同的输入图像确定最佳阈值。

 

2.Otsu算法

Otsu算法又称最大类间方差法

先明确两个概念:

(1)均值

(2)方差

 

图像的阈值化处理,就是将图像分为两个部分,高于阈值的部分,和小于阈值的部分。(暂不考虑多阈值的情况)。那么,如果将图像的每一个像素点的强度作为一个数据集合中的单元,那么,阈值化就相当于是一个二分类的问题。

 

图像的阈值化处理,就是将图像分为两个部分,高于阈值的部分,和小于阈值的部分。(暂不考虑多阈值的情况)。那么,如果将图像的每一个像素点的强度作为一个数据集合中的单元,那么,阈值化就相当于是一个二分类的问题。

 

我们假设,大于阈值的类为S1,维度为n1(不考虑秩的问题,实际上就是像素个数),均值为m1;小于阈值的类记为S2,维度为n2,均值为m2。根据前面概率的知识,理想的情况下,对于每一个类,其类内方差应该是很小的。

 

当然了,考虑每一个类是可行的。但是,我们又可以换个思路,全局上来考虑呢?

 

假设整个图像的均值为m,我们假设就只有两个数据,m1,m2,考虑着两个数据的离散程度,同样可以用上面的方差公式。这里看起来有点怪怪的,暂且这样来理解吧。也就是说,方差越大,这两个类也就越离散,分的越开。就像吵架一样,吵得声音越大,说明分歧越大,越严重。

 

所以,我们求这个阈值时,就希望,在内部是很团结的,就是在阈值分割后,两个类中,每一个类都是很和谐的。但是,相互之间又非常的受不了对方,离的越远越好。那么,找到这样的阈值,就十分开心了。

缺点:当目标物体与背景大小比例悬殊或灰度级接近,导致直方图呈现三峰或双峰峰值差距极大时,Otsu算法往往得不到满意的结果

 

二、局部阈值法

 

1.自适应阈值算法

自适应阈值算法[2]用到了积分图(Integral Image)的概念,它是一个快速且有效地对网格的矩形子区域计算和的算法。积分图中任意一点 (x, y) 的值是从图左上角到该点形成的矩形区域内所有值之和。图2-5b中的灰色部分为图2-5a中灰色矩阵内值的加和:

自适应阈值算法的主要思想是以一个像素点为中心设置大小为 s×s 的滑窗,滑窗扫过整张图像,每次扫描均对窗口内的像素求均值并将均值作为局部阈值。若窗口中的某一像素值低于局部阈值t/100,赋值为0;高于局部阈值t/100,赋值为255。因为涉及多次对有重叠的窗口进行加和计算,因此积分图的使用可以有效地降低复杂度和操作次数。为了计算积分图,我们在每个位置存储其左边和上方所有 f(x, y) 值的总和,这一步骤会在线性时间内完成:

                                                                   I(x, y)= f(x, y)+I(x-1, y)+I(x, y-1)-I(x-1, y-1)

一旦得到积分图,对于任意从左上角 (x1y1, ) 到右下角(x2y2, ) 的矩形内(如图2-6所示)的数值总和均可以使用式(2.2)计算:

流程共扫描全图两次,第一次扫描获得积分图intImg,第二次扫描根据式(2.2)计算每次扫描窗口内像素值的平均值的(100-t)/100,并将计算结果作为局部阈值。若窗口内某一像素点的值乘以窗口大小大于该阈值,则对应输出255,反之则输出0。

2. Niblack算法

Niblack算法同样是根据窗口内的像素值来计算局部阈值的,不同之处在于它不仅考虑到区域内像素点的均值和方差,还考虑到用一个事先设定的修正系数 k 来决定影响程度。

                                                                                  T(x, y)=m(x, y)+ks(x, y)

其中,T(x, y) 为阈值,m(x, y)、s(x, y) 分别代表均值与方差。与 m(x, y) 相近的像素点被判定为背景,反之则判定为前景,而相近的程度则由标准差和修正系数来决定,这样做可以保证算法的灵活性。

 

缺点:Niblack算法的缺陷一方面在于 r × r 的滑窗会导致在边界区域(r-1)/2的像素范围内无法求取阈值;另一方面在于如果 r×r 滑窗内全部是背景,那么该算法必然会使一部分像素点成为前景,形成伪噪声。因此,r的选择非常关键,若窗口太小,则不能有效地抑制噪声;若窗口太大,则会导致细节丢失。

 

3. Sauvola算法

Sauvola算法是针对文档二值化处理,在Niblack算法基础上的改进:

 

其中,R是标准方差的动态范围,若当前输入图像是8位灰度图像,则 R=128。Sauvola算法在处理光线不均匀或染色图像时,比Niblack算法拥有更好的表现,因为式(2.3)以自适应的方式放大了标准差s的作用。假设我们要处理一份浅色但有污渍的文档,那么乘以m系数会降低背景区域阈值的范围,这可以有效地减少染色、污渍等带来的影响。表2-1展示了Sauvola与Niblack算法在处理染色文档时的效果差异。

三、其他方法

对于灰度图而言,腐蚀和膨胀运算都类似于卷积操作——将结构元素在原图上平移,而结构元素上的原点就相当于卷积核的核中心。首先我们约定,将结构元素覆盖住的原图区域记为P。

1.腐蚀

如图2-10所示,腐蚀运算即在平移过程中依次计算 P 和 结构元素的差矩阵,并将该矩阵中的最小值赋给原点对应的原图位置.

2.膨胀

如图2-11所示,膨胀运算则是计算 P 和结构元素的和矩阵,并将该矩阵中的最大值赋给原点对应的原图位置。

3.开运算

开运算是先腐蚀后膨胀,开运算可以使图像的轮廓变得光滑,断开狭窄的连接并消除细毛刺

 

4.闭运算

闭运算是先膨胀后腐蚀.闭运算同样可以平滑轮廓,但其具体作用是排除小型空洞,弥合狭窄的间断点、沟壑以及填补断裂的轮廓线。

 

 

 

 

热门文章

暂无图片
编程学习 ·

react-native 使用react-native-image-crop-picker上传图片、视频到服务端

博主主要卡在了上传数据这一步情景是这样的:每一次只允许选择一张图片,每次从相册中选择一图片点击右上角确定后,立即发送请求,上传该图片,并且下次再点击时,重复这个动作。(1)点击下图的上传资料(2)点击红框内的按钮(3)选择图片(4)选择完毕的同时,上传图片到服…
暂无图片
编程学习 ·

《伸手系列》之分布式锁Redssion入门和源码解析

Redisson简介 Javaer都知道Jedis,Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持。Redission也是Redis的客户端,相比于Jedis功能简单。Jedis简单使用阻塞的I/O和redis交互,Redission通过Netty支持非阻塞I/O。Jedis最新版本2.9.0是2016年的快3年了没…
暂无图片
编程学习 ·

『杭电1251』统计难题

Problem DescriptionIgnatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).Input输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师…
暂无图片
编程学习 ·

获取电脑ip地址的代码工具类

获取ip地址的工具类 import javax.servlet.http.HttpServletRequest;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springfram…
暂无图片
编程学习 ·

vue or h5分享页面 唤起和下载app(苹果和安卓判断 及 微信浏览器和其他浏览器的判断)

题外话: 菜鸡是没有发言权的,导致即使不是前端的锅,也把它变成是你的锅。 哎!!!!!!!!!!!!!首先必须感谢我认识的大佬,一直在帮我解决问题(我关注的那个jamesluozhiwei 这位)步入正题: 1 。唤起和下载 用的框架 和 参考文档(重要,弄清原理啥的看这个)…
暂无图片
编程学习 ·

功能测试框架

功能测试框架可以包括:界面友好性测试、功能测试、链接测试、容错测试、稳定性测试、常规性能测试、配置测试、算法测试等等。1.1.1 界面友好性测试风格、样式、颜色是否协调界面布局是否整齐、协调(保证全部显示出来的,尽量不要使用滚动条界面操作、标题描述是否恰当(描述…
暂无图片
编程学习 ·

springboot aop 切到service层,不生效

今天发现一个问题,使用aop切到service层方法上,idea会有切成功的标志,编译也不报错,但就是不生效。研究了下发现,是因为我切的方法被同一个service中的其他方法调用,这样的话就不生效了,暂不清楚原因,解决方法时切到调用它的方法上,这只是切点不生效的一种情况,希望能…
暂无图片
编程学习 ·

XML DOM摘要四(XMLHttpRequest 对象)

什么是 XMLHttpRequest 对象?XMLHttpRequest 对象提供了在网页加载后与服务器进行通信的方法。XMLHttpRequest 对象是开发者的梦想,因为您能够:在不重新加载页面的情况下更新网页在页面已加载后从服务器请求数据在页面已加载后从服务器接收数据在后台向服务器发送数据 所有现…
暂无图片
编程学习 ·

我很喜欢研究这些比较酷的效果

html5捕鱼达人游戏源代码https://www.mk2048.com/demo/demo_target_desc_h0c1221a2j.html原生js html5一款捕鱼达人的手机小游戏源码。使用介绍: hgame.js 提供一个游戏需要的基本类, objproto.js提供一个游戏需要的扩展类, data.js 提供一个游戏需要的各种数据, start.js …
暂无图片
编程学习 ·

Java 语言中关键字“static”的理解和应用详解

接触Java编程语言的初学者们,都是熟悉static这个关键词的,至少混个脸熟了已经。涉及到它的概念、或解释,我们都是知道它表示“静态”、甚至了解“静态存储区”。它可以应用到:属性 方法 代码块 还可以做“静态导入” 内部类 一、static修饰的属性,我们亦称之为“静态变量”…
暂无图片
编程学习 ·

每日一题 -- LeetCode (八)

JavaScript / TypeScript for LeetCode 当前进程:开始时间:2020.6.27 结束时间:undefinedGitHub仓库:https://github.com/Cundefined/JavaScript-or-TypeScript-for-LeetCode 参考视频:https://www.bilibili.com/video/BV1wA411b7qZ 1、题目要求 ( LeetCode-第53题 ) 最大…
暂无图片
编程学习 ·

05 | 消息积压了该如何处理?

1.应用场景https://blog.csdn.net/william_n/article/details/1040254082.学习/操作2.1 阅读文档这节课我们来聊一聊关于消息积压的问题。据我了解,在使用消息队列遇到的问题中,消息积压这个问题,应该是最常遇到的问题了,并且,这个问题还不太好解决。我们都知道,消息积压…
暂无图片
编程学习 ·

css border-radius的用法及自适应的椭圆

我们知道border-radius允许您为元素添加圆角边框! 而border-radius 属性是一个简写属性,用于设置四个 border-*-radius 属性。 如果省略 bottom-left,则与 top-right 相同。如果省略 bottom-right,则与 top-left 相同。如果省略 top-right,则与 top-left 相同。 先看个例子…
暂无图片
编程学习 ·

隐秘的角落:张东升的人生,给所有职场人提了个醒

如果说,找一个代名词来形容职场中的中年人,之前可能没有。现在,我想,“张东升”这三个字就够了! 张东升是近期大火的电视剧《隐秘的角落》的主角,在剧中,他有着两种截然不同的模样。 表面上,在学生眼里他是一个才华横溢、带来梦想的数学老师,在同事眼里他是一个忠于妻…
暂无图片
编程学习 ·

Hadoop(七)——中下下

shuffle MapReduce的shuffle分为map阶段的shuffle和reduce阶段的shuffle,下面就分别来做介绍。 map阶段的shuffle: 之前我们学的是map阶段并不是直接把数据给reduce,而是会把数据分好,该分区的分区,该封装的封装,该合并的合并再给到reduce,下面就来详细介绍这个过程。1.…
暂无图片
编程学习 ·

LeetCode——remove n-th node from end of list

题目描述: 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.↵↵ 删除了链表的倒数第n个节点之后,链表变为1->2->3->5. 备注: 题目保证n一定是合法的 请尝试只用一步操作完成该功能 解题思路: 删除…