OTSU图像分割算法使用【最大类间方差】作为标准,利用图像直方图的分布信息,计算出一个阈值,根据像素是否超过阈值将图像分为前景与背景。

(而实际上只是分割亮部与暗部而已,这种简单粗暴的单阈值分割无法真正判断“前景”和“背景”)

简单介绍一下它的公式:

s c o r e = w L ( E L − E ) 2 + w H ( E H − E ) 2 score=w_{L}(E_{L}-E)^{2}+w_{H}(E_{H}-E)^{2} score=wL​(EL​−E)2+wH​(EH​−E)2

w L w_{L} wL​为暗部像素点占整幅图像的比例
w H w_{H} wH​为亮部像素点占整幅图像的比例
E L E_{L} EL​为暗部像素均值
E H E_{H} EH​为亮部像素均值
E E E为全图的均值

亮部与暗部以分割点 T T T为界,从0到255遍历分割点,找到最大的score分数,这就叫最大类间方差

以上指的都是单通道图

OTSU方法可以简单的用图像直方图计算出结果,以下是python实现:

import matplotlib.pyplot as plt
import matplotlib.image as img
import numpy as npdef rgb2gray(rgb):#将rgb转灰度return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])
#    return 0.2989 * image[:,:,0] + 0.5870*image[:,:,1] + 0.1140*image[:,:,2]image = img.imread('F:/hh/2.jpg')
gray = rgb2gray(image)
h,x = np.histogram(gray.ravel(),bins=256)plt.imshow(gray,cmap=plt.get_cmap('gray'))#显示灰度图
plt.show()#整体均值
meanall = np.sum(np.dot(h,np.array([n for n in range(256)])))
meanall = meanall/np.sum(np.array([n for n in range(256)]))
maxscore = 0;
gi = []
for i in range(1,255):#分割图像的均值只需要将直方图的高度乘以x坐标求和,再除以x坐标之和mean1 = np.sum(np.dot(h[0:i],np.array([n for n in range(i)])))mean1 = mean1/np.sum(h[0:i])mean2 = np.sum(np.dot(h[i:256],np.array([n for n in range(i,256)])))mean2 = mean2/np.sum(h[i:256])#公式计算score = sum(h[0:i])*((meanall - mean1)**2)+sum(h[i:256])*((meanall - mean2)**2)#    用于绘图gi.append(score)if maxscore < score :#记录最大值maxscore = score threshold = iprint("max value = %d, th = %d" %( maxg,threshold))  #用于绘图
gi.append(min(gi))
gi.insert(0,min(gi))
plot1 = plt.figure()
#绘制直方图
plt.bar(np.array([n for n in range(256)]),h)
#绘制分割点
plt.axvline(threshold,color='r')
# 绘制类间方差遍历过程示意图
plt.scatter([n for n in range(256)],(gi-min(gi))/(max(gi)-min(gi))*max(h))
plt.show()

原图:

分割效果:

经评论提醒发现meanall 的分母写错了,结果居然没有区别,尝试对公式求导后发现,确实全图均值对极值无影响

OTSU图像分割算法(python实现)相关推荐

  1. 基于粒子群优化二维Otsu的肺CT图像分割算法

    1.内容简介 略 488-可以交流.咨询.答疑 2.内容说明 随着大气污染的加剧和环境的破坏,肺癌患者急剧增加,肺癌成为危害人 类健康最大的恶性肿瘤,因此肺癌治疗迫在眉睫.当前,肺肿瘤检查的主要方 式 ...

  2. 粒子群算法优化的OTSU图像分割

    文章目录 1 基本概念 2 算法实现 3 算法优化举例 4 算法构成要素分析 5算法优缺点分析 6 算法图像分割中应用 1 基本概念 粒子群优化算法(PSO):它是进化算法的一种,它源于鸟群捕食的行为 ...

  3. 图像分割:Python的SLIC超像素分割

    图像分割:Python的SLIC超像素分割 1. 什么是超像素? 2. 为什么超像素在计算机视觉方面有重要的作用? 3. 简单线性迭代聚类(SLIC) 4. 效果图 5. 源码 参考 1. 什么是超像 ...

  4. 想学图像分割,强烈建议从这5篇图像分割算法综述

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自 | 极市平台 引言 在过去的一年中,计算机视觉领域出现了 ...

  5. 数字图像处理中常用图像分割算法有哪些?

    数字图像处理中常用图像分割算法有哪些? 1.多数的图像分割算法 2.图像边缘分割 3.图像阈值分割 4.基于区域的分割 5.形态学分水岭算法 多数的图像分割算法 均是基于灰度值的不连续和相似的性质.在 ...

  6. 【AI有识境】如何掌握好图像分割算法?值得你看的技术综述

    大家好,这是专栏<AI有识境>的第二篇文章,讲述如何掌握好图像分割算法. 进入到有识境界,可以大胆地说自己是一个非常合格的深度学习算法工程师了,能够敏锐地把握自己研究的领域,跟踪前沿和能落 ...

  7. 【CV】基于阈值处理的图像分割算法!

    图像处理 Author:louwill Machine Learning Lab 基于阈值的图像分割因其处理直观.实现简单和计算速度快,是一种更为常用的传统图像分割算法.本文基于图像灰度阈值处理的基本 ...

  8. 100个深度图像分割算法,纽约大学UCLA等最新综述论文

    转载自 https://new.qq.com/omn/20200122/20200122A0BEL300.html 100个深度图像分割算法,纽约大学UCLA等最新综述论文 [新智元导读]来自纽约大学 ...

  9. 基于阈值处理的图像分割算法!

    图像处理 Author:louwill Machine Learning Lab 基于阈值的图像分割因其处理直观.实现简单和计算速度快,是一种更为常用的传统图像分割算法.本文基于图像灰度阈值处理的基本 ...

最新文章

  1. 在Windows下使用make命令
  2. 一地鸡毛 OR 绝地反击,2019年区块链发展指南
  3. 有幸见到一朵花的绽放
  4. Direct2D处理几何图形之间的碰撞检测(下)
  5. python是什么 自学-你们都是怎么自学python的?
  6. linux该专接本还是工作_先专接本还是先工作?
  7. Axure原型图小字体在浏览器显示变大
  8. 【转】一生必看的成功学书(转载)
  9. PHP 蚂蚁芝麻信用分接口
  10. 基于jsp的网上作业批改系统
  11. 冷战久了一定会分手的星座
  12. js 微信公众号开发chooseWXPay:fail, the permission value is offline verifying
  13. 贝叶斯公式推导及意义
  14. 以太坊经典的现状- Anthony Lusardi
  15. 一份完整的app产品运营推广方案,app推广运营的方法(一)
  16. 硬盘分区失败数据怎么恢复
  17. verilog实现边沿检测
  18. 互联网怎么赚钱?放弃固有思维才有希望!
  19. 爱国者MP3的录音文件导入MATLAB时一点问题
  20. Japan jounery plan

热门文章

  1. 深度学习、遥感领域常用精度评价指标盘点
  2. 中国的电子商务三强鼎立
  3. LS伺服驱动器维修APD-VS50NL变频器维修
  4. 如何使用Vuex来管理应用程序的状态?
  5. html边框如何制作三角形,1分钟解读使用css-border制作小三角
  6. Linux系统下压缩与解压命令
  7. 分享我的电子藏书:职业素养系列
  8. java sleep唤醒_Java中的等待唤醒机制—至少50%的工程师还没掌握!
  9. php 壁纸源码_牛叉PHP在线壁纸图片开源系统部署和源码
  10. 【演示文稿制作动画】Focusky教程 | 图表美化技巧