阈值分割基本概念

二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0(黑色)或者255(白色),也就是让整个图像呈现只有黑和白的效果,在灰度化的图像中灰度值的范围为0~255,在二值化后的图像中的灰度值范围是0或者255。图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。一般采用阈值分割法。
**阈值分割法分为全局阈值法和局部阈值分割法。**所谓局部阈值分割法是将原始图像划分成较小的图像,并对每个子图像选取相应的阈值。在阈值分割后,相邻子图像之间的边界处可能产生灰度级的不连续性,因此需用平滑技术进行排除。局部阈值法常用的方法有灰度差直方图法、微分直方图法。局部阈值分割法虽然能改善分割效果,但存在几个缺点:
  (1)每幅子图像的尺寸不能太小,否则统计出的结果无意义。
  (2)每幅图像的分割是任意的,如果有一幅子图像正好落在目标区域或背景区域,而根据统计结果对其进行分割,也许会产生更差的结果。
  (3)局部阈值法对每一幅子图像都要进行统计,速度慢,难以适应实时性的要求。

全局阈值分割方法在图像处理中应用比较多,它在整幅图像内采用固定的阈值分割图像。经典的阈值选取以灰度直方图为处理对象。根据阈值选择方法的不同,可以分为模态方法、迭代式阈值选择等方法。这些方法都是以图像的直方图为研究对象来确定分割的阈值的。另外还有类间方差阈值分割法、二维最大熵分割法、模糊阈值分割法、共生矩阵分割法、区域生长法等等。

最大类间方差法(大津法)、自适应阈值分割的原理

最大类间方差法(大津法)

最大类间方差法(大津法),简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分。当取最佳阈值时,两部分之间的差别应该是最大的,在OTSU算法中所采用的衡量差别的标准就是较为常见的最大类间方差。前景和背景之间的类间方差如果越大,就说明构成图像的两个部分之间的差别越大,当部分目标被错分为背景或部分背景被错分为目标,都会导致两部分差别变小,当所取阈值的分割使类间方差最大时就意味着错分概率最小。

应用: 是求图像全局阈值的最佳方法,应用不言而喻,适用于大部分需要求图像全局阈值的场合。

优点: 计算简单快速,不受图像亮度和对比度的影响。

缺点: 对图像噪声敏感;只能针对单一目标分割;当目标和背景大小比例悬殊、类间方差函数可能呈现双峰或者多峰,这个时候效果不好。

自适应阈值

前面介绍了OTSU算法,但这算法属于全局阈值法,所以对于某些光照不均的图像,这种全局阈值分割的方法会显得苍白无力,如下图:

显然,这样的阈值处理结果不是我们想要的,那么就需要一种方法来应对这样的情况。

这种办法就是自适应阈值法(adaptiveThreshold),它的思想不是计算全局图像的阈值,而是根据图像不同区域亮度分布,计算其局部阈值,所以对于图像不同区域,能够自适应计算不同的阈值,因此被称为自适应阈值法。(其实就是局部阈值法)

如何确定局部阈值呢?可以计算某个邻域(局部)的均值、中值、高斯加权平均(高斯滤波)来确定阈值。值得说明的是:如果用局部的均值作为局部的阈值,就是常说的移动平均法。

OpenCV框架下上述阈值分割算法API的代码

def img_threshold(img):'''task04 图像滤波:param img::return:'''# 灰度处理GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 自适应阈值adaptive_img = cv2.adaptiveThreshold(GrayImage,  # 原图像255,  #  当像素值高于(有时是小于)阈值时应该被赋予的新的像素值cv2.ADAPTIVE_THRESH_GAUSSIAN_C,  # CV_ADAPTIVE_THRESH_MEAN_C 或 CV_ADAPTIVE_THRESH_GAUSSIAN_Ccv2.THRESH_BINARY,  # 取阈值类型   CV_THRESH_BINARY或CV_THRESH_BINARY_INV11,  # 用来计算阈值的象素邻域大小: 3, 5, 7, ...2  # 指与方法有关的参数)ret, threshold_img = cv2.threshold(GrayImage,  # 原图像0, # 阈值0,OTSU会自动寻找阈值255,  # 高于阈值时赋予的新值cv2.THRESH_OTSU  # 大津算法)print("shape1 : ",adaptive_img.shape)print("shape2 : ",threshold_img.shape)cv2.imshow('box_filter', adaptive_img)cv2.imshow('blur_filter', threshold_img)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == "__main__":img = cv2.imread('./xiabang.jpg', cv2.IMREAD_UNCHANGED)print('Original Dimensions : ',img.shape)img_threshold(img)

计算机视觉基础-图像处理之图像分割/二值化相关推荐

  1. 计算机视觉基础-图像处理(图像分割/二值化)cpp+python

    5.1 简介 该部分的学习内容是对经典的阈值分割算法进行回顾,图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单.计算量小.性能较稳定而成为图像分割中最基本和应用最广泛的分割技术.它特别适用 ...

  2. 计算机视觉基础-图像处理 Task05 图像分割/二值化

    文章目录 OSTU二值化 自适应阈值 函数实现 OSTU二值化 自适应阈值 图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单.计算量小.性能较稳定而成为图像分割中最基本和应用最广泛的分割技 ...

  3. 图像处理中的二值化和灰度化

    图像的灰度化: 灰度是指只含亮度信息,不含色彩信息的图像.黑白照片就是灰度图,特点是亮度由暗到明,变化是连续的.要表示灰度图,就需要把亮度值进行量化 使用灰度图的好处: ① RGB的值都一样. ② 图 ...

  4. OpenCV(基础补充)图像二值化

    目录 一.基础理论 1.二值图像概念 2.API介绍 二.图像二值化(黑白化)步骤: 1.彩图化灰度图 2.灰度图化黑白图(二值化) 3.翻转黑白部分 总代码 参考资料 一.基础理论 1.二值图像概念 ...

  5. MATLAB算法实战应用案例精讲-【图像处理】数字图像二值化(附Java、python、matlab、C++和R语言代码实现)

    目录 前言 知识储备 图像平滑 像素点 图像的灰度化 灰度处理的方法

  6. 基于ImagePy工具的岩块图像二值化分割研究

    看到自己一年前在知乎提的问题了,忍不住回答下. 下面这个是论文录用后修改稿,文末有编辑的评语. 基于ImagePy工具的岩块图像二值化分割研究 摘 要:在岩块图像分析识别前的预处理工作中,为了平滑岩块 ...

  7. java生成点阵图_android使用JNI图片转黑白图片实现点阵图(二值化)

    [实例简介] 为android提供的二值化jni库,和完整demo,比Java代码的效率高10s! 一个基于jni的图像处理工具 包括二值化 灰度化 膨胀 腐蚀 等等 是android上图像处理的好例 ...

  8. 图像处理理论(一)——直方图、二值化、滤波基础

    http://antkillerfarm.github.io/ 对比度和亮度 g(i,j)=a×f(i,j)+b g(i,j)=a\times f(i,j)+b 上式中f(i,j)f(i,j)和g(i ...

  9. 【计算机视觉】-图像二值化 - 图像分割 -图像卷积

    图像卷积:利用2D卷积核去扫图像,主要是为了实现Blur,高斯滤波本质也是通过卷积来实现的,只不过他的卷积核内参数是符合高斯分布的. 图像二值化:图像二值化之后为黑白图像,相当于mask掩模,用于挖出 ...

最新文章

  1. win10计算机拒绝访问,教你win10系统c盘拒绝访问怎么办
  2. 【收藏】怎样把 macOS 安装在移动硬盘或 U 盘里
  3. Spring Boot集成测试中@ContextConfiguration和@SpringApplicationConfiguration之间的区别
  4. Linux系统编程---6(信号的机制,信号4要素,Linu常规信号表,定时器)
  5. python局部变量含义_Python的变量
  6. 即将绝版!小米最经典旗舰降价甩,以后不会再有了
  7. FunTester框架Redis性能测试之list操作
  8. full stack front end
  9. 关于JAVA自带MD5的方法
  10. web测试之总流程归纳
  11. python k线斜率计算公式_通达信K线斜率指标公式
  12. Kubernets:容器日志收集方案
  13. java里的哈希值。
  14. 【python爬虫专项(27)】拉勾网数据采集(关键词网址不发生变化)
  15. SpringBoot整合Swagger2,并设置springsecurity放行和token
  16. SpringBoot-Google二步验证
  17. 典型用户和用户场景描述
  18. 如何预防钓鱼邮件?S/MIME邮件证书来支招
  19. P106双N卡 自动调用方案
  20. 学校计算机社团面试自我介绍ppt,大学生大一社团面试自我介绍PPT

热门文章

  1. 【阿旭机器学习实战】【16】KMeans算法介绍及实战:利用KMeans进行足球队分类
  2. pc端android端 倒数日,这款倒数日 App,让你的 Android 桌面好看又好用
  3. 中国AI军团称霸全球口语翻译大赛!搜狗夺冠,讯飞阿里二三
  4. 用python 画个小猪佩奇
  5. MongoDB 导入Json和Bson
  6. js图片下载(支持跨域/解决Access-Control-Allow-Origin)
  7. 通过matlab的遗传算法工具求解规划问题
  8. Exception in thread main java.lang.UnsupportedClassVersionError: org/apache/tools/ant/launch/Launc
  9. 使用Prometheus监控RocketMQ
  10. c语言读取cmos的原理,三步读懂CMOS图像传感器的工作原理