大津算法原理

在 opencv 中对图像进行二值化的过程中我们可能会使用大津算法,大津算法的主要作用是分割前景与背景部分区域,先将图像灰度化,假设图像有 [0,255] 个灰度等级,在数学中有方差这个概念,如果两个事物之间的方差越大,则他们的关联性则越小,在图像中计算前景与背景间的类间方差,方差越大,越能认为两部分关联性越小,即前景与背景区域,所以大津算法即寻找使背景与前景方差最大的阈值

有如下假设:

W0:背景像素点占整幅图像的比例
U0: 背景像素点的平均灰度
W1:前景像素点占整幅图像的比例
U1: 前景像素点的平均灰度
U: 整幅图像的平均灰度
g: 类间方差

有如下关系:

U = W0U0 + W1U1 --------------------------------- (1)
g = W1 ( U - U1)2 + W0 ( U - U0 )2-------------- (2)

将(2) 代入 (1) 有:

g=W0 W1 ( U0 - U1 )2

实现过程

循环遍历阈值 [0,255] 获取最大类间方差

import numpy as np
import cv2
import matplotlib.pyplot  as pltdef otsuCompute(grayImg):# 类间方差g = 0# 遍历矩阵for i in range(0,256):# 背景像素点占整幅图像的比例W0 = 0.0w0 = 0# 背景图像平均灰度U0 = 0u0 = 0.0# 前景图像占整幅图像的比例W1 = 0.0w1 = 0# 前景图像的平均灰度U1 = 0u1 = 0.0for element in grayImg.flat:# 大于i为前景if element>i:w1+=1u1+=elementelse:w0+=1u0+=elementtry:W0 = w0/(w0+w1)W1 = 1 - W0U0 = u0/w0U1 = u1/w1if W1*W0*((U0 - U1)**2) > g:g=W1*W0*((U0 - U1)**2)thres=iexcept:passreturn  thresimg=cv2.imread('img/water_coins.jpg',cv2.IMREAD_UNCHANGED)
grayImg=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# cv2.medianBlur(grayImg,5,grayImg)
# 大津算法二值化分割前景和背景
ret,thresOtsu=cv2.threshold(grayImg,0,255,cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)
ret1,thresMyOtsu=cv2.threshold(grayImg,otsuCompute(grayImg),255,cv2.THRESH_BINARY_INV)print('Otsu threshold is {0}'.format(ret))
print('my Otsu threshold is {0}'.format(ret1))
cv2.imshow('src',img)
cv2.imshow('Otsu',thresOtsu)
cv2.imshow('my Otsu',thresMyOtsu)
cv2.waitKey()
cv2.destroyAllWindows()

结果如下:


可以看到与原生大津算法效果是相同的

opencv 大津算法讲解与实现相关推荐

  1. CV8 OpenCV环境下实现大津算法

    一 大津算法简介 大津算法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后 ...

  2. 图像二值化----otsu(最大类间方差法、大津算法)(二)

    转自:http://blog.stevenwang.name/ostu-threshold-56002.html OTSU算法也称最大类间差法,有时也称之为大津算法,被认为是图像分割中阈值选取的最佳算 ...

  3. OTSU算法(也称最大类间差法,有时也称之为大津算法)

    在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...

  4. OTSU(大津算法)

    OTSU(大津算法) 确定图像二值化分割阈值 不受图像亮度和对比度的影响 用于图像分割过程中,自动计算出一个最佳全局阈值的算法 通过最大类间平方差的方法来区分图像前景及背景 缺点 对图像噪声敏感 只能 ...

  5. OpenCV大津法二值化

    OpenCV大津法二值化 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化 ...

  6. Learn OpenCV ---- 大津法(Otsu‘s)阈值

    阅读原文 大津法(Otsu's)阈值 什么是图像阈值 图像阈值与图像分割 大津(Otsu)算法 什么是图像阈值 图像阈值化是一种基于像素强度大图像二值化方法.这种方法的输入通常是一个灰度图和一个阈值, ...

  7. otsu阈值分割算法_图像分割之大津算法(OTSU)

    关注公众号,获取更多信息 引言 最近一直在看图像二值化相关的东西,一直想寻找一个好的方法,能够自适应的设定阈值.这个过程中,发现了OTSU算法,其实这也算是基本的图像处理算法,之前有过接触,但是放过了 ...

  8. opencv-qt大津算法(Otsu)

    opencv-qt大津算法(Otsu) 1 简介 2 算法原理 3 代码 4 局限性 5 参考 1 简介 Otsu算法,即大津算法,最大类间方差算法,由日本人大津展之提出.大津二值化法用来自动对基于聚 ...

  9. C#,图像二值化(06)——全局阈值的大津算法(OTSU Thresholding)及其源代码

    1.大津算法OTSU ALGORITHM OTSU算法效果很一般. 最大类间方差法是1979年由日本学者大津(Nobuyuki Otsu)提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU, ...

最新文章

  1. MySQL数据库半同步复制
  2. accelerated C++ 第0章
  3. bminfowindow是什么_三步实现地图自定义InfoWindow
  4. Linux编程 9 (shell类型,shell父子关系,子shell用法)
  5. LiveVideoStackCon 2022 上海站 专题抢先看
  6. 如何正确修补系统漏洞?
  7. 7、mysql中的表结构操作
  8. 英特尔表示:元宇宙的路还很长
  9. MessageBox模态对话框[转]
  10. php 写一个大富翁游戏,抽奖系列:如何用纯js做一个大富翁游戏
  11. 根据自己平时的经验写的针对SQLSERVER操作的通用类库
  12. 调试安装php源码,Xdebug的安装与配置,帮助调试PHP程序
  13. java生成缩略图,接收图片,按指定宽高或按比例生成缩略图
  14. 次世代3D游戏建模视频教程百度云分享
  15. centos freeradius mysql_CentOS 5.7安装FreeRADIUS 1.1.3+MySQL 5.0.77结合RouteOS
  16. ANC降噪蓝牙耳机软件工程的数学原理
  17. Android基础整合项目之节日群发助手(三)
  18. java基础—输入/输出
  19. SQL server SSMS图形界面实现(创建表、约束、关系图)
  20. 运维工程师发展受限,那么运维转型大数据是个机会吗?

热门文章

  1. 大厂标配HttpRunner接口自动化测试框架
  2. 求flash入门教程
  3. STM32Cube_FW_F1_V1.0.0固件库学习(一)环境准备
  4. 小程序input调用虚拟键盘阻止系统键盘与虚拟键盘点击穿透问题
  5. 天线的最佳长度及计算方法
  6. Linux:访问权限与粘滞位之详解
  7. pdf转换器注册码免费下载
  8. openwrt信号弱掉线_如何使用openwrt路由系统剔除弱信号设备?
  9. ‘dependencies.dependency.systemPath‘ for cn.ac:xxxx:jar should not point at files
  10. 关于安川机器人平衡气缸故障现象