问题标签 [watershed]

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 回答
776 浏览

matlab - 过度流域图像

我无法在显微镜图像中分离细胞。当我应用分水岭变换时,我最终将细胞切割成许多块,而不仅仅是在边界/最小值处分离它们。

我正在使用来自http://physics.georgetown.edu/matlab/code.html的 bpass 过滤器。

任何想法将不胜感激!你可以看到我的细胞在最终的面具中分裂得太多了。

这是我试图分水岭的那种形象。这是一个 16 位的图像,所以看起来全是黑色的。

启动荧光图像

最终图像蒙版:

过滤和屏蔽单元格后

我在这里手动分离了单元格:

手动分割图像

0 投票
3 回答
2508 浏览

python - 具有分水岭的连接对象的图像分割

我正在尝试分离连接的对象。似乎 Python 和分水岭算法(scipy 实现)非常适合处理这个问题。

这是我的图像和自动生成的分水岭种子点(阈值化和距离变换图像的局部最大值):

在此处输入图像描述

到目前为止,一切都很好; 每个对象都有一个种子。

但是,当我运行分水岭时,事情就崩溃了:

在此处输入图像描述

中上层簇和中心簇都分离得很差。在顶部集群中,一个物体淹没在另外两个周围。在中心集群中,虽然它可能太小而无法在这里看到,但中心种子只能泛滥到几个像素。

我有两个问题:

  1. 分水岭算法是这样分离对象的好选择吗?
  2. 如果是这样,我是否需要进行某种预处理以使图像更适合分水岭分割?
0 投票
1 回答
2209 浏览

java - 使用opencv的分水岭java实现

我正在尝试在 java 中使用标记实现分水岭算法,在这里找到了一个示例,代码是 c++,我尝试将它转换为 java 代码但失败了。有没有人以前做过?请帮忙!我坚持使用这个函数 ( ),因为在java doccv2.connectedComponents()中找不到它。

0 投票
1 回答
879 浏览

c++ - OpenCV 分水岭:4 点连接

我正在为 OpenCV 中的分水岭编写代码。

但我希望分水岭边界是 4 点连接而不是 8 点。

目前这是界面:

有人对此有任何解决方案吗?

此外,是否有任何简单的方法可以在 opencv 中执行形态分水岭以进行自动过度分割,当前的方法需要用户输入?

0 投票
1 回答
324 浏览

matlab - mathworks.com 上的二维分水岭示例

Mathworks.com 上的二维分水岭示例可总结如下:

我不太明白为什么D(~bw) = -Inf;这里有必要强制不属于对象的像素处于-Inf(最初为零)。

我尝试在没有该语句的情况下运行程序,结果令人困惑。为什么有必要将这些像素强制为 -Inf 以使分水岭获得正确的结果?

正如弗雷德里克所指出的,我曾经surf在这里绘制表面,在运行之前D(~bw) = -Inf;,结果是:

伊姆古尔

运行之后,结果是: 伊姆古尔

0 投票
2 回答
4672 浏览

matlab - 分水岭算法的过分割

我按照Mathworks.com 中的2-D Watershed 示例来分离连接的对象,如下图所示:

伊姆古尔

代码总结为:

结果是:

伊姆古尔

中心的粒子已被分成两部分。有什么方法可以避免这里的过度分割?

谢谢,lennon310,chessboard对我的大多数图像都适用,但仍然有一些情况不适用。例如,下面的二进制图像: 伊姆古尔

使用棋盘将导致: 伊姆古尔

由于我有数百张图像,似乎很难找到一种适用于所有图像的参数组合。我想知道我是否需要结合使用棋盘、城市街区等获得的良好结果......

0 投票
2 回答
7229 浏览

c++ - OpenCV Canny + 分水岭

我正在使用精明的边缘检测和寻找轮廓功能(都是 OpenCV)来为分水岭变换创建标记。一切正常,但我对结果不是 100% 满意。原因是缺少一些边缘,因此丢失了重要信息。更详细地说,我得到了一堆窗口(前视图),它们是矩形,在分水岭变换之后,我最终得到了这样的结果:

在此处输入图像描述 在此处输入图像描述 但我宁愿有漂亮的矩形,它们是完整的,不是向一侧开放的。在保持不规则形状的同时(房子前面的灌木丛,汽车..)有什么想法可以解决这个问题吗?我想过用网格覆盖整个图像,但我不能让它工作。

非常感谢。

这是我的代码:

根据要求,这是原始图像、我想要获取的图像和我的输出: 在此处输入图像描述

我想要这样的分割(虽然过度分割并没有什么坏处,我只需要确保,我得到了所有的细节):

在此处输入图像描述

虽然我得到这样 在此处输入图像描述 的东西:(请忽略颜色,它们对于这个问题并不重要,只是我整个程序的结果)。这只是一个例子,如果你愿意,我可以向你展示更多,也请看一下 etrims 数据集,我所有的图片都来自那里。

0 投票
1 回答
2093 浏览

c# - 使用 emgu.cv 在分水岭后分离图像

我有一个血液图像,我在上面应用了分水岭..它的工作原理并确定了细胞,但我不知道如何将每个细胞放在单独的图像中..我正在使用 emgu.cv 我可以得到一些帮助

在这里,我使用分水岭方法分割图片,然后将标记放在原始图像上

0 投票
2 回答
3199 浏览

c++ - 如何使用 OpenCV Watershed 获得对象之间的轮廓?

我将 OpenCV 分水岭与我的图像一起使用:

但这给了我唯一的面具。我还尝试将标记创建为两个点 - 结果只有一个蒙版。使用 OpenCV 是否可以像http://biodynamics.ucsd.edu/ir/中那样使用轮廓分离单元格(对象) ?如果没有,是否可以使用以下值创建结果掩码:1 表示第一个对象,2 - 表示第二个对象,.. 99 表示 99?

0 投票
1 回答
4418 浏览

python - 使用 OpenCV 对距离图像进行分水岭变换

在 Matlab 中,我们可以对距离变换进行分水岭变换来分离两个接触的物体:

在此处输入图像描述 在此处输入图像描述

上面的第一张图片是我们希望分离的带有触摸对象的图片。第二个图像是它的距离变换。

因此,如果调用黑白图像img,在 Matlab 中我们可以这样做:

现在用 openCV 做同样的事情:OpenCV 有一个基于标记的分水岭分割功能。似乎要执行使用 openCV 分离两个触摸对象的相同任务,需要为对象和背景提供标记。

在下图中,您可以看到markers执行分水岭后的图像。原来的黑白 img以红色叠加在上面。问题是结果markers图像中的对象边界与原始图像不同。如何确保对象边界保持不变?

在此处输入图像描述