language-agnostic - 关于在谷歌地图中识别陆地/海洋质量的技术建议

标签 language-agnostic machine-learning computer-vision

我希望开发一些代码,能够通过查看从谷歌地图下载的图像,对图像的哪一部分描绘陆地、哪一部分描绘海洋进行分类。

我是计算机视觉和机器学习的新手,因此我正在寻找一些可能有用的特定技术或 API 的指导(我不是在寻找此解决方案的代码)。

到目前为止我有一些进展:

  • 边缘检测(单独而言)可能没有多大帮助。尽管它给出了相当漂亮的海岸轮廓,但海面/海上的人工制品可能会对陆地(如云、船只等)产生误报。
  • 提取图像的蓝色元素可以很好地指示哪个是海洋,哪个不是海洋(显然,海洋的蓝色饱和度比陆地高得多)

当然,我们非常感谢任何帮助。

编辑(对于任何可能想做类似事情的人):

最佳答案

我假设您正在使用 Google map 上的卫星 View 图像,否则您不会写有关船舶或其他文物的文章。

正如您已经说过的,尝试提取蓝色图像部分可能是一个好主意。 仅仅查看 RGB 图像的蓝色 channel 是行不通的(我刚刚尝试过),因为树林等不会在水面上提供良好的阈值。

因此,您可以尝试将图像转换为 YCbCr 色彩空间并查看其中的色度 channel 。

这是我刚刚用谷歌地图的屏幕截图制作的示例。我在Matlab中将其转换为YCbCr,然后只取了Cb channel 。

original screenshot

cb channel of ycbcr image

然后,您可以通过设置良好的阈值对该图像进行二值化,这应该不难找到。 您可能仍然会有一些小的伪影,您可以使用形态运算符(多次打开图像)。 这应该会移除小的人工制品并留下陆地部分和水体部分。

希望有帮助...如果没有,请继续询问...

编辑

我刚刚在 matlab 中再次尝试使用另一个屏幕截图:

  1. 将图像转换为 YCbCr 色彩空间
  2. 看看 Cb channel
  3. 在 Cb 图像上查找固定阈值或通过 Otsu 方法在二部直方图中查找适当的阈值
  4. 执行开运算或其他滤波器来消除小噪音

我制作的原始图像:

screenshot

对 Cb 图像应用阈值后: after applying threshold

在图像上应用开口 (5) 后 final image

我刚刚手动选择了一个阈值...通过查看哪个阈值效果更好,您可能会得到更好的结果...但是正如您所看到的,这也应该适用于河流和海洋的不同颜色的水。

关于language-agnostic - 关于在谷歌地图中识别陆地/海洋质量的技术建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4884654/

相关文章:

python - 类型错误 : float() argument must be a string or a number, 而不是 'Timestamp'

machine-learning - 解析非均匀数据

matlab - 使用 SVD 而不是协方差矩阵来计算特征脸

python - 识别图像中的特定面孔

database - 关于复制方案/算法的文章?

algorithm - 浮点除法与乘法的精度差异

python - 我应该如何解释 sparse_categorical_crossentropy 函数的输出?

algorithm - 具有固定子集大小的 Sum-subset

swift - 一种语言开源意味着什么?

video - 在哪里可以找到面部检测软件、算法等?