问题标签 [connected-components]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
386 浏览

matlab - 从matlab中的图像中删除同心圆

我有我试图操纵的 OCT 成像数据:

在此处输入图像描述

我想删除由图像中心的同心圆包围的所有点。到目前为止,我手动指定了最大圆的半径并将圆区域内的所有点设置为黑色。这些圆圈的大小可能会因图像源和伪影而异,因此我正在尝试找到一种更理想的方法来执行此删除操作。

我最初以为我可以使用 imfindcircles() 来识别这些圆,但是无论指定的半径如何,该算法都无法检测到其中的大部分。依赖连接组件(bwareaopen、regionprops)的方法也会失败,因为同心圆似乎连接到更大的结构。

我的一个想法是我可以转换为极坐标,因为同心圆的中心将始终位于图像的中心,从而产生此图像:

在此处输入图像描述

这应该更容易处理。有没有人有任何想法?

0 投票
1 回答
270 浏览

c++ - 忽略另一个内部的连接组件

我正在尝试使用 OpenCV 将背景(绿色区域和浅绿色毛巾)与对象分开,因此我手动分割了以下图像: 在此处输入图像描述

通过将对象边框以红色和蓝色着色,连接的组件不应被考虑,如您在图像的右下角看到的: 在此处输入图像描述

在对 254 通道 R 和 B 进行阈值处理后,我得到以下信息:

  1. 红色通道

通道红色

  1. 蓝色频道 蓝色频道

如果我使用完成红色通道的所有轮廓

右下角将是:

在此处输入图像描述

但我需要的是忽略只包含蓝点的轮廓,以便获得类似:

在此处输入图像描述

所以我必须将红色和蓝色通道结合起来才能得到它,但还不知道怎么做。任何意见,将不胜感激。

谢谢。

0 投票
1 回答
193 浏览

matlab - 连通分量的相交面积

我正在使用 MATLAB 进行分割任务。为了分析我的算法的性能,我需要两个图像中每个连接组件的交集区域。

在图像中以什么方式标记连接的组件?另外,是否PixelIdxList列出了作为连通分量一部分的点的所有线性索引?

0 投票
1 回答
7452 浏览

python-2.7 - 使用 OpenCV 查找连接的组件

我正在尝试使用 python OpenCV 查找并分离边缘检测图像中的所有边缘。边缘可以是轮廓的形式,但不是必须的。我只想将所有连接的边缘像素组合在一起。所以从技术上讲,该算法在程序上可能听起来像这样:

  1. 对于每个边缘像素,找到一个相邻的(连接的)边缘像素并将其添加到图像的当前细分中,直到找不到一个为止。
  2. 然后移动到下一个未检查的边缘像素并开始新的细分并再次执行 1)。

我已经看过了,cv.findContours但结果并不令人满意,可能是因为它是用于轮廓(封闭边缘)而不是自由端的。结果如下:

检测到原始边缘:

轮廓处理后:

我预计这五个边缘将各自分组到其自己的图像细分中,但显然 cv2.findContours 函数将边缘中的 2 个甚至进一步细分为我不想要的细分。

这是我用来保存这两张图片的代码:

但是,我的实施有一些限制。我必须使用 Python 2.7 和 OpenCV2。除了这些,我不能使用任何其他版本或语言。我这样说是因为我知道 OpenCV 2 有一个使用 C++ 的 connectedComponent 函数。我本可以使用它,但问题是,由于某些限制,我无法使用它。

那么,知道我应该如何解决这个问题吗?

0 投票
2 回答
1374 浏览

gremlin - Tinkerpop 3:使用 Gremlin 遍历计算连接组件

我认为标签很好地解释了我的问题:)

我一直在尝试编写一个 Gremlin 遍历来计算帖子末尾描述的简单图的连通分量。

我试过了

获得

这很糟糕,因为cyclicPath过滤器从e到达之前终止了遍历g。显然,如果我删除该until子句,我会得到一个无限循环。此外,如果我simplePath在一步后使用遍历结束。有没有办法告诉它以深度优先顺序探索节点?

干杯!

0 投票
1 回答
1477 浏览

c++ - 如何将行进方块用于多个轮廓?

找到第一个轮廓后如何使行进广场继续进行?

我正在处理的图像中的轮廓会经常发生变化,因为我处于嵌入式环境(android/ios)中,所以我首先想要一个快速性能的解决方案。并且使用外部库不是一种选择。

我尝试了连接组件标签,但从未让它工作,因为我有一个不是黑白(没有阈值)的 PNG,如果我没记错的话,CCL 只适用于黑白(二进制)图像。

我考虑过将 blob 信息保存到另一个向量并检查新发现的像素是否属于较早发现的 blob,但我认为这不够快,因为向量中充满了越来越多的 blob,因此检查的成本越来越高向量中的每个 blob。

这让我几乎完成了当前的方法,即擦除我找到并重复的轮廓,直到什么都没有?但这是我目前使用的方法,似乎也很昂贵。

如果没有快速的解决方案,那么任何人都可以提出不同的方法......即使这意味着不同的算法。

Mark1:我选择了行军广场,因为即使主题有洞,我也只需要轮廓的轮廓。

0 投票
1 回答
459 浏览

c++ - 连接的组件访问矩阵值

我正在尝试根据其位置对视频中的连接组件进行分类。我正在使用 opencv 3 中的 connectedComponentsWithStats 函数。我试图从 1x5 矩阵的 stats 矩阵中访问值。当我使用以下代码时,我成功访问了连接组件的区域。

当我尝试使用访问矩阵的第一个值时

我得到的所有值都是零。

只是为了确认当我输出完整的统计矩阵时,矩阵的 0,0 位置中的值并不总是零,因此它们应该以与面积矩阵相同的方式变化。统计矩阵中的值也总是整数。

如果您能看到我做错了什么,我将不胜感激!

0 投票
0 回答
106 浏览

matlab - 如何使用 MATLAB 编写简单的连通分量标记?


如何为简单图像(如上)标记和着色 3 个形状。

  • 使用具有 8 个邻域的连通分量分析
  • 形状是白色的,外面是黑色的
  • 每个形状都会得到蓝色、绿色等颜色。
  • 应该是一个简单的代码(使用 MATLAB),它根据连通分量分析逐像素处理图像

感谢您的任何帮助。

0 投票
2 回答
856 浏览

matrix - 邻接矩阵邻居

我有一个 0 和 1 的矩阵。我可以从任何单元格开始。我想知道覆盖所有可能的 1 所需的最小步数(上、下、左、右)是多少。我可以从 0 或 1 开始。

例子:

在 1 步内从 (2,2) 开始,我可以达到所有 1。我将此与未加权无向图的邻接矩阵联系起来。本质上,当我可以从任何点开始时,我需要找到最远的邻居。如果我只能从顶点开始,我可以简单地使用 BFS/DFS 并保留一个计数器,但这会带来问题。

0 投票
0 回答
255 浏览

python - 快速获取给定连接组件的所有点

Scikit-Image 有很多方法可用于斑点检测:

高斯拉普拉斯算子 (LoG)

高斯差 (DoG)

Hessian 行列式 (DoH)

这三个都返回一个数组,其中包含找到的组件范围内的单个点:

我想使用该信息来生成包含给定组件中所有点的坐标的列表。

我可以自己从种子开始遍历整个图像,然后收集字典中的所有点,关键是blob检测提供的点,但我想除非我使用cython(非常愿意错了,因为我对python还很陌生)。更真实地说,我只是认为可能有比自己做更好的方法。