识别脊的几何形状

时间:2017-12-19 17:25:51

标签: image-processing machine-learning computer-vision deep-learning

我想识别这些彼此相关的几何形状。例如,看看下面屋顶的图像,只要知道RED中脊的存在,我知道BLUE中的山脊也应该存在(即使它在图像中不可见)。如果我有数千个这样的标记图像,ML模型也应该能够学习这一点。但是,我无法弄清楚如何表示这个问题?

Original Image (Example 1)

Label over original Image (Example 1)

标签:C,Z

Original Image (Example 2)

Label over original Image (Example 2)

标签:D

Original Image (Example 3)

Label over original Image (Example 3)

标签:C,Z

Original Image (Example 4)

Label over original Image (Example 4)

标签:E,G

让我们将这些脊称为线,就像在第一个例子中一样,我们通过简单的边缘检测而不是Z来检测X和Y线,因为它不可见。同样地,未检测到线D,但是线A,B,C来自示例2。

我想要的是我制定了一个ML模型,该模型从X和Y学习应该有一个Z,然后是A,B,C中的D.

我有一个这样的例子的数据集,其中标记了脊(红色和蓝色只是为了区分,所有的脊都用相同的颜色标记)。

要记住一些重要的事情。

  • 图像的亮度可能会有很大差异。
  • 山脊可以有任何比例或均匀方向(在合理范围内)。
  • 输入图像几乎总是非常嘈杂。

2 个答案:

答案 0 :(得分:0)

我可以想到两种方法。

  1. 使用类似于边缘检测问题中使用的网络。这些网络输出Input的每个像素的概率以包含边缘。你的问题很相似,只是你不需要所有的优势。但是这可能需要一些重要的后期处理,因为你可能会得到很多近线,你必须使用非最大抑制或一些形态学操作将它们折叠成一行。对于训练,地面实况值可以是包含脊的真实位置的二元掩模,或者您可以在实际脊位置上使用一些小高斯,以使损失函数更稳定。

  2. 第二种方法可以是回归。您可以将包含脊的终点坐标的输出向量作为平面向量。但这需要你修复可能存在的最大脊数。这种方法可能不会单独工作,因为输出矢量较大可能会导致很多误报,但这可以与第一种方法结合使用,只有在关键点非常接近时才能选择保留关键点从第一种方法获得的边缘位置。

答案 1 :(得分:0)

我会用CNN来检测屋顶。如果颜色不重要,您可以制作图像灰度/其他颜色通道模型(例如HSV并移除H通道)。或者,您可以通过自动更改任何图像的色调并将此编辑的图像也提供给CNN来扩充数据集。