基于Python的图像阈值化分割(迭代法)


Posted in Python onNovember 20, 2020

1.阈值化分割原理

通过对图像的灰度直方图进行数学统计,选择一个或多个阈值将像素划分为若干类。一般情况下,当图像由灰度值相差较大的目标和背景组成时,如果目标区域内部像素灰度分布均匀一致,背景区域像素在另一个灰度级上也分布均匀,这时图像的灰度直方图会呈现出双峰特性。

在这种情况下,选取位于这两个峰值中间的谷底对应的灰度值T作为灰度阈值,将图像中各个像素的灰度值与这个阈值进行比较,根据比较的结果将图像中的像素划分到两个类中。像素灰度值大于阈值T的像素点归为一类,其余像素点归为另一类。经阈值化处理后的图像g(x,y)定义为:

基于Python的图像阈值化分割(迭代法)

其中f(x,y)为原图像,T为灰度阈值,g(x,y)为分割后产生的二值图像。

2.算法流程图

基于Python的图像阈值化分割(迭代法)

3.代码实现

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
#读入图片并转化为矩阵
img = plt.imread('2.jpg')
im = np.array(img)

# 矩阵大小
l = len(im)
w = len(im[0])

#求初始阈值
zmin = np.min(im)
zmax = np.max(im)
t0 = int((zmin+zmax)/2)

#初始化相关变量初始化
t1=0
res1=0
res2=0
s1=0
s2=0

#迭代法计算最佳阈值
while abs(t0-t1)>0:
 for i in range(0,l-1):
  for j in range(0,w-1):
   if im[i,j]<t0:
    res1=res1+im[i,j]
    s1=s1+1
   elif im[i,j]>t0:
    res2=res2+im[i,j]
    s2=s2+1
 avg1=res1/s1
 avg2=res2/s2
 res1 = 0
 res2 = 0
 s1 = 0
 s2 = 0
 t1 = t0   #旧阈值储存在t1中
 t0=int((avg1+avg2)/2)  #计算新阈值

#阈值化分割
#像素点灰度值小于最佳阈值t0用0填充,其余用255填充
im = np.where(im[...,:] < t0, 0, 255)

#绘制原图窗口
plt.figure()
plt.imshow(img , cmap='gray')
plt.title('original')

#绘制原图直方图并显示最佳阈值
plt.figure()
plt.hist(img.ravel(),256)
plt.title('hist')
plt.axvline(t0)  #绘制最佳阈值分割线
plt.text(25, 6100, "Best Threshold:{}".format(t0), size = 15, alpha = 0.8)

#绘制阈值化分割后图像
plt.figure()
plt.imshow(Image.fromarray(im) , cmap='gray')
plt.title('new')

#绘制阈值化分割后图像的直方图
plt.figure()
plt.hist(im.ravel(),256)
plt.title('hist')

plt.show()

4.阈值化分割结果

原始图像

基于Python的图像阈值化分割(迭代法)

原始图像直方图

基于Python的图像阈值化分割(迭代法)

阈值化分割后图像

基于Python的图像阈值化分割(迭代法)

阈值化分割后图像直方图

基于Python的图像阈值化分割(迭代法)

到此这篇关于基于Python的图像阈值化分割(迭代法)的文章就介绍到这了,更多相关Python 图像阈值化分割内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python写xml文件的操作实例
Oct 05 Python
python中sys.argv参数用法实例分析
May 20 Python
简介Django中内置的一些中间件
Jul 24 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
May 08 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
Python设计模式之状态模式原理与用法详解
Jan 15 Python
python的sorted用法详解
Jun 25 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
解决python使用list()时总是报错的问题
May 05 Python
属性与 @property 方法让你的python更高效
Sep 21 Python
python爬虫中的url下载器用法详解
Nov 30 Python
Matplotlib中rcParams使用方法
Jan 05 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 #Python
Pyqt助手安装PyQt5帮助文档过程图解
Nov 20 #Python
python IP地址转整数
Nov 20 #Python
Python django框架 web端视频加密的实例详解
Nov 20 #Python
总结python 三种常见的内存泄漏场景
Nov 20 #Python
Python偏函数实现原理及应用
Nov 20 #Python
python与idea的集成的实现
Nov 20 #Python
You might like
php处理斐波那契数列非递归方法
2012/02/04 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
Python中的True,False条件判断实例分析
2015/01/12 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
windows下python和pip安装教程
2018/05/25 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
Python内置函数及功能简介汇总
2020/10/13 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
某科技软件测试面试题
2013/05/19 面试题
英文慰问信范文
2015/03/24 职场文书
获奖感言怎么写
2015/07/31 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP