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

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]
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 特别注意:本站所有转载⽂章⾔论不代表本站观点!
本站所提供的图⽚等素材,版权归原作者所有,如需使⽤,请与原作者联系。

本文发布于:2024-09-21 16:20:55,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/367515.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:本站   阈值   原作者   部分   版权   像素   分割   计算
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议