我希望开发一些代码,通过查看从谷歌地图下载的图像,分类图像的哪个部分描绘土地,哪个部分描绘海洋。
我是计算机视觉和机器学习的新手,所以我正在寻找一些可能有用的特定技术或API的指针(我不是在寻找这个解决方案的代码)。
到目前为止,我对此有何看法:
当然,非常感谢任何帮助。
编辑(对于任何可能想要做类似事情的人):
答案 0 :(得分:2)
我假设您使用的是Google地图中的卫星视图图像,否则您将无法撰写有关船舶或其他文物的文章。
正如您已经说过的那样,尝试提取蓝色图像部分可能是个好主意。 只是看看RGB图像的蓝色通道是行不通的(我只是尝试过),因为树林等不会在水面上给出一个很好的阈值。
因此,您可以尝试将图像转换为YCbCr色彩空间,并查看那里的色度通道。
这是我刚刚用谷歌地图截图制作的一个例子。我在Matlab中将它转换为YCbCr并且只是接受了Cb通道。
然后,您可以通过设定的阈值对此图像进行二值化,这不应该太难找到。 你可能仍然会有一些小的人工制品,你可以使用形态学操作员(打开图像几次)。 这应该删除小的人工制品,留下陆地部分和水的部分。
希望它有所帮助......如果没有,请继续问......
修改强>
我刚刚尝试使用matlab中的另一个屏幕截图:
我制作的原始图片:
在Cb图像上应用阈值后:
在图像上应用开口(5)后
我只是手动选择了一个阈值......通过查看哪个阈值可以更好地运行,您可能会得到更好的结果......但是正如您所看到的那样,这也应该适用于来自河流和海洋的不同颜色的水。
答案 1 :(得分:1)
您正在寻找一种分割算法,将每个像素分配给两个类别之一(陆地,海洋)。最简单的方法之一是使用阈值处理。
t
pixel value
> t - >指定像素到陆地由于这种方法效果最好,如果你能轻易区分陆地和海洋质量,我建议你比较像素的hue value(即找到蓝色和绿色之间的阈值)。