最近在做双阈值的对比实验需要用到Otsu,发现网上没有python的实现,所以写下来记录一下。

Otsu双阈值算法的思想与单阈值的思想类似,单阈值的思想为:

g = w0(u0-u)^2+w1(u1-u)^2

使得g最大。

Otsu双阈值的思想则为:

g = w0(u0-u)^2+w1(u1-u)^2+w2(u2-u)^2

使得g最大。

u0为背景区域的平均值,u1为中间区域的平均值,u2为前景区域的平均值。

w0为背景区域的概率,w1为中间区域的概率,w2为前景区域的概率。

所以用python做简单的实现:

def Otsu2Threshold(src):Threshold1 = 0Threshold2 = 0weight, height = np.shape(src)hest = np.zeros([256], dtype=np.int32)for row in range(weight):for col in range(height):pv = src[row, col]hest[pv] += 1tempg = -1N_blackground = 0N_object = 0N_all = weight * heightfor i in range(256):N_object += hest[i]for k in range(i, 256, 1):N_blackground += hest[k]for j in range(i, 256, 1):gSum_object = 0gSum_middle = 0gSum_blackground = 0N_middle = N_all - N_object - N_blackgroundw0 = N_object / N_allw2 = N_blackground / N_allw1 = 1 - w0 - w2for k in range(i):gSum_object += k*hest[k]u0 = gSum_object/N_objectfor k in range(i+1, j, 1):gSum_middle += k*hest[k]u1 = gSum_middle / (N_middle+theta)for k in range(j+1, 256, 1):gSum_blackground += k*hest[k]u2 = gSum_blackground / (N_blackground + theta)u = w0 * u0 + w1 * u1 + w2 * u2print(u)g = w0 * (u - u0) * (u - u0) + w1 * (u - u1) * (u - u1) + w2 * (u - u2) * (u - u2)if tempg < g:tempg = gThreshold1 = iThreshold2 = jN_blackground -= hest[j]h, w = np.shape(src)img = np.zeros([h, w], np.uint8)for row in range(h):for col in range(w):if src[row, col] > Threshold2:img[row, col] = 255elif src[row, col] <= Threshold1:img[row, col] = 0else:img[row, col] = 126BlackgroundNum = 0AllNum = weight*heightfor i in range(weight):for j in range(height):if img[i, j] == 0:BlackgroundNum += 1BlackgroundRatio = BlackgroundNum/AllNumif BlackgroundRatio < 0.4: # 背景占比过少时,做一个反向操作w, h = np.shape(src)for i in range(w):for j in range(h):img[i, j] = 255 - img[i, j]return img

在主函数中调用算法:

imgpath = "./111.jpg"
src = cv2.imread(imgpath, flags=0)
cv2.imshow('src', src)
dst = Otsu2Threshold(src)
cv2.imshow("dst", dst)
cv2.waitKey(0)

实现效果:

原图:

双阈值化后的结果:

python实现Otsu双阈值算法相关推荐

  1. 在python中调用双模拟退火算法dual_annealing

    原理 模拟退火算法(CSA)中最重要的概念就是Metrospolis准则,表示的是接收新解的概率,一般表示为 p=e−f(x2)−f(x3)Tp=e^{-\frac{f(x_2)-f(x_3)}{T} ...

  2. 基于OTSU算法和基本粒子群优化算法的双阈值图像分割

    OTSU自适应阈值求法与粒子群算法的合作,将OTSU算法作为粒子群算法的适应值函数,来计算每个粒子的适应度与最优阈值相比较,经过3000次迭代最后取得优化后的阈值 原图: 经过联合算法优化的双阈值为9 ...

  3. 图像的OTSU阈值化、双阈值化、半阈值化的原理及OpenCV代码实现

    本文的基础是OpenCV的函数threshold(),关于函数threshold()的详细介绍,大家可以参考下面这篇博文: https://www.hhai.cc/thread-162-1-1.htm ...

  4. Otsu大津算法公式推导及python实现

    目录 前言 一.类间平方差是什么? 二.公式推导及实现 1.求类间平方差 2.opencv-python编程实现 2.1 引入图像并灰度化 2.2 查看灰度值的分布情况 2.3 求全局平均阈值 2.4 ...

  5. OpenCV —— 阈值分割(直方图技术法,熵算法,Otsu,自适应阈值算法)

    阈值分割 1. 全局阈值分割 直方图技术法 熵算法 Otsu算法 2. 局部阈值分割 自适应阈值 阈值的分割的核心就是如何选取阈值,选取正确的阈值时分割成功的关键.可以使用手动设置阈值,也可以采用直方 ...

  6. otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用

    from:http://blog.csdn.net/onezeros/article/details/6136770 otsu算法选择使类间方差最大的灰度值为阈值,具有很好的效果 算法具体描述见ots ...

  7. 利用OTSU阈值算法在ZYNQ上实现浒苔识别

    文章目录 前言 一.软件安装 二.算法实现 1.图片数据读入 2.数据处理 1.Matlab仿真 2.利用Matlab Coder将Matlab代码转为C代码 3.利用Vitis HLS将C代码转为V ...

  8. 自适应小波阈值去噪python_基于python的小波阈值去噪算法

    小波图像去噪原理 图像和噪声在经小波变换后具有不同的统计特性:图像本身的能量对应着幅值较大的小波系数,主要集中在低频(LL)部分:噪声能量则对应着幅值较小的小波系数,并分散在小波变换后的所有系数中.基 ...

  9. 双阈值检测阈值选择_通过阈值进行计算机视觉高级车道检测

    双阈值检测阈值选择 In my earlier post, I talked about finding lane lines using Edge Detection and Hough Trans ...

最新文章

  1. 统计之都统计分析和R语言方面的图书
  2. html加载出来图片乱掉,HTML基础 img alt 图片加载失败时,出现替代文本
  3. python基础之删除文件及删除目录的方法
  4. mysql数据库的链接地址_常用数据库连接URL地址大全
  5. 软件定义存储的系统架构图和关键技术
  6. Sequential Recommender Systems
  7. 学习React中遇到的问题
  8. WAVE族函数的使用
  9. oracle net Manager 配置连接 tiptop 鼎捷ERP 数据库
  10. 八国离线谷歌卫星影像地图内网发布
  11. 宁银消费金融来了 母行授信80亿,全国急招人
  12. 菜鸟教程学习——HTML5 video,audio,input(各种新元素),output,datalist
  13. 组合数学——计数原理和计数公式
  14. java 获取ftp 文件路径_java在浏览器上获取FTP读文件路径
  15. yum mysql的安装目录在哪_yum安装的mysql 目录结构
  16. 计算机键盘space键在哪,space是哪个键,详细教您space是哪个键
  17. Nest.js 怎样使用 hbs 的 partials?
  18. 如何更改IP地址使用代理ip软件
  19. 易能变频器说明书故障代码_易能变频器故障代码大全E013故障
  20. Live800|哪家在线客服系统性价比高?

热门文章

  1. iOS-NSURLSession详解
  2. python读取zip文件
  3. Goodfellow深度学习笔记--神经网络架构
  4. 电脑计算机无法启动有还原和取消,win7系统提示配置windwos update失败还原更改导致电脑无法开机的三种解决方法...
  5. 发斯蒂芬撒的撒的撒的发
  6. 计算机类大学生就业指导新闻稿,大学生就业创业新闻稿
  7. 通过Mac连接到Edsion并作相关配置
  8. 超详细pycharm安装教程
  9. JQuery操作div隐藏和显示的4种动画
  10. 【转载】不刷机,I9300通过修改资源文件加入通话录音功能