问题标签 [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.
matlab - 放大 whatershed 输出以匹配原始图像大小
介绍
背景:我正在使用watershed
MATLAB 中的算法分割图像。对于内存和时间限制,我更喜欢对二次采样图像执行此分割,假设调整大小为0.45
.
问题:出于可视化目的和其他后期处理步骤,我无法正确地将分割的输出重新缩放到原始图像比例。
最小的工作示例
例如,我有这个图像:
我运行这个最小的脚本,我得到一个L
包含在标签图像中的分水岭分割输出,其中每个连接的组件都用一个自然数寻址,并且连接的组件之间的边界为零值:
现在我有L
它具有相同的尺寸im_res
。如何使用存储的结果L
来实际分割原始 im_orig
图像?
错误的解决方案
我尝试的第一种方法是L
使用imresize
.
不幸的是,上采样L
会产生一系列不需要的伪像。它尤其丢失了一些表示图像片段之间边界的基本零点。这就是我的意思:
我知道这是由于升级过程造成的模糊,但现在我想不出任何其他可以成功的方法。
我想到的唯一其他方法涉及使用数学形态学来“放大”调整后图像的边界,然后进行上采样,但这仍然会导致一些不需要的伪影。
TL;DR(或回顾)
有没有办法watershed
在 MATLAB 中对缩小的图像执行,然后将结果放大到原始图像,保持算法输出的清晰区域边界?我在寻找一个完全荒谬的问题吗?
python - 分水岭分割后的细胞计数——openCV/Python
我按照本教程给出的分水岭分割来分离附加图像上的棕色细胞。它进展顺利(细胞由蓝色边界分隔)但现在我想计算这些细胞并确定它们的大小(像素数)以绘制分布函数。你能帮忙怎么做吗?
代码如下。
python - 使用opencv通过Pi相机在迷宫中绘制路径
所以我原本打算使用分水岭并摸索通过。我在 git 上找到了一个迷宫求解器,我希望更好地理解它,并为 picamera 图像工作 https://github.com/raincrash/image_processing/blob/master/maze_solver/maze_solver.py
当我使用他提供的图像时,它可以工作,但是当我将图像换成我用 pi 拍摄的图像时,我得到的只是一个黑屏,当它看起来要找到轮廓时。
这是我正在使用的图像
Pi迷宫
我错过了什么?函数不应该findCountor
寻找边缘吗?边缘是否过于锯齿而无法找到?
algorithm - 在 2D 数据中查找峰值(区域)
我正在寻找2D 数据中的峰值区域(如果您愿意,可以通过 Hough 变换创建灰度图像或 2D 风景)。峰值区域是指局部最大峰值,但不是单个点,而是与之相关的周围贡献区域的一部分。我知道,这是一个模糊的定义,但也许山这个词或下面的图片会让你直观地理解我的意思。
标记为红色 (1-4) 的峰是我想要的,粉红色 (5-6) 中的峰是“灰色区域”的示例,如果没有找到那些较小的峰也可以,但如果它们是也可以.
图像包含 1-20 个峰值区域,高度不同。上面冲浪图的 2D 数据如下所示,并带有一个可能的结果(橙色对应于峰 1,绿色对应于峰 2 a/b,...)。可以在描述链接中找到用于测试的单个图像:
图像左:输入图像- - - -中:(okaish)结果- - - -右:结果叠加在图像上。
上面的结果是使用简单的阈值(MATLAB 代码)产生的:
如果类似的峰很少,像这样的一些值(15 和 6)通常可以正常工作,但如果存在更多峰或它们变化很大,则不一致。我主要有两个问题,也不能通过简单的调整参数来解决:
- 较高的峰可以掩盖较低(但清晰可辨)的峰。由于阈值是相对于最高峰,其他峰值可能低于。
- 在某些情况下,两个峰之间的谷值高于阈值,将几个峰合并为一个(如峰 2 a/b 所示)。
我也不想要一个巨大的区域来建造一个高峰,所以高峰区域可能应该被定义为山的某个百分比。我想而不是全局阈值,我宁愿有一种方法来找到与其直接环境相关的峰值区域。我研究了均值偏移和 MSER 分割,但这些似乎适合分割真实图像,而不是合成数据。
不知何故,我想象用一定量的水填充景观的负片会给我正在寻找的区域:填充和扩散周围区域形状的盆地。就像在下图中倒水一样,由此产生的水池是我正在寻找的区域。
我认为这是洪水填充或分水岭算法所做的,但洪水填充似乎完全是另外一回事,分水岭结果根本不是我想到的,在应用一些我认为可以帮助的预处理时(剪裁为 1/10) :
或者当使用与上述示例相同的裁剪阈值时(在 6/15 处裁剪):
使用此代码(MATLAB)生成:
我现在的问题是: 是否有一种算法可以填充景观并为我提供生成的水池(用于各种倾倒的水量)来完成我试图通过上述方法实现的目标?或者欢迎任何其他建议。我正在实现 MATLAB(或者如果需要是 Python),但我可以使用任何代码或伪代码。
为了将此与这个问题区分开来,我的最大值没有被零值分隔。我想要的是相似的,但没有任何建议有帮助(爬山/模拟退火只会给你一分......)。
这个问题也很有趣,但它解决了约束问题(假设恰好有 5 个特定大小的峰值),这使得建议的方法对我的情况没有用处。
python - OpenCV (Python):身体部位测量的分水岭标记
应该使用什么标准和算法来分类和测量身体的各个部位,如腰部、臀部、颈部、胸部等。我是 openCV 的新手(目前用 python 编写代码),我正在做一个需要测量尺寸的项目给定人的高度,正面和侧面图像的身体部位。
我发现了一种叫做 Kollman 分布的东西,它将整个身体分成 10 个相等的部分,并以此方式测量尺寸:
我是否需要使用分水岭算法来实现它?如果是,我如何使用分水岭算法标记这 10 个分隔线,然后我如何进行测量。
我发现这篇文章很有用 -通过开发自动标记算法进行人体建模。