Python - 检测区域元素

4
我有一个由1和0组成的数组(如下图所示),我正在编写一个Python脚本来检测中心区域(即大白色斑点)的边界,并将所有内部点标记为1。你会怎么做?
我编写了一段代码来进行重复的连通性搜索,但这似乎不是正确的方法 - 区域的形状会发生变化并且新区域被添加。 enter image description here

1
你需要准确的区域轮廓吗?那么如何填补其中的“空洞”呢?可以搜索“分割”算法。像这样的问题通常没有标准答案,你需要决定愿意做出哪些权衡。 - aganders3
连通组件标记可能是您正在寻找的。 - M4rtini
谢谢,我会遵循你的建议,并随时更新我的进展。 - albus_c
连通组件标记,以获取分离的区域。计算ID以获取最大的一个,然后如果您想填充孔洞,则进行泛洪填充。我认为这应该可以解决问题。Opencv是一个很好的库。 - M4rtini
1
这只是一个带噪声的经典图像分割问题。许多库提供连接组件解决方案或Mumford-Shah函数最小化技术的库版本。您还可以简单地通过数据进行多次本地中值滤波,看看是否可以有效提高简单连接组件方法的效果。 - ely
1个回答

1

由于我无法发表评论,所以我在这里发表。

我遇到了与您类似的问题:我想选择几个孔,然后计算面积、圆度等。

我使用了Python的Java实现(jython),通过它我可以使用一个名为imageJ的库,该库专门用于图像处理(所有内容都包含在Fiji中)。浏览库有点繁琐,但很强大。

这是魔杖工具:http://rsbweb.nih.gov/ij/developer/api/ij/gui/Wand.html。在这里查看“如何获取ROI的像素”:http://fiji.sc/Introduction_into_Developing_Plugins#ImageJ.27s_API


PIL难道没有相同的功能吗?我相信它是Python本地的。 - Monkeyanator
也许吧,但我从未使用过它!Albus,你应该知道我的解决方案并不是“简单”的,但它可以处理大图片(当然也可能用到PIL!) - user2841651

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接