image-processing - 识别山脊的几何形状

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

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

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

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

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

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

有一些重要的事情需要记住。

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

最佳答案

我可以想到两种方法。

  1. 使用与边缘检测问题中使用的网络类似的网络。这些网络输出输入的每个像素包含边缘的概率。您的问题类似,只是您不需要所有边缘。但这可能需要一些重要的后处理,因为您可能会得到很多紧密的直线,您必须使用非极大值抑制或某些形态学操作将它们折叠成一条线。为了训练,地面真值可以是包含山脊真实位置的二进制掩码,或者您可以在实际山脊位置上使用一些小高斯,以使损失函数更加稳定。

  2. 第二种方法可以是回归。您可以将包含山脊端点坐标的输出向量作为平面向量。但这需要您确定可以存在的最大山脊数量。此方法可能无法单独工作,因为由于输出向量较大,您可能会得到很多误报,但这可以与第一种方法结合使用,并且您可以选择仅在关键点非常接近边缘位置时才保留关键点由第一种方法获得。

关于image-processing - 识别山脊的几何形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47892234/

相关文章:

c++ - 根据照片以3D计算对象位置

c++ - 在 OpenCV 中绘制多边形?

c++ - 在重叠处划分轮廓

c++ - 在 Visual Studio 中调试非托管 C++ 图像

python - InvalidArgumentError : Input to reshape is a tensor with 88064 values, 但请求的形状需要 38912 的倍数 [[{{node Reshape_17}}]]

python - 检查输入 : expected input_49 to have shape (512, 512, 1) 时出错,但得到形状为 (28, 28, 1) 的数组

machine-learning - YOLOv3注释应该在调整大小之前完成吗?

python - 从图像中提取对象

python - 如何将机器学习分类器连接到 Web 应用程序?

c++ - 将外部库添加到当前的 C++ 项目中