ostu阈值分割python实现_PIL大津法阈值分割Python代码

[Python]代码

#coding=utf8

"""

大津法阈值分割:A Threshold Selection Method from Gray-Level Histograms

需要PIL库

"""

import Image

import sys

def sigma(im,i,debug =False):

"""

阈值为i时,图像im中两组的方差

"""

c0_p_num = sum(im.histogram()[:i+1])#灰度<=k的像素个数

c1_p_num = sum(im.histogram()[i+1:])#灰度>k的像素个数

#计算两部分的总灰度

c0_g_sum = 0

for j in range(1,i+1):

c0_g_sum += j*im.histogram()[j]

#end for j

c1_g_sum = 0

for j in range(i+1,255):

c1_g_sum += j*im.histogram()[j]

#end for j

#计算两部分的各自平均灰度

try:

u0 = 1.0*c0_g_sum/c0_p_num

u1 = 1.0*c1_g_sum/c1_p_num

#计算两部分的像素比例

w0 = 1.0*c0_p_num/(c0_p_num+c1_p_num)

except:

#可能有的图像没有太高或太低灰度的像素

return 0

w1 = 1.0 - w0

u = (u0-u1)**2

new_sigma = w0 * w1 *u

if debug:

print "%d:\tw0=%f,w1=%f,new_sigma=%f" %(i,w0,w1,new_sigma)

return new_sigma

def OtsuThreshold(im,debug = False):

"""

线性查找最大方差,可以考虑用别的搜索算法

"""

g_level = 0

g_sigma = 0

for i in range(1,255):

new_sigma = sigma(im,i,debug)

if g_sigma

g_sigma = new_sigma

g_level = i

#end for i

return g_level, g_sigma

if __name__=="__main__":

if len(sys.argv)>1:

src_file = sys.argv[1]

else:

print "USAGE:%s src_file [des_file]" %sys.argv[0]

sys.exit(1)

des_file = "OTSU_" + src_file

if len(sys.argv)>2:

des_file = sys.argv[2]

im = Image.open(src_file).convert("L")

#大津法找阈值

debug = True

threshold,max = OtsuThreshold(im,debug)

print threshold,max

#根据阈值,分割之

im = im.point(lambda p: p > threshold and 255)

im.save(des_file)

print "DONE: %s--->%s" %(src_file,des_file)

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点!

本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php执行一条insert插入两条数据其中一条乱码

显然这就是编码问题&#xff0c;但是问题从哪来的呢&#xff0c; 我把文件编码以及代码的编码都设置成utf-8了&#xff0c;为什么还有这个问题于是我就开始写测试脚本 第一条 mysql_query(insert into table value(1,1,"思考思考123")) 测试没有问题 第二条 $name$_G…

TCP三次握手、四次挥手、socket,tcp,http三者之间的区别和原理

接着上一篇文章叙述&#xff1a; TCP/IP连接(在互联网的通信中&#xff0c;永远是客户端主动连接到服务端)&#xff1a; 手机能够使用联网功能是因为手机底层实现了TCP/IP协议&#xff0c;可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口&#xff0c;使…

小程序接入h5页面_小程序-实现怎么跳转打开 H5 网页链接(或跳转至公众号文章)...

背景有时候,因为业务需求,在小程序当中,需要跳转到 h5 网页,或跳转到公众号,形成流量的闭环,那在小程序当中怎么实现呢?实例效果前提条件该小程序与需要跳转至的公众号(订阅号/服务号)进行了绑定关联使用小程序开放能力web-view实现跳转(承载网页的容器。会自动铺满整个小程序…

NSUserDefaults的用法

NSUserDefaults适合存储轻量级的本地数据&#xff0c;比如要保存一个登陆界面的数据&#xff0c;用户名、密码之类的&#xff0c;个人觉得使用NSUserDefaults是首选。下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息咯。 因为如果使用自己建立的plist文件什…

http、https、密码学基础、GET和POST区别

http协议相关&#xff1a; http协议的特性: http协议是建立在TCP/IP协议之上应用层协议&#xff0c;默认端口为80或者8080。http协议的的特点是无状态&#xff0c;无连接&#xff08;并不是真的没有连接&#xff0c;而是在请求数据的时候有连接&#xff0c;在数据回来的时候就…

apache 配置文件内使用 8080 端口_【SpringBoot 框架】- SpringBoot 配置文件

一、SpringBoot配置文件类型SpringBoot是基于约定的&#xff0c;所以很多配置都有默认值&#xff0c;但如果想使用自己的配置替换默认配置的话 &#xff0c;就可以自己编写配置文件进行相应配置&#xff0c;起步依赖spring-boot-starter-parent 中&#xff0c;有配置文件的引入…

Linux中while循环的用法笔记

Shell中可以采用while循环来实现需要进行循环的操作。 语法结构如下&#xff1a; while exp do command done 执行过程&#xff1a;while将测试exp的返回值&#xff0c;如果返回值为true则执行循环体的命令&#xff0c;返回值为false则不执行循环。循环完成后会进入下一次循环之…

IOS9.0 导航栏状态栏

状态栏高度20px 竖屏是导航栏高度44px 横屏时导航栏高度32px 获取当前屏幕状态&#xff1a;UIApplication.sharedApplication().statusBarOrientation转载于:https://www.cnblogs.com/iOSboyYang/p/5328886.html

libcurl库的安装和使用

libcurl简介: libcurl是一个跨平台的网络协议库&#xff0c;支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权&#xff0c;HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传&#xff0c;代理&#xff0c;cookies,和用户认证。li…

android 微信缩小通话界面_安卓如何做出微信那样的界面仿微信“我”的界面2/5...

本系列目标通过安卓编程仿写微信“我”的界面,让大家也能做出类似微信界面.效果图如下:本文目标做出支付部分(其他部分在后续文章中逐步分享).效果图如下:实现方案通过截图工具或者下载一张微信支付照片,放到工程的src/main/res/drawable目录下,命名为pay.png;同样获取一张向右…

Shell脚本中函数的定义和调用笔记

Shell脚本函数的作用主要是把一些可以通用的功能封装起来、避免脚本中出现大量重复的脚本代码&#xff0c;同时可以大大增强脚本的可读性、和可维护性。Shell函数定义的语法格式&#xff1a;function FUNCTION_NAME(){command1command2command3}也可以省略function 关键字FUNCT…

opensll、libcurl库安装的使用,树莓派CSI摄像头的配置,树莓派调用智能API平台实现人脸识别、树莓派配置中文环境

接着上一节人工智能翔云平台介绍&#xff1a; 人工智能OCR识别&#xff1a; OCR 是英文Optical Character Recognition的缩写&#xff0c;意思是光学字符识别&#xff0c;也可简单地称为文字识别&#xff0c;是文字自动输入的一种方法。它通过 扫描 和摄像等光学输入方式获取纸…

apache 设置禁止访问某些文件或目录

【apache配置禁止访问】1. 禁止访问某些文件/目录增加Files选项来控制&#xff0c;比如要不允许访问 .inc 扩展名的文件&#xff0c;保护php类库&#xff1a;<Files ~ "\.inc$">Order allow,denyDeny from all</Files>禁止访问某些指定的目录&#xff1a…

Shell脚本中函数返回值的用法笔记

函数的返回值又可以称为函数的退出状态&#xff0c;实际上可以理解为一种通信方式。Shell脚本中函数可以使用返回值的方式把调用的结果信息反馈给调用者。便于调用者可以根据反馈的结果做相应处理。说明&#xff1a;函数的返回值主要使用 return 关键字来处理。这和很多编程语言…

python 怎么取对数_概率矩阵分解(PMF)及MovieLens上的Python代码

首先对Probabilistic Matrix Factorization这篇论文的核心公式进行讲解和推导&#xff1b;然后用Python代码在Movielens数据集上进行测试实验。一、 背景知识文中作者提到&#xff0c;传统的协同过滤算法有两个不足&#xff1a;1).不能很好地处理规模非常大的数据&#xff1b;2…