问题标签 [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.
android - 带有触摸图像的分水岭算法以添加标记 OpenCV android
我正在尝试将分水岭段作为图像保存到 android 中的 sdcard。
代码在 C++ 中尝试过并且工作正常
不知道如何在android中实现这一点。
python - 带有skimage的Python中的分水岭分割不会停止运行
我在使用 scikit-image 在 Python 中实现分水岭分割算法时遇到了一些麻烦。
我的示例代码如下:
但是当我运行代码时,它似乎会持续很长时间(长达 1 小时)而没有解决方案。我很确定这不仅仅是我的机器运行缓慢,因为其他脚本的运行时间与 skimage 网站上的运行时间相当。
如果有人能够提供帮助,将不胜感激!
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.
algorithm - 具有分水岭阈值的图像分割
我已经实现了Vincent 和 Soille在 1991 年的一篇论文中提出的无标记(所以不像 OpenCV)分水岭算法 。 我还实现了一个距离变换算法,以便在分水岭之前应用它。
它在很多情况下都能很好地工作,但有时会产生一点过度分割。我还通过对距离变换图像进行高斯滤波来纠正其中的一些问题。
我计划通过对流域应用阈值来纠正这个问题。因此,考虑仅高于阈值的某个高度的分水岭
考虑到这篇论文已经很老了(1991 年),我想知道是否有人知道论文或资源可以解释类似于我打算做的事情。
笔记:
1)我没有使用 OpenCV。我正在从论文中自己实施
2)我要进行无标记的分水岭。
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 灰度图像上应用分水岭和/或尽可能限制操作的数量。
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 进行分水岭分割,两者都给了我黑色图像。
这是我一直在使用的以下代码
谢谢!
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)。