在航拍照片中识别水道-边缘检测图像中的多边形


9

我正在尝试从航拍照片中识别出水道(例如Google Maps)。地方政府通常使用GIS数据来说明水路(以及道路,建筑物等)的位置,但是其中的水数据通常有些不准确,我们也许可以使用航拍图像对其进行改进。因此,我们已经有了一些并不总是值得信赖的数据。

我知道如何对数据进行一些基本的图像处理(不幸的是,我这里还没有显示示例图像,我试图想象如何做到这一点,尚无可用的代码):

  • 我可以使用图像中的水道收集一些颜色值集,并找出哪些像素最接近这些颜色,可能还适用于其他类型的要素(草,道路,建筑物等)。如果我设置一个“足够接近”像素的阈值,则会得到一组可能是水道的像素(但会产生很多噪点)。

  • 我可以将图像转换为灰度图像,并使用标准的边缘检测算法来找出边缘在哪里。再次,这给了我一组具有相似边界的像素,但是会产生噪点,边缘也会过分思考和/或存在间隙。

我想要的输出是一组概述可能的水路的多边形

直观地讲,我想使用检测到的边缘来创建多边形,并使用颜色信息来确定其中哪些是水,这可能要利用我们已经拥有的政府数据。

有没有一种已知的方法可以将边缘检测算法的结果转化为一组漂亮的封闭多边形?如果有更好的方法,或者还有其他有关如何解决此问题的技巧?


1
旁注:请记住,Google许可不允许这样做!Openstreetmap也有同样的问题。OSM确实同意使用Bing映像。
PiTheNumber 2014年

Answers:


6

仅凭颜色信息很难做到这一点。航空影像和卫星影像之间(甚至内部)之间的颜色差异可能很大。理想情况下,您将需要高光谱或至少红外图像(请参阅本文)。

假设您的边缘检测可以捕捉到像素边界,则可以将每个像素的边界作为一个封闭的多边形,然后将它们结合在一起以形成一个多边形(取决于您的并集实现方式,最终可能会带有一个带有内环或孔的多边形)或一个集合多边形。在Java的拓扑套件和其他计算几何实现可以为你做这个要容易得多。如果要使用亚像素边界,则需要非常小心以确保设置了良好的epsilon值,以便可以捕捉非常接近但不完全接触的边缘。

如果要自己组合边缘,则需要构建一个相交边缘的图形,并实现遍历该图形(例如逆时针)的代码,以查找该图形自身在何处闭合以形成多边形。这就是某些多边形的并集实现的工作方式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.