二值化与图像分割

二值化是图像分割最常用的实现方式。

对于如下这个简单图像(背景与前景较为单调)

    

如何计算图中小狗的位置与大小呢,如果我们将这幅转换为右侧的二值图,就简单很多了。只需图中值为“0”的最大连通区域,即为小狗所在的区域,由连通区域的像素个数辅以相机的焦距、拍摄距离等参数就能估计出小狗的实际尺寸。

一 统计直方图

横轴表示图像的明暗强度,纵轴表示对应强度的像素个数。当沿着横轴再对统计直方图进行累计时,就获得了累加统计直方图。

这两者广泛地用于图像二值化。

当物体与背景在图中的比例相等时,统计直方图会出现两个尖峰,此时二值化最为简单,通过计算两者之间的波谷的灰度值,作为二值化的阈值。

二 滤波

通常情况下,由于传感器噪声、背景与照明的影响我们无法直接获得“干净的”二值图。在二值化之前的滤波处理,能够使得图像亮度的过度平滑,方便利用统计直方图进行二值化。如下图,左下图先进行了高斯平滑,然后再二值化,获得了右下的二值图,较之先去获得了更干净的效果。

   

三 分裂与合并

更多应用场景都会较为复杂,譬如:一副图中有多个场景与物体;物体重叠;背景和物体明暗无规则等。

这时二值图会出现很多零碎的过度区域,这时需要进一步判断其所属的区域。

这时图像分割需要利用诸如:空间相关性、统计学方法、几何检测等方法辅助二值化进行图像分割。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 22:21:05

二值化与图像分割的相关文章

二值化

https://zh.wikipedia.org/wiki/二值化 二值化是图像分割的一种方法.在二值化图象的时候把大于某个临界灰度值的像素灰度设为灰度极大值,把小于这个值的像素灰度设为灰度极小值,从而实现二值化. 根据阈值选取的不同,二值化的算法分为固定阈值和自适应阈值. 比较常用的二值化方法则有:双峰法.P参数法.迭代法和OTSU法等.

图像二值化处理Java

二值化基本概念:通俗的讲就是把一副彩色图像处理成一副黑白图像,一般是作为后续复杂图像处理操作的预处理. 二值化算法思路:遍历图像的所有像素点,计算每个像素点的灰度值.通过迭代法收敛得到一个最佳阈值,灰度值大于最佳阈值的像素点设为白色,灰度值小于最佳阈值的像素点设为黑色.(我这里的二值化处理结果是,背景是白色,前景是黑色) 迭代法获取最佳阈值思路: 1.设最小灰度值为Gmin,最大灰度值为Gmax,阈值初始化为T(0)=(Gmin+Gmax)/2. 2.以阈值T(k)将图像分割为前景和背景,求出整

十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)

十三种基于直方图的图像全局二值化算法原理.实现.代码及效果(转) http://www.cnblogs.com/carekee/articles/3643394.html 图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析.特征提取与模式识别之前的必要的图像预处理过程.这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果. 在这些庞大的分

基于直方图的图像二值化算法实现

引言 图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析.特征提取与模式识别之前的必要的图像预处理过程.在过去年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果. 在分类方法中,基于直方图的全局二值算法都从不同的科学层次提出了各自的实施方案,并且这类方法都有着一些共同的特点:简单.算法容易实现和执行速度快. 算法代码 第一种方法Huang L.-K et al.参考代

图像基本变换---图像二值化(包含OSTU/迭代法/统计法/双峰法/P分位法/最大熵法)

OSTU法图像二值化 [算法说明] Ostu法又叫做最大类间方差法,是一种常用的图像分割算法.基本算法思想是根据初始阈值把图像分为两类,然后计算两类之间的方差,更新阈值,重新计算类间方差,当满足类间方差最大时的阈值,即为所求最佳阈值,具体过程如下: 1,初始化一阈值Th,将图像f(x,y)分为A,B两类: 2,分别计算A,B两类像素集合的均值ua和ub,公式如下: 其中,Na和Nb分别表示集合A,B中的像素个数. 3,计算A,B两类的类间方差,公式如下: 4,将Th从0到255循环,分别计算A,

验证码识别之二值化

前言 二值化顾名思义就是将数变成两种值,一般非0即1.而在验证码处理中,如果直接使用灰度图,那么每个像素的值会在0-255,这样肯定会增加计算时间,而二值化后每个像素的值只是0和1. 在前面的简单验证码识别中,我的二值化代码是这样写的:a = (a > 180) * 255,至于这里为什么不乘1而乘255,因为我要显示图片看看效果.如果只是用于算法识别的话,乘1会更好.但是,这里的180也就是二值化的阈值是如何得到的,开始是通过一个一个试然后看效果哪个好就选哪个,因为我们一般只识别某个网站的验证

[转载+原创]Emgu CV on C# (四) —— Emgu CV on 二值化

重点介绍了二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数)  1.概述 图像二值化是图像处理中的一项基本技术,也是很多图像处理技术的预处理过程. 图像的预处理在进行图像二值化操作前要对图像进行预处理,包括彩色图像灰化和增强.由于选取阈值需要参照直方图,因此在图像进行处理后,我们再获取图像的直方图以帮助选取阈值.整个流程如下所示: 读取图像→灰度图像→图像增强→图像直方图→二值化处理 2.数学原理(转载,基本可以不

基于opencv的视频流 模板匹配 (灰度化 二值化 )

#include <cv.h> #include <highgui.h> #include <windows.h> // 获取直方图 // 1. pImageData 图像数据 // 2. nWidth 图像宽度 // 3. nHeight 图像高度 // 4. nWidthStep 图像行大小 // 5. pHistogram 直方图 BOOL GetHistogram(unsigned char *pImageData, int nWidth, int nHeigh

【OPENCV】图像的预处理(灰度图、二值化、字符矫正(旋转))

1.首先加载原始图片: 2.cvCvtColor(img, source, CV_BGR2GRAY);转化成灰度图像: 3.cvThreshold(source,source_gray,100,255,CV_THRESH_BINARY );进行二值化处理. 由于原始的图片会有一定的角度,需要进行旋转,而旋转的话可以使用OPENCV提供的函数实现,本文中采用的是自己编写的,即通过旋转360,并记录旋转某个角度的时候使得在x轴方向的投影最大化. 如图,经过处理的图片效果如下所示: 完整的工程已经上传