二值化图像是什么?图像如何二值化?
图像二值化是什么?最简单的图像分割方法是二值化(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图像处理实验
二值化图像是什么?图像如何二值化?相关推荐
- OpenCV学习笔记(三)——图像像素(图像的最大(小)值、均值、标准差、比较运算、逻辑运算、图像二值化)
目录 1 图像像素统计 1.1 图像像素的最大值和最小值 1.2 计算图像的均值和标准差 2 两图像间的像素操作 2.1 比较运算 2.2 逻辑运算 3 图像二值化 1 图像像素统计 数字图像可以用大 ...
- matlab批量生成灰度图像_科学网—matlab彩色图像的批处理转换为灰度、二值和主成分图图像 - 金秀良的博文...
这段代码主要用来进行图像的批处理转换为灰度.二值和主成分图图像,希望给大家借鉴.其中 RGB to bw可以直接实现,但是效果不好,所以先用RGB to gray,之后再gray to bw.RGB ...
- 基于梵·高《向日葵》的 图像阈值处理专题(二值处理、反二值处理、截断处理、自适应处理及Otsu方法)【Python-Open_CV系列(六)】
基于梵·高<向日葵>的图像阈值处理专题(二值处理.反二值处理.截断处理.自适应处理及Otsu方法)[Python-Open_CV系列(六)] 文章目录
- 滤波、漫水填充、图像金字塔、图像缩放、阈值化
imgpro 组件是 Image 和 Process 这两个单词的缩写组合,即图像处理模块,这个模块包含了如下内容: 文章目录 1.线性滤波:方框滤波.均值滤波.高斯滤波 1.1 平滑处理 1.2 ...
- 图像处理理论(二)——形态学、边缘检测、图像金字塔
http://antkillerfarm.github.io/ 膨胀与腐蚀(Dilation & Erosion) 腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分.膨胀就是图像中的高亮 ...
- 发票二维码扫描增强_03_图像预处理_01_图像切片
预处理内容介绍 我们在真正的对二维码图形进行分割解码之前,需要将图形转换成我们需求的形态: 1.只关注二维码部分 2.排除掉其他颜色的干扰信息 3.图片转换成完整的正方形 二维码切分 从纸质发票的实际 ...
- python实现傅里叶变换求幅值和相位_Python 实现图像快速傅里叶变换和离散余弦变换...
图像的正交变换在数字图像的处理与分析中起着很重要的作用,被广泛应用于图像增强.去噪.压缩编码等众多领域.本文手工实现了二维离散傅里叶变换和二维离散余弦变换算法,并在多个图像样本上进行测试,以探究二者的 ...
- 2种图像增强方法:图像点运算和图像灰度化处理
摘要:本文主要讲解图像点运算的灰度化处理,详细介绍常用的灰度化处理方法,并分享了图像颜色空间相互转换,以及三种灰度转换算法的实现. 本文分享自华为云社区<[Python从零到壹] 四十三.图像增 ...
- 图像平均池化 利用pytorch对图像进行池化
一. 池化简介 平均池化:将图片按照固定大小网格分割,网格内的像素值取网格内所有像素的平均值. 池化:使用均等大小的网格将图片分割,并求网格内代表值的过程. 池化是卷积神经网络(convolution ...
- 点阵图像与矢量图像的计算机记录原理,点阵图像矢量化的研究
摘要: 随着计算机技术的发展,各种CAD软件得到广泛的应用.目前,在机械设计以及其它设计领域,大多数的系统都是由计算机辅助设计完成.但是,输入到计算机的图像文件需要保存每一个像素点,因此需要占用大量存 ...
最新文章
- 试求由a,b,c三个字母组成的n位符号串中不出现aa图像的符号串的数目
- golang中的strings.TrimRight
- 面向搜索的中文分词设计
- cron表达式 每隔1个小时_2-1!1-1!短短51个小时,西班牙人获4大喜讯,天佑武磊...
- 如何写计算机会议的rebuttal
- Maven 系列 1:Maven 安装与环境变量的配置完整步骤及需要注意的问题(以 jdk1.8、Maven 3.6.2 和 win10 为例,附下载地址)
- 在Mybatis的collection标签中获取以,分隔的id字符串
- save与persist差别
- oracle临时表的创建
- matlab数据平滑处理,matlab数据的平滑处理
- 数据库系统的三大范式以及BCNF范式详细讲解 (很详细,很详细,很详细)
- java版b2b2c社交电商spring cloud分布式微服务 (三) 服务消费者(Feign)
- 【机器人学习】SCARA机器人正逆运动学分析与直线轨迹规划
- (八)高德地图之添加marker标记点
- 方兴未艾的CORBA
- PTA Python习题 身份证号码输出性别与出生日期
- 鼠标hover出现遮罩
- 软件工程导论期末考点总结
- MAC终端下使用IDEA自带的Git拉取github项目,提示SSL_ERROR_SYSCALL in connection to XX
- 【2020年牛客暑假第八场】E题 Enigmatic Partition