python区域生长算法_多种子的区域生长算法

python区域⽣长算法_多种⼦的区域⽣长算法
晋平公浮西河
摘要:多种⼦的区域⽣长算法,基于C++编写。
关键字:图像处理, 种⼦⽣长, 区域⽣长
1. 题外话
最近需要⼀种简单对图像进⾏分割的算法,作为后续算法的前处理阶段。最开始想到的是聚类,但是聚类会有分割后不保证连通性的问题。
区域⽣长法可以保证分割后各⾃区域的连通性。但⽹上⼤多数的代码都是单个种⼦的,⽤的多是matlab或旧版本的opencv。索性,我照着单种⼦的思路,写了⼀个多种⼦的区域⽣长算法分享出来。
2. 单种⼦的区域⽣长
事实上,我就是参照这篇⽂章的思路写的代码。这篇⽂章的代码思路清晰,可惜⽤的旧版本的opencv,⽽且是单种⼦。
3. 多种⼦的区域⽣长
爨体病理生理学习题
建设工程消防监督管理规定⼤体思路是这样的:
1、遍历全图,寻是否还有undetermined的点,如有,作为种⼦
2、进⾏单种⼦的区域⽣长算法,⽣长出的区域记⼊矩阵mask
凉子木
3、如果mask记录的区域⾯积⾜够⼤,把mask中的区域记录到矩阵dest中,状态为determined;如果mask记录的区域⾯积太⼩,把mask中的区域记录到矩阵dest中,状态为ignored(忽略分割出来⾯积过⼩的区域)
再回兴义忆耀邦
4、重复上述步骤,直到全图不存在undetermined的点
4. TODO
我对现在的算法还不是很满意,其⼀,我没有做太多优化,代码运⾏卡卡的;其⼆,我⽤的灰度图,以及“差值/阈值”的⽅式来判断是否相似,阈值不是⾃适应的。
注:新版本添加了⾃动寻阈值的demo,详见本⽂最后⼀节
对于图⽚尺⼨越⼤越卡这个问题,可以在读图⽚的时候统⼀resize成256×256,⼤多数追求速度的图像处理算法都会有这步。
对于彩⾊图,⽤3个通道的距离来判断相似度会更好。
以上两个问题,我为了保持算法的原汁原味,就没有添加。(其实是我懒得写了~)
注:关于彩⾊图那点,最新版本已经添加了相关代码。思路是RGB三个通道的差值取平⽅和。Delta = R^2 + G^2 + B^2 。
5. 代码
6. 效果原图
结果
7. 关于阈值⾃适应
新版本的代码中,已经添加了阈值⾃适应的demo。想法来⾃于⼆值化领域的OTSU(⼤津法),不懂⼤津法的可以搜索下,虽然属于不同领域,但算法思想可以借鉴。我在demo中的具体做法如下:
1、threshold的取值在⼀定范围内,遍历所有可取的threshold
2、对于⼀个取到的threshold,区域⽣长算法可以得到分割后的N个区域。计算同⼀区域内的像素值的
⽅差var(same_region)以及不同区域间像素平均值的差值delta(mean(different_region))
3、⽤loss表征分割的好坏,公式中a和b是⼿动设置的参数,loss越⼩说明分割得越好:$$loss=a \div delta(mean(different-region)) + b \times Var(same-region)$$
4、遍历所有可取的threshold,求出各⾃的loss,取loss最⼩值对应的threshold
原图
结果

本文发布于:2024-09-22 07:35:07,感谢您对本站的认可!

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

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

标签:算法   区域   分割   添加   阈值   思路   全图
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议