数字图像处理——最大类间方差法(OTSU)图像阈值分割实例

数字图像处理——最大类间方差法(OTSU)图像阈值分割实例

图像阈值分割是指通过以某个确定的图像灰度值(灰度级)将图像分为不同的部分,其目的通常是将需要的目标从图像中分割出来,图像分割在数字图像处理领域具有重要作用。
最大类间方差法,也称为Otsu方法,是应用广泛的图像分割法之一,该方法是通过计算图像灰度级的类间方差最大值或者类内方差最小值来确定分割阈值的标准。具体操作方法是通过遍历数字图像的灰度图像灰度级直方图的全部灰度级作为图像灰度级分割阈值,在每个阈值下将图像灰度按阈值划分为两类,如果在某个阈值下,两类灰度值的类间方差达到最大,或者类内方差达到最小,则该阈值即为最佳分割阈值。

Python实现最大类间方差法分割图像实例

待分割的图像文件名:inkpad2.jpg,该图像是彩色图像,每个像素包含RGB三种颜色,本实例的任务是将印台(红色)部分图像与背景(绿色)部分图像通过最大类间方差法进行阈值分割。
图片在我电脑中的保存位置:D:\ZJPythonFiles\opencv45564\inkpad2.jpg,该位置应根据实际进行修改,如果不想用这张图片,可以换成其他图片,最大类间方差法是二分类

图1 待处理的原始图像最大类间方差法分割图像的步骤:
1.将真彩色图像转换为灰度图像。

2.绘制灰度级直方图。

3.遍历灰度级,计算出各灰度级对应的目标和背景的类间方差。计算目标和背景的最大类间方差,此时对应的灰度值即为最佳阈值。用该阈值分割图像的灰度值即可实现图像的阈值分割。

以下代码是实例的完整代码,其中使用了名剑求瑕的python灰度图中的代码,用于将RGB真彩色图像转换为灰度图像,使用了mormal的OTSU算法(大津法—最大类间方差法)原理及实现中的代码用于实现将灰度图像进行最大类间方差法进行阈值分割。

#otsu
# 彩色图像转换成灰度图像
import numpy as np
from matplotlib import pyplot as plt
from PIL import Image
# 将一个RGB颜色转换成灰度值,结果保留整数
def RGBtoGray(r, g, b):########## Begin ##########gray = round(r*0.299 + g*0.587 + b*0.114)########## End ##########return gray
# 将真彩色图像转换成灰度图
# 真彩色和灰度图的文件路径分别为path1和path2
def toGrayImage(path1, path2):img1 = Image.open(path1)  # 真彩色图像,像素中是RGB颜色w, h = img1.sizeimg2 = Image.new('L', (w, h))  # 新建一个灰度图像,像素中是灰度值########## Begin ########### 此部分功能:依次取出img1中每个像素的RGB颜色,转换成灰度值,再放到img2的对应位置for x in range(w):for y in range(h):r, g, b = img1.getpixel((x, y))  # 取出颜色gray = RGBtoGray(r, g, b) # 转成灰度值img2.putpixel((x, y), gray)  # 放回像素########## End ##########img2.save(path2)
#  otsu算法
def otsu(gray):pixel_number = gray.shape[0] * gray.shape[1]mean_weigth = 1.0/pixel_number# #统计各灰度级的像素个数,灰度级分为256级# bins必须写到257,否则255这个值只能分到[254,255)区间his, bins = np.histogram(gray, np.arange(0,257))# 绘制直方图plt.figure(figsize=(12,8))plt.hist(gray,256,[0,256],label='灰度级直方图') #运行比较慢,如果电脑卡顿,可以将本行代码注释掉plt.show()final_thresh = -1final_value = -1intensity_arr = np.arange(256) #灰度分为256级,0级到255级for t in bins[1:-1]: # 遍历1到254级 (一定不能有超出范围的值)pcb = np.sum(his[:t])pcf = np.sum(his[t:])Wb = pcb * mean_weigth#像素被分类为背景的概率Wf = pcf * mean_weigth#像素被分类为目标的概率mub = np.sum(intensity_arr[:t]*his[:t]) / float(pcb)#分类为背景的像素均值muf = np.sum(intensity_arr[t:]*his[t:]) / float(pcf)#分类为目标的像素均值#print mub, mufvalue = Wb * Wf * (mub - muf) ** 2 #计算目标和背景类间方差if value > final_value:final_thresh = tfinal_value = valuefinal_img = gray.copy()print(final_thresh)final_img[gray > final_thresh] = 255final_img[gray < final_thresh] = 0return final_imgpath1 = r'D:\ZJPythonFiles\opencv45564\inkpad2.jpg'  # 真彩色图像
path2 = r'D:\ZJPythonFiles\opencv45564\inkpad2_grayA.jpg'  # 灰度图像
toGrayImage(path1, path2)
imgcolor=plt.imread(path1)
imggray=plt.imread(path2)
plt.imshow(imgcolor)
plt.show()
plt.imshow(imggray,cmap='gray')
plt.show()
plt.imshow(otsu(imggray),cmap='gray')
print(otsu(imggray))
plt.show()

参考:
1.normal的Otsu算法原理与python实现,https://blog.csdn.net/u011285477/article/details/52004513
2.名剑求瑕的python灰度图,https://blog.csdn.net/qq_42833469/article/details/121575782

数字图像处理——最大类间方差法(OTSU)图像阈值分割实例相关推荐

  1. 图像分割 - 阈值处理 - 最大类间方差法(OTSU)

    目录 1. OTSU 介绍 2. 代码实现 1. OTSU 介绍 OTSU 大津法,也是最大类间方差算法 OTSU 算法的思想通过不同的阈值K,将图像的分为两个区域,一个是灰度值 0 <= k ...

  2. 数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)

    文章目录 一.实验目的 二.实验原理 (一) 阈值分割 1. 直方图法 2.OTSU法(最大类间方差法)确定阈值 3. 迭代阈值法 4. 点检测 (二)边缘检测 三.实验内容 (一)阈值分割 1. 直 ...

  3. 基于OTSU最大类间方差法的ROI分割、提取图像中的形状特征--面积、周长、离心率、zernike矩

    分享一下最近学习的图像分类方面知识,整体的思路如下(之前的汇报ppt里截的) 把这个过程拆分几个部分共同学习一下吧 1.Otsu法原理 最大类间方差法OTSU是一种自适应的全局阈值确定的方法,根据灰度 ...

  4. CUDA精进之路(五):图像处理——OTSU二值算法(最大类间方差法、大津法)

    引言 最近在做医疗设备相关的项目,故在项目中大量用到了各类图像分割的算法,为了在图像中分割出特定目标,用到的算法可以有很多,比如阈值分割,多通道分割,边缘分割以及一些前沿的组合分割.而对大多数图像来说 ...

  5. 图像二值化之最大类间方差法(大津法,OTSU)

    参考文章1:图像二值化与otsu算法介绍 参考文章2:python opencv cv2.threshold() (将固定级别的阈值应用于每个数组元素)ThresholdTypes 最大类间方差法(大 ...

  6. 【机器视觉学习笔记】大津法/Otsu最大类间方差法 最佳阈值处理(C++)

    目录 概念 C++源码 OtsuThreshold 主函数 效果 完整源码 平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文所用源码修改自C+ ...

  7. 最大类间方差法(大津法OTSU)原理

    算法介绍 最大类间方差法是1979年由日本学者大津提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分.当取最 ...

  8. opencv与C++实现最大类间方差法(OTSU)进行图像二值化

    直接上代码,使用最大类间方差法进行二值化的函数 void threshold_otsu(Mat &mat, Mat &mat_thresh) //mat为输入图像,mat_thresh ...

  9. 图像处理_Ostu算法(大律法、最大类间方差法)

    一.算法简述 Otsu算法是一种用于二值化最佳阈值的选取方法.基本原理是根据阈值T将图像中的像素点分为C1和C2两类,不断的调整阈值T之后若此时两类之间存在最大的类间方差,那么此阈值即是最佳阈值. 二 ...

  10. Ostu最大类间方差法的C++实现

    一.Ostu的原理 最大类间方差法是由日本学者大津(Nobuyuki Ostu)在1979年提出的,该方法根据计算公式自动计算分割单域值,是一种根据灰度图像自动计算阈值的方法.它按照灰度图像的灰度值等 ...

最新文章

  1. button active 跳转到另一个页面_一步一步实现一个古诗词网站(四)——首页
  2. CentOS 搭建Postfix+Dovecot简单邮件系统
  3. react.js从入门到精通(一)
  4. 【MySQL】PREPARE 的应用
  5. 建设网站需要的Bootstrap介绍与操作
  6. SpringBoot防止重复请求,重复表单提交超级简单的注解实现
  7. java final const_Java 中的final 和C++ 中的const 有什么区别?
  8. 远程桌面连接_Win10 系统远程桌面连接怎么打开
  9. python打包exe_Python | 用Pyinstaller打包发布exe应用
  10. vue 绑定 class 和 内联样式(style)
  11. C语言多线程基础-02-临界区,互斥量
  12. 个人介绍网页代码 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计
  13. HCNE---succeed,HCSE---Learning!!!
  14. MOEA/D论文+代码
  15. Ros同一局域网下多机通信
  16. 郭敬明:定期关注大数据,指导《小时代》
  17. 协同OA助中国制造业制造实时企业
  18. openzipkin/brave初步了解
  19. centOS命令之locate
  20. 合金装备幸存官网服务器维修,合金装备幸存联机要注意什么_联机注意事项分享_3DM单机...

热门文章

  1. Java代理(proxy)
  2. w10 http基本原理 Nginx部署
  3. 华为鸿蒙智能家居套件价格,华为全屋智能家居方案价格
  4. 智能家居中控屏(二):产品设计
  5. 微信小程序:老人疯狂裂变引流视频推广微信小程序
  6. 打印机可以打印不能扫描怎么弄_惠普打印机可以打印但无法扫描的解决办法
  7. PowerDesigner将PDM导出生成WORD文档(rtf文档)
  8. 计算机软件的英文简称,计算机常见英文缩写.docx
  9. 【Adobe Premiere Pro 2020】pr2020转场与过度的使用说明【批量修改图片时长、转场特效制作等】、时间轴及工具栏的使用说明、静态帧制作动态效果、制作影片曲线变速、PR消除画面抖动
  10. 中国西北地区专题地图合集(高清)