水边缘检测

3
在OpenCV中是否有一种稳健的方法来检测水线,例如,这张图片中的河流边缘?
(来源: pequannockriver.org)

河流的左岸可能更加清晰可辨。与左侧平滑的水面相比,左岸上灌木丛的存在增加了许多高频变化。右岸似乎对于人类艺术家来说也很具有挑战性。但是,对于这种类型的任务,一个在一张图像上表现良好的算法可能在许多其他图像上表现不佳。 - rwong
为了改善问题,请描述寻找水线的动机或目的。例如,您是否在某种比较中使用水线位置?如果是这样,您是否打算比较拍摄于不同时间的多张图像的结果?这些意图会更具挑战性。通过描述您的目的,我们可以提出建议,同时避免困难或不可能的方法。 - rwong
我知道很难设计出一个算法能够在不同场景下都具有鲁棒性,但一般来说,您会使用哪些特性/过滤器来识别图像中的水? - spet
1
我需要对靠近海岸线的材料进行一些处理,因此我想在图像中检测水线以便找到灌木等元素。 - spet
1个回答

1
这项任务具有挑战性,因为必须使用多种技术的组合。此外,对于每种技术,数值参数可能仅在非常狭窄的范围内正常工作。这意味着要么需要人工专家为每个图像进行试错调整,要么需要执行许多次具有许多不同参数的技术,以便选择正确的结果。
以下大纲高度特定于此示例图像。它可能无法适用于其他任何图像。
一个建议:像往常一样,任何多步骤图像分析都应始于最可靠的步骤,然后向下进行到不太可靠的步骤。只要可能,不太可靠的步骤就应利用更可靠的步骤的结果来增强自己的准确性。
探测天空
将图像转换为HSV颜色空间,并找到位于图像上半部分的青色。
保留这个HSV图像,因为它在接下来的几个步骤中可能会派上用场。
检测灌木丛
在图像的灰度版本上运行Canny边缘检测,使用适当选择的sigma和阈值。这将捕捉到灌木丛上的树枝,看起来像一堆噪声。同时,水面相对平滑。

该技术中使用灰度以减少水面反射的影响(从灌木丛中反映出的绿色和黄色)。可能有其他颜色空间(或预处理技术)更能够去除反射。

从低仰角视点检测水波纹

首先,标记任何已分类为灌木丛或天空的图像部分。由于灌木检测比水检测更可靠,应使用灌木检测结果来通知不太可靠的水检测。

观察

由于低仰角视角,水波纹呈水平延伸状。实际上,每个图像特征都呈水平拉伸状态。这称为各向异性。我们可以利用这种倾向来检测它们。

注意:我在各向异性检测方面没有经验。也许您可以从其他人那里得到更好的想法。

想法1:

使用最大稳定极值区域(MSER)作为斑点检测器。

维基百科的介绍看起来很吓人,但实际上与连通组件算法有关。一个天真的实现可以类比于迪杰斯特拉算法

想法2:

注意到图像特征是水平拉伸的,一个更简单的方法是只需将水平梯度的绝对值之和与垂直梯度的绝对值之和进行比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接