问题标签 [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 回答
298 浏览

android - 带有触摸图像的分水岭算法以添加标记 OpenCV android

我正在尝试将分水岭段作为图像保存到 android 中的 sdcard。

代码在 C++ 中尝试过并且工作正常

不知道如何在android中实现这一点。

0 投票
1 回答
520 浏览

python-2.7 - 使用 scikit 图像实现分水岭分割

我有一定重叠的图像。我想使用距离变换用分水岭算法对其进行分割,但无法实现。

我正在按照步骤

  1. 二值图像上的距离变换,
  2. 然后是扩张和开放,最后
  3. 分水岭。

我是这个领域的新手,请帮忙。

0 投票
0 回答
508 浏览

python - 带有skimage的Python中的分水岭分割不会停止运行

我在使用 scikit-image 在 Python 中实现分水岭分割算法时遇到了一些麻烦。

我的示例代码如下:

但是当我运行代码时,它似乎会持续很长时间(长达 1 小时)而没有解决方案。我很确定这不仅仅是我的机器运行缓慢,因为其他脚本的运行时间与 skimage 网站上的运行时间相当。

如果有人能够提供帮助,将不胜感激!

0 投票
0 回答
565 浏览

java - How to set a Mat object into color mode? [OpenCV]

I am doing a tutorial on Image Segmentation using Watershed Algorithm and I want to know if I am getting the right result after segmenting the image into foreground and background.

The requirement is to view my finalMat object's foreground back to color mode using an imageView. I am using 'a leaf' photo as an example and I want to see the green back to please myself that I am getting the object out of its background.

Here is my code (Please feel free to comment on what am I doing wrong, or a better solution that I came up with. I am new to android development and OpenCV):

Here is my code for the marker:

Again, my question is how can I set the finalMat in color mode(return the color of the leaf)?

Here is my full code for the activity:

Here is a screenshot of my activity result (Not enough reputation points to post a screenshot).

UPDATE: It's now working, I can mark now the leaf. The only problem that I have now is that it returns the leaf in a different color. Please refer to this photo.

The final photo returns a different shade of green and yellow turns to blue. The Problem is that I don't know where the bug came from. If you guys have an idea on where is the problem please tell me so.

0 投票
1 回答
574 浏览

python - OpenCV 只返回不与其他轮廓共享边界的轮廓

我最初的任务是从放大 40 倍的全玻片扫描的裁剪区域执行细胞核分割。许多原子核是接触的,有些可能是重叠的。我开始使用具有公平结果的分水岭算法。我现在想做的是完全消除与其他轮廓共享边界的任何轮廓。本质上,我感兴趣的只是完全隔离的轮廓。我知道这违背了分水岭算法的目的,但我很好奇这将如何执行。这是我正在使用的代码。其中大部分内容是从 pyimagesearch文章中借来的。

换句话说,我只希望返回红色的轮廓圆圈:

孤立的核图像

0 投票
0 回答
356 浏览

algorithm - 具有分水岭阈值的图像分割

我已经实现了Vincent 和 Soille在 1991 年的一篇论文中提出的无标记(所以不像 OpenCV)分水岭算法 。 我还实现了一个距离变换算法,以便在分水岭之前应用它。

它在很多情况下都能很好地工作,但有时会产生一点过度分割。我还通过对距离变换图像进行高斯滤波来纠正其中的一些问题。

我计划通过对流域应用阈值来纠正这个问题。因此,考虑仅高于阈值的某个高度的分水岭

考虑到这篇论文已经很老了(1991 年),我想知道是否有人知道论文或资源可以解释类似于我打算做的事情。


笔记:

1)我没有使用 OpenCV。我正在从论文中自己实施

2)我要进行无标记的分水岭。

0 投票
2 回答
4298 浏览

python - 如何使用opencv和python在灰度图像上应用分水岭?

基于我在如何在 OpenCV 中定义分水岭的标记?,我正在尝试将分水岭应用于灰度数据(不是很明显,但不是全黑),从 netcdf(降水数据)中提取。

这是数据的黑白版本(阈值为 0),以便您可以更轻松地查看,以及我想用来定义不同盆地的标记(基本上只是降水更强烈的另一个阈值)。

我正在运行的代码如下:

opencv-2.4.11/modules/imgproc/src/segmentation.cpp中的分水岭出现以下错误:

对于我在互联网上看到的,这是因为灰度数据是 2D 图像,而分水岭需要 3D 图像(来自 RGB)。确实,我尝试了带有 jpg 图像的脚本,并且效果很好。这里提到了这个问题,但给出的答案最终被拒绝了。而且我找不到任何更新的链接来回答这个问题。

为了解决这个问题,我从 2D new_data 创建了一个 3D 数组:

但是,正如预期的那样,它并没有解决问题(同样的错误信息)。

我还尝试从 matplotlib 中保存绘图以获取 RGB 数据:

但是创建的 test_data 的大小与 ma_data 不同(+ 我无法摆脱标签)。

所以,我被困在这里。理想情况下,我想直接在 2D 灰度图像上应用分水岭和/或尽可能限制操作的数量。

0 投票
1 回答
1333 浏览

opencv - 分水岭分割总是返回黑色图像

我最近一直在研究角膜内皮细胞的分割过程,我发现了一篇相当不错的论文,描述了执行该分割过程并取得了不错的结果。我一直在尝试遵循那篇论文并使用 scikit-image 和 openCV 来实现它,但我被困在了分水岭分割上。

我将简要描述该过程应该如何:

首先,你有原始的内皮细胞图像 原始图像

然后,他们指示您执行形态灰度重建,以便稍微调整图像的灰度(但是,他们没有解释如何获取灰度的标记,所以我一直在鬼混并试图自己买一些)

这就是重建的图像应该看起来的样子: 期望的重建

这就是我重建的图像(让我们将其标记为r)的样子: 我的重建

目的是使用重建的图像来获得分水岭分割的标记,我们该怎么做?!我们得到原始图像(让我们将其标记为f ),并在 ( f - r )中执行阈值以提取单元格的 h 圆顶,即我们的标记。

这是 hdomes 图像应该看起来的样子: 所需的 hdomes

这是我的 hdomes 图像的样子: 我的 hdomes

我相信我得到的 hdome 和他们的一样好,所以,最后一步是最终对原始图像进行分水岭分割,使用我们一直在努力获得的 hdome!

作为输入图像,我们将使用反转的原始图像,作为标记,我们的标记。

这是被删除的输出:

期望的输出

但是,我只得到一个黑色图像,每个像素都是黑色的,我不知道发生了什么......我也尝试使用他们的标记和倒置图像,但是,也得到黑色图像。我一直在使用的论文是Luc M. Vincent、Barry R. Masters,“角膜内皮细胞图像的形态图像处理和网络分析”,Proc。间谍 1769

我为长文本道歉,但是我真的很想详细解释到目前为止我的理解的一切,顺便说一句,我已经尝试从 scikit-image 和 opencv 进行分水岭分割,两者都给了我黑色图像。

这是我一直在使用的以下代码

谢谢!

0 投票
1 回答
991 浏览

python - opencv python中封闭区域的大小

尊敬的所有人,

我在附加图像中使用分水岭算法,现在我想找到封闭边界图像的大小(图像中的不规则物体)。

附上图片: 在此处输入图像描述

0 投票
2 回答
4139 浏览

python - OpenCV 分水岭 + 带有 distanceTransform 的 otsu

我正在尝试使用 OpenCV 分水岭算法(https://docs.opencv.org/3.1.0/d3/db4/tutorial_py_watershed.html)但稍作改动。文档中有这行代码:

如果可能的话,我需要用 Otsu 的阈值方法替换这个阈值。我使用的大部分代码都是从 OpenCV 分水岭文档中获得的:

最后一行导致错误:

/tmp/build/80754af9/opencv_1512687413662/work/modules/imgproc/src/thresh.cpp:1402: 错误: (-215) src.type() == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3)) 在函数阈值中

我知道在分水岭文档中,这一步中没有 Otsu 的阈值,但我必须设置一个要在很多图像上执行的脚本,对我来说重要的是它不需要设置阈值明确的每张图片。

有没有办法使用 Otsu 的阈值在这个对象(cv2.distanceTransform 的结果)上运行这个方法(cv2.threshold)?


编辑

老实说,我没有在其他库中寻找类似的解决方案,但现在我在 scikit-image 库(http://scikit-image.org/docs/dev/auto_examples/segmentation/plot_watershed.html)中找到了分水岭算法。使用起来似乎不太复杂,可能会满足我的需求。但是我问的问题可能对我(或其他人)以后有用,所以如果有人有解决方案,请分享:)


编辑 2

当我通过添加此行来标准化值时:

它奏效了,但不幸的是,还有另一个问题。当我像这样运行 cv2.watershed 方法时:

我得到这个作为错误消息:

错误:(-215) src.type() == (((0) & ((1 << 3) - 1)) + (((3)-1) << 3)) && dst.type() == (((4) & ((1 << 3) - 1)) + (((1)-1) << 3)) 在函数分水岭

原因是我使用的图像是 1 通道数组,分水岭方法需要 3 通道数组(我在上面添加了加载图像)。有没有办法解决这个问题?数据类型正确(图像为 uint8,标签 - int32)。