问题标签 [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 投票
0 回答
62 浏览

matlab - 使用Matlab应用分水岭分割后区分区域是否与背景连接或断开的最佳方法是什么

在应用名为 L 的分水岭分割后,我有一个标记的图像,如下所示。我如何编写一个函数来确定一个区域是否与背景连接或断开(显示为蓝色)? 样本图片

例如:对于区域:2 3 5 6,该函数应返回 1(已连接),而对于区域:1 4 7,应返回 0(未连接)。

请注意,白色细区域是标记为 0 的边缘线,因此实际上没有区域与分水岭分割后的其他区域物理连接。这是最难处理的部分。任何想法将不胜感激。谢谢!

0 投票
3 回答
102 浏览

matlab - 放大 whatershed 输出以匹配原始图像大小

介绍

背景:我正在使用watershedMATLAB 中的算法分割图像。对于内存和时间限制,我更喜欢对二次采样图像执行此分割,假设调整大小为0.45.

问题:出于可视化目的和其他后期处理步骤,我无法正确地将分割的输出重新缩放到原始图像比例。


最小的工作示例

例如,我有这个图像:

在此处输入图像描述

我运行这个最小的脚本,我得到一个L包含在标签图像中的分水岭分割输出,其中每个连接的组件都用一个自然数寻址,并且连接的组件之间的边界为零值:

现在我有L它具有相同的尺寸im_res如何使用存储的结果L 来实际分割原始 im_orig 图像


错误的解决方案

我尝试的第一种方法是L使用imresize.

不幸的是,上采样L会产生一系列不需要的伪像。它尤其丢失了一些表示图像片段之间边界的基本零点。这就是我的意思:

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

我知道这是由于升级过程造成的模糊,但现在我想不出任何其他可以成功的方法。

我想到的唯一其他方法涉及使用数学形态学来“放大”调整后图像的边界,然后进行上采样,但这仍然会导致一些不需要的伪影。


TL;DR(或回顾)

有没有办法watershed在 MATLAB 中对缩小的图像执行,然后将结果放大到原始图像,保持算法输出的清晰区域边界?我在寻找一个完全荒谬的问题吗?

0 投票
1 回答
1157 浏览

qgis - QGIS - 将病房区域映射到泰森多边形

我正在设计一个供水分配网络。我有各种由线条表示的管道。Line 的每个起点和终点都是一个 Junction(节点)。我使用 QGIS 为每个路口创建了泰森多边形(Voronoi)(泰森多边形代表其相应路口的流动区域。)我还有各种病房边界(也表示为不规则多边形),每个病房都有不同的人口。

我的要求:我想计算每个泰森多边形和每个病房之间的相交面积并得到一个表格,以便我可以计算每个泰森多边形内的确切人口。

泰森多边形示例(多边形内的点表示相应的连接点):- 在此处输入图像描述

病房示例(也表示为封闭多边形):-

在此处输入图像描述

所需的最终输出:-

在此处输入图像描述

0 投票
1 回答
3127 浏览

python - 分水岭分割后的细胞计数——openCV/Python

我按照教程给出的分水岭分割来分离附加图像上的棕色细胞。它进展顺利(细胞由蓝色边界分隔)但现在我想计算这些细胞并确定它们的大小(像素数)以绘制分布函数。你能帮忙怎么做吗?在此处输入图像描述

代码如下。

0 投票
0 回答
524 浏览

python - 使用opencv通过Pi相机在迷宫中绘制路径

所以我原本打算使用分水岭并摸索通过。我在 git 上找到了一个迷宫求解器,我希望更好地理解它,并为 picamera 图像工作 https://github.com/raincrash/image_processing/blob/master/maze_solver/maze_solver.py

当我使用他提供的图像时,它可以工作,但是当我将图像换成我用 pi 拍摄的图像时,我得到的只是一个黑屏,当它看起来要找到轮廓时。

这是我正在使用的图像

Pi迷宫

我错过了什么?函数不应该findCountor寻找边缘吗?边缘是否过于锯齿而无法找到?

0 投票
1 回答
3272 浏览

algorithm - 在 2D 数据中查找峰值(区域)

我正在寻找2D 数据中的峰值区域(如果您愿意,可以通过 Hough 变换创建灰度图像或 2D 风景)。峰值区域是指局部最大峰值,但不是单个点,而是与之相关的周围贡献区域的一部分。我知道,这是一个模糊的定义,但也许这个词或下面的图片会让你直观地理解我的意思。

标记为红色 (1-4) 的峰是我想要的,粉红色 (5-6) 中的峰是“灰色区域”的示例,如果没有找到那些较小的峰也可以,但如果它们是也可以.

3D 的最佳结果

图像包含 1-20 个峰值区域,高度不同。上面冲浪图的 2D 数据如下所示,并带有一个可能的结果(橙色对应于峰 1,绿色对应于峰 2 a/b,...)。可以在描述链接中找到用于测试的单个图像:

图像左输入图像- - - -中:(okaish)结果- - - -:结果叠加在图像上。

输入、结果和叠加结果

上面的结果是使用简单的阈值(MATLAB 代码)产生的:

如果类似的峰很少,像这样的一些值(15 和 6)通常可以正常工作,但如果存在更多峰或它们变化很大,则不一致。我主要有两个问题,也不能通过简单的调整参数来解决:

  • 较高的峰可以掩盖较低(但清晰可辨)的峰。由于阈值是相对于最高峰,其他峰值可能低于。
  • 在某些情况下,两个峰之间的谷值高于阈值,将几个峰合并为一个(如峰 2 a/b 所示)。

我也不想要一个巨大的区域来建造一个高峰,所以高峰区域可能应该被定义为山的某个百分比。我想而不是全局阈值,我宁愿有一种方法来找到与其直接环境相关的峰值区域。我研究了均值偏移和 MSER 分割,但这些似乎适合分割真实图像,而不是合成数据。

不知何故,我想象用一定量的水填充景观的负片会给我正在寻找的区域:填充和扩散周围区域形状的盆地。就像在下图中倒水一样,由此产生的水池是我正在寻找的区域。

负像(补),准备往里面倒水

我认为这是洪水填充或分水岭算法所做的,但洪水填充似乎完全是另外一回事,分水岭结果根本不是我想到的,在应用一些我认为可以帮助的预处理时(剪裁为 1/10) :

用阈值 1/10 裁剪的分水岭

或者当使用与上述示例相同的裁剪阈值时(在 6/15 处裁剪):

用阈值 6/15 裁剪的流域

使用此代码(MATLAB)生成:


我现在的问题是: 是否有一种算法可以填充景观并为我提供生成的水池(用于各种倾倒的水量)来完成我试图通过上述方法实现的目标?或者欢迎任何其他建议。我正在实现 MATLAB(或者如果需要是 Python),但我可以使用任何代码或伪代码。

为了将此与这个问题区分开来,我的最大值没有被零值分隔。我想要的是相似的,但没有任何建议有帮助(爬山/模拟退火只会给你一分......)。

这个问题也很有趣,但它解决了约束问题(假设恰好有 5 个特定大小的峰值),这使得建议的方法对我的情况没有用处。

0 投票
0 回答
136 浏览

java - 消除分水岭算法中过度分割以增强边缘的最佳方法?

我正在尝试实现图像分割的分水岭算法。我在预处理阶段应用了中值滤波器和形态梯度,但如上图所示,结果分割得太多了。在对网络进行一些研究后,我发现自适应阈值可能是一种解决方案。Otsu 的方法对我来说并不理想,因为我试图尽可能地增强边缘,以便从背景中进一步提取对象。

大象原图:

在此处输入图像描述

过度分割的图像:

在此处输入图像描述

谢谢你,希望你能给我一个关于如何让它在 Java 上工作的建议,因为大多数解决方案都在 matlab 中!

0 投票
2 回答
374 浏览

matlab - 如何防止分水岭算法中封闭背景区域的不准确分割?

我正在使用分水岭算法来分割黑暗背景上的亮点。下面提供了代码,以及它生成的一些图像。

在第二张图片中,我用红叉标记了被分割为“细胞”的封闭背景区域(它们不是生物细胞,只是使用这个词) - 这是不正确的,它们是背景的一部分,只是被“细胞”包围。我看到这会产生错误的最小值,对如何防止这种情况有任何帮助吗?

图像 0 - 标题为“Maxima”的图像的结果(即调整后的原始图像,最大值和轮廓重叠)。在此处输入图像描述

图片 1 - 标题为“倒置最大值”的图片的结果 标题为“Inverted Maxima”的图片的结果

图片 2 - 标题为“Cells segmented”的图片的结果 在此处输入图像描述

0 投票
0 回答
278 浏览

java - 分水岭算法没有提供我预期的结果 | 爪哇 | 开放式CV

我正在尝试在此图像中定位凹坑中心。

在此处输入图像描述

我使用了分水岭算法,我认为该算法用于在图像上查找坑,但结果图像对我没有任何用处。我是否正确使用了这个算法?我应该以其他方式吗?这是我的代码:

这是结果图像: 在此处输入图像描述

谢谢你的帮助 :)

0 投票
0 回答
1733 浏览

python - OpenCV (Python):身体部位测量的分水岭标记

应该使用什么标准和算法来分类和测量身体的各个部位,如腰部、臀部、颈部、胸部等。我是 openCV 的新手(目前用 python 编写代码),我正在做一个需要测量尺寸的项目给定人的高度,正面和侧面图像的身体部位。

我发现了一种叫做 Kollman 分布的东西,它将整个身体分成 10 个相等的部分,并以此方式测量尺寸:

在此处输入图像描述

我是否需要使用分水岭算法来实现它?如果是,我如何使用分水岭算法标记这 10 个分隔线,然后我如何进行测量。

我发现这篇文章很有用 -通过开发自动标记算法进行人体建模