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

news/2024/11/28 9:23:55/

摘要:多种子的区域生长算法,基于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

原图

结果


http://www.ppmy.cn/news/459553.html

相关文章

2022-2027年中国农作物种子行业市场深度分析及投资战略规划报告

【报告格式】电子版、纸介版 【出品单位】华经产业研究院 本报告由华经产业研究院出品,对中国农作物种子行业的发展现状、竞争格局及市场供需形势进行了具体分析,并从行业的政策环境、经济环境、社会环境及技术环境等方面分析行业面临的机遇及挑战。还…

种子计数法对种子公司的好处

种子计数法对种子公司的好处 原创2022-05-23 10:41HenningSaint 各种包装好的种子 1、提高企业价值:收入和盈利能力-种子节约反映在“底线”上。 2、有吸引力的回报-机器的最佳使用产生有吸引力的回报 3、更高的市场份额-新的销售种子的方法转化为更高的市场份额 4、品牌提…

JAVA版村庄哨塔种子_我的世界:top16种子,出生5村庄、地狱堡垒、2哨塔和一堆遗迹...

大家好,我是小胖子卡特曼,screw you guys, i m going home!如果你喜欢玩Minecraft和各种主机游戏,那么请关注我,我会努力每天给大家带来最新的游戏资讯和游戏体验分享。 亲爱的玩家老爷们大家好,不知不觉TOP20大种子推…

linux 系统时间date vcs根据时间产生随机种子

前言 2023.3.20 首先介绍时间,再介绍如何根据时间产生随机种子 一、date date:用来显示或设定系统的日期与时间 使用方法:date [OPTION]... [FORMAT] 1、OPTION:可选的参数 -d:显示时间 -s:设置时间 -r…

Java版种子推荐_2个跨度极大特性种子,各大Java版都适用

《我的世界》每一个地图的生成都有其相对应的一个值,而这个值在MC玩家口中被称为“种子”(别想歪了)。当版本没有加入新的生物群系,也就是世界生成算法没有更新时,创建世界输入种子就可以生成和别人相同的世界,因此也就有了种子推…

弱监督之深度种子区域增长

paper:https://openaccess.thecvf.com/content_cvpr_2018/papers/Huang_Weakly-Supervised_Semantic_Segmentation_CVPR_2018_paper.pdf code:https://github.com/terenceylchow124/DSRG_PyTorch 文章目录 摘要SEC原则DSRG方法介绍生成种子区域网络结构损失函数DSRG方法扩增种子…

我的世界java版海底神殿种子_我的世界海底神殿种子

我的世界地图中有五种类型的种子可以使用,建议在找海底神殿时使用夜视药水。那么2021年在MC中最新的海底神殿种子分别是Seed:-1005362104,Seed:-1436927780,Seed:-1005362104,Seed:1…

我的世界奇葩种子java_我的世界:10个最新版奇葩种子,老玩家:天选之子才能拥有这待遇...

原标题:我的世界:10个最新版奇葩种子,老玩家:天选之子才能拥有这待遇 胖虎曾经介绍过MC编程大师1256编写了一个java软件,当你输入种子ID,程序会自动输出种子对应的生物群系数据。于是,借助这个应…