图像二值化是什么?最简单的图像分割方法是二值化(Binarization)图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。二值图像每个像素只有两种取值:要么纯黑,要么纯白

进行二值化的方式?其中最常用的就是采用阈值法(Thresholding)进行二值化,(根据阈值选取方式的不同,可以分为全局阈值局部阈值【又称为自适应阈值

全局阈值的缺陷?在生产线环境下,光照是已知的,常常会设定一个固定的数字来作为全局阈值,在室外或者机器人比赛中,光照条件往往更加复杂我们需要能够适应复杂环境的算法

目录

1、全局阈值(Global Method)

2、局部阈值(Local Method)

阈值算法实现:


由于二值图像数据足够简单,许多视觉算法都依赖二值图像。通过二值图像,能更好地分析物体的形状和轮廓。二值图像也常常用作原始图像的掩模(又称遮罩、蒙版,Mask):它就像一张部分镂空的纸,把我们不感兴趣的区域遮掉。进行二值化有多种方式,其中最常用的就是采用阈值法(Thresholding)进行二值化。

在计算机视觉里,一般用矩阵来表示图像。也就是说,无论你的图片看上去多么好吃,对计算机来说都不过是个矩阵而已。在这个矩阵里,每一个像素就是矩阵中的一个元素。在三通道的彩色图像中,这个元素是由三个数字组成的元组。而对于单通道的灰度图像来说,这个元素就是一个数字。这个数字代表了图像在这个点的亮度,数字越大像素点也就越亮,在常见的八位单通道色彩空间中,0代表全黑,255代表全白。

阈值法是指选取一个数字,大于它就视为全白,小于它就视为全黑。就像教室里的灯管开关,我们轻轻地推动它,如果突然间超过了某个阈值,灯就啪的一声亮了。根据阈值选取方式的不同,可以分为全局阈值和局部阈值。

1、全局阈值(Global Method)

全局阈值,指的是对整个图像中的每一个像素都选用相同的阈值。我们可以在Photoshop的图像—调整—阈值里体验这一操作:

可以看到阈值色阶从1到255的移动过程中,图像变黑的区域越来越多。当阈值数字在某个特定范围内的时候,红米肠的轮廓清晰可辨。

在生产线环境下,光照是已知的,常常会设定一个固定的数字来作为全局阈值但是在室外或者机器人比赛中,光照条件往往更加复杂。同样是奥利奥冰激凌,在白天和晚上,摄像头看到的画面可能不太一样,全局阈值无法同时适应这两种情况。我们需要能够适应复杂环境的算法

对于画面比较暗的晚上,我们需要一个比较低的阈值,比如说设定阈值为50,它在晚上能很清楚地把黑白两种颜色分开,但是到了白天就是一片白(左边);如果我们把阈值设置得比较高,比如说172,在白天能顺利分割,但在晚上就是一片黑(右边)。

其实,稍作分析我们可以发现,这张图像中的颜色差异还是比较明显的,只有深浅两种颜色。因此,无论是在白天还是黑夜,它的色阶直方图都应该是两个明显的波峰,分别代表深色和浅色的区域。只是色阶直方图在白天会整体向右偏移,而在夜晚整体向左偏移。

如果选择两个波峰之间的波谷作为阈值,就能轻松地把这两类像素分开。但是图像的直方图往往是不连续的,有非常多尖峰和抖动,要找到准确的极值点十分困难。

日本工程师大津展之为这个波谷找到了一个合适的数学表达,并于1979年发表[2]。这个二值化方法称为大津算法(Otsu’s method)。大津算法类似于一维Fisher判别分析的离散化模拟。通过穷举法找到一个阈值数字,把这些像素切成两类,使得这两类像素的亮度的类内方差最小。类内方差指的是两类像素的方差的加权和,这里权指的是这类像素点数量占整个图像像素点数量的比值。

也许你的画面不会只有两坨差异较大的颜色,比如这款雪糕的就有三个尖峰。

这时候,只需对大津算法稍加扩展也可以完成。对大津算法的多级推广成为多大津算法(multi Otsu method)[3]。

2、局部阈值(Local Method)

局部阈值(Local Method)又称自适应阈值(Adaptive Thresholding)。

比赛中常常会有聚光灯照在一个特定区域,产生局部受光、局部不受光的画面。

对于局部受光的图像进行全局阈值,可能会出现“无论设置什么阈值参数,都无法满足全图要求”的尴尬。比如上面这幅图像,直接进行全局阈值时,左上半边的寿司全都显露出来时,右下半边还是一片黑色。

这个时候我们就要用到局部阈值来处理了。其实,人的眼睛也是自带了这一步操作的。我们判定一个东西颜色深浅,往往会受到物体周边的颜色影响,这也就是为什么黑人的牙齿看上去更白。

局部阈值法假定图像在一定区域内受到的光照比较接近。它用一个滑窗扫描图像,并取滑窗中心点亮度与滑窗内其他区域(称为邻域, neighborhood area)的亮度进行比较。如果中心点亮度高于邻域亮度,则将中心点标记为白色,否则标记为黑色。

这里提到的是局部阈值的基本方法,对于实际使用中常见的其他局部阈值方法,请参阅Chow-Kaneko自适应阈值法 [4]。局部阈值的应用非常广泛,特别是对白纸黑字的处理非常有效。光学字符识别(OCR)和二维码扫描的算法中,很多都用了局部阈值操作。

比如二维码就是一张典型的局部受光图像:

如果对这张图片采用全局阈值(例如下图采用大津算法进行分割),是无论如何都无法正确分割的。

而采用局部阈值方法就能很好地分割图像。从图片里可以明显观察到,局部阈值方法对于一大片干净区域的细节比较敏感,所以纸面上多出了很多我们原本注意不到的斑点。

实际运用中,我们要根据需求选择不同的二值化方法,没有哪个方法是绝对完美的。

阈值算法实现:

本文所述阈值方法的OpenCV实现,请参见博客:Python+OpenCV图像处理实验

二值化图像是什么?图像如何二值化?相关推荐

  1. OpenCV学习笔记(三)——图像像素(图像的最大(小)值、均值、标准差、比较运算、逻辑运算、图像二值化)

    目录 1 图像像素统计 1.1 图像像素的最大值和最小值 1.2 计算图像的均值和标准差 2 两图像间的像素操作 2.1 比较运算 2.2 逻辑运算 3 图像二值化 1 图像像素统计 数字图像可以用大 ...

  2. matlab批量生成灰度图像_科学网—matlab彩色图像的批处理转换为灰度、二值和主成分图图像 - 金秀良的博文...

    这段代码主要用来进行图像的批处理转换为灰度.二值和主成分图图像,希望给大家借鉴.其中 RGB to bw可以直接实现,但是效果不好,所以先用RGB to gray,之后再gray to bw.RGB ...

  3. 基于梵·高《向日葵》的 图像阈值处理专题(二值处理、反二值处理、截断处理、自适应处理及Otsu方法)【Python-Open_CV系列(六)】

    基于梵·高<向日葵>的图像阈值处理专题(二值处理.反二值处理.截断处理.自适应处理及Otsu方法)[Python-Open_CV系列(六)] 文章目录  

  4. 滤波、漫水填充、图像金字塔、图像缩放、阈值化

      imgpro 组件是 Image 和 Process 这两个单词的缩写组合,即图像处理模块,这个模块包含了如下内容: 文章目录 1.线性滤波:方框滤波.均值滤波.高斯滤波 1.1 平滑处理 1.2 ...

  5. 图像处理理论(二)——形态学、边缘检测、图像金字塔

    http://antkillerfarm.github.io/ 膨胀与腐蚀(Dilation & Erosion) 腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分.膨胀就是图像中的高亮 ...

  6. 发票二维码扫描增强_03_图像预处理_01_图像切片

    预处理内容介绍 我们在真正的对二维码图形进行分割解码之前,需要将图形转换成我们需求的形态: 1.只关注二维码部分 2.排除掉其他颜色的干扰信息 3.图片转换成完整的正方形 二维码切分 从纸质发票的实际 ...

  7. python实现傅里叶变换求幅值和相位_Python 实现图像快速傅里叶变换和离散余弦变换...

    图像的正交变换在数字图像的处理与分析中起着很重要的作用,被广泛应用于图像增强.去噪.压缩编码等众多领域.本文手工实现了二维离散傅里叶变换和二维离散余弦变换算法,并在多个图像样本上进行测试,以探究二者的 ...

  8. 2种图像增强方法:图像点运算和图像灰度化处理

    摘要:本文主要讲解图像点运算的灰度化处理,详细介绍常用的灰度化处理方法,并分享了图像颜色空间相互转换,以及三种灰度转换算法的实现. 本文分享自华为云社区<[Python从零到壹] 四十三.图像增 ...

  9. 图像平均池化 利用pytorch对图像进行池化

    一. 池化简介 平均池化:将图片按照固定大小网格分割,网格内的像素值取网格内所有像素的平均值. 池化:使用均等大小的网格将图片分割,并求网格内代表值的过程. 池化是卷积神经网络(convolution ...

  10. 点阵图像与矢量图像的计算机记录原理,点阵图像矢量化的研究

    摘要: 随着计算机技术的发展,各种CAD软件得到广泛的应用.目前,在机械设计以及其它设计领域,大多数的系统都是由计算机辅助设计完成.但是,输入到计算机的图像文件需要保存每一个像素点,因此需要占用大量存 ...

最新文章

  1. 试求由a,b,c三个字母组成的n位符号串中不出现aa图像的符号串的数目
  2. golang中的strings.TrimRight
  3. 面向搜索的中文分词设计
  4. cron表达式 每隔1个小时_2-1!1-1!短短51个小时,西班牙人获4大喜讯,天佑武磊...
  5. 如何写计算机会议的rebuttal
  6. Maven 系列 1:Maven 安装与环境变量的配置完整步骤及需要注意的问题(以 jdk1.8、Maven 3.6.2 和 win10 为例,附下载地址)
  7. 在Mybatis的collection标签中获取以,分隔的id字符串
  8. save与persist差别
  9. oracle临时表的创建
  10. matlab数据平滑处理,matlab数据的平滑处理
  11. 数据库系统的三大范式以及BCNF范式详细讲解 (很详细,很详细,很详细)
  12. java版b2b2c社交电商spring cloud分布式微服务 (三) 服务消费者(Feign)
  13. 【机器人学习】SCARA机器人正逆运动学分析与直线轨迹规划
  14. (八)高德地图之添加marker标记点
  15. 方兴未艾的CORBA
  16. PTA Python习题 身份证号码输出性别与出生日期
  17. 鼠标hover出现遮罩
  18. 软件工程导论期末考点总结
  19. MAC终端下使用IDEA自带的Git拉取github项目,提示SSL_ERROR_SYSCALL in connection to XX
  20. 【2020年牛客暑假第八场】E题 Enigmatic Partition

热门文章

  1. 【开发工具】 JEECG_3.7新版开发工具
  2. 【消息队列MQ】各类MQ比较
  3. 支付窗开发实战-张代浩-专题视频课程
  4. eclipse加速之禁用JS、jsp等文件的语法验证
  5. oracle简单对象类型
  6. JSF 源代码赏析之FacesServlet
  7. 基于HiKariCP组件,分析连接池原理
  8. Socket编程实践(1) --TCP/IP简述
  9. Linux IPC实践(3) --具名FIFO
  10. [ruby]devdocs windows setup