遥感图像的机场检测是图像处理在军事以及航空领域一个重要的应用,现有一些机场提取方法利用显著性特征获取机场区域的方法容易使得机场提取不够完整,而且会混入过多的虚警区域,原因在于图像的显著性特征并能用来表示机场区域和背景区域的差异,所以稳定性和鲁棒性较差。而且遥感图像一般尺寸较大,显著性图像的计算往往需要很长的时间。基于以上原因,本文介绍一种基于直线特征的机场检测算法(算法是我本科毕设用到的,由于没有足够的时间做网上的调研,所以不太清楚这个方法是否已经被使用过)。
在遥感图像中,机场最明显的特征在于具有长而直的跑道,而且供飞机起飞和降落的跑道一般为平行结构,因此利用这个特征可以区分机场区域和背景区域,从而定位机场。首先给出本机场检测算法的流程图,如下图所示。
依照该流程图,本算法主要分成四个部分,首先利用LSD直线段检测算法提取图像中的直线段,然后利用基于角度分类的平行线组提取算法找出其中来自于机场的平行线组,接着采用基于扩散模型和加分决策的平行线聚类方法剔除干扰直线,最后利用筛选后的平行线组定位机场并获得掩膜。
那么首先,要利用机场特有的线条特征,有必要先检测图像中的直线。这里所使用的方法是LSD直线检测方法,具体的原理参考博文https://blog.csdn.net/weixin_42647783/article/details/81200534。
LSD算法的输入为灰度图像,输出为一幅标识了所有直线段的二值图像和所有直线段的相关数据,例如角度、长度、宽度和起始点坐标等。这里值得说明的是,整个飞机检测识别系统的输入是一幅18级0.5米分辨率的Google卫星多光谱影像,而这里用于LSD直线检测的是下采样至8米分辨率的灰度图像,这里之所以下采样至8米,是因为可以将LSD的计算量减少为大约为原来的1/256而且同时又能保持线条特征不会丢失,既提高了运算效率,同时也保证了检测效果。
下面是几个机场的LSD直线检测结果。
可以看到,LSD直线段检测算法能较好的检测出机场跑道对应的直线段,不会有明显的遗漏,且检测时间较短(可以自行尝试)。
一般而言机场中跑道的直线段是互相平行的,而相比之下周边区域来自道路的干扰直线则角度各异,利用这一差异,可以提取出与机场走向一致的平行线组。提取的思想为首先对所有的直线按照角度归类,每一个类别对应于1度的角度区间,然后统计每一类中所有直线段的总长度,最后找到总长度中最大值所对应的角度区间,即为机场跑道的走向角度所在区间。具体实现方法如下:
首先输入的量为LSD直线段检测结果输出的每一条直线段的所有数据(这里主要使用角度和长度信息,其中角度范围0-180度),接下来要做的是平行线组提取。
将0-180度划分成180个小区间,对所有直线段按照角度归为180类,形成一个尺寸为的向量,向量中每一个元素的值表示角度在该区间的所有直线段的长度之和,如下列公式所示
这里表示直线段的总数量,
表示角度在区间
内的所有直线的长度之和,表示第j条直线的长度,
表示第
条直线的角度。最后得到的向量
中,最大值所对应的角度即为机场跑道的走向角度,通过保留角度在该角度区间的所有直线段,剔除剩余直线段,即可获得与机场跑道走向一致的平行线组。
如图所示,图a)是机场的灰度图像,图b)是LSD直线段检测结果,图c)是各个角度区间对应的直线段长度总和,图d)是保留属于最大得分对应的角度区间的直线段。可以看出机场对应的平行线组得到很好的检测。
由于城市环境复杂,其中的道路的走向无法确定,机场周边区域有可能存在与机场跑道走向平行的道路,其直线检测结果如下图所示。此时如果单纯依靠平行线组的外接矩形作为机场所在位置的掩膜,则掩膜所标识的区域将有很大一部分属于非机场区域,不会存在飞机目标,如果将这些区域也做疑似目标检测的话,将导致后续的检测的计算量大大增加,同时也会提高虚警率,所以需要平行线组做一次聚类操作,以去除外围城市道路对应直线,保留机场跑道对应直线,从而减少计算量和虚警。
对于这种情况,设计了一种基于扩散模型和得分决策的平行线聚类方法。该方法的思想在于利用了机场的平行线组的密度更高,当对整幅二值图做膨胀操作时,机场跑道的这些平行线组取较小的膨胀半径时,膨胀区域便能连接形成一个连通域,而此时这个连通域不会与干扰直线的连通域相连;而只有当膨胀半径大到一定的程度时,干扰直线的膨胀区域才有可能与机场直线的膨胀区域相连通。对于这个过程,可以构建一个随着膨胀半径R变化的变量,希望随着R的增大该变量随着在机场中各直线膨胀区域没连接之前,变量值不断增大,而在机场各区域连通时,该变量值最小,而在之后继续扩大R时,该变量值又不断增大。基于这一思想,我们将该膨胀半径R不断增大的过程称为扩散过程,而寻求低得分的过程成为得分决策,该算法的具体实现如下:
首先对所有的直线上的点做扩散,其扩散半径设为R,点的坐标为,那么扩散的过程为:
这里接着计算扩散后的扩散区数量,一个扩散区即为二值图的一个4连通域,设其值为,那么最后的得分
计算方法为:
通过不断扩大扩散半径,直到扩散区的数量,此时停止扩散,找到最小的得分
以及对应的扩散半径,最后保留最大的连通域对应的平行线组,然后剔除多余的干扰直线。该聚类方法的聚类测试结果如图下图所示,其中图a)和图b)为最小得分
对应的扩散半径扩散后,各个扩散区的标识图,图c)和图d)为两个基地得分Score与扩散半径R的变化关系图示,图e)和图f)保留的机场平行线组图示。
该方法属于一种非监督聚类方法,其聚类依据在于平行线的密集程度或者说是平行线的间隔。通过这个方法,可以确定平行线组中属于机场的部分,然后以此定位机场并提取机场区域。
该聚类方法的程序流程图如表所示。
通过之前的步骤找到机场的平行线段,最后通过对这些直线取最小外接矩形或者用三角剖取最小外接凸多边形的方法,即可得到机场掩膜,该掩膜对应于原图的分辨率为8米,因此需要做一次仿射变换得到0.5米分辨率下的机场掩膜,用于后续的提取机场图像并做飞机检测。掩膜提取结果如下图所示。
本博客的机场检测方法是本人本科毕设中机场检测的一个思路,首先利用LSD直线段检测算法提取低分辨率遥感图像中的直线段,此时道路的直线段和机场中跑道的边缘线段都会得到相应的提取;然后根据机场跑道的直线特征,利用平行线组提取和聚类,剔除周边干扰的直线段,此时保留下来的就是机场跑道对应的直线段;最后利用三角剖分或者取最小外接四边形等方法即可获取机场的边界并最终得到机场的掩膜图像,恢复原始高分辨率之后即可提取出机场。
这一思路对机场区域和周围区域线条特征差异较大的可以得到不错的效果。不过存在一些机场区域,其周边有很长的笔直道路或者方形农田等干扰对象,它们的直线段在平行线组提取时可能会得到比机场的平行线组更高的得分,这样就会引起虚警。对于这种情况,需要在LSD直线段检测后,先对线段做一步筛选,筛选的思路是:根据机场跑道的直线段周边的颜色和农田直线段周边的颜色的差异性,可以剔除农田对应的直线段;利用机场跑道的长度范围,可以筛除过长的那些干扰直线段,从而减小周边长直道路带来的影响;利用跑道的平行线密度相较于周边干扰的道路的平行线组一般较大,也可以筛除一些干扰。通过这样的方式,可以获得更准确的机场检测效果。
本博客仅仅提供一种基于线条特征的机场检测思路,并非固定的方法,除此之外还有很多很多方法值得大家去研究,相较于他们,该方法的明显优点是原理简单,且检测效率较高。如果有需要,当然可以将这一方法与其他方法相结合,从而提高方法的鲁棒性和有效性。
原创性声明:本文属于作者原创性文章,小弟码字辛苦,转载还请注明出处。谢谢~
如果有哪些地方表述的不够得体和清晰,有存在的任何问题,欢迎评论和指正,谢谢各路大佬。
有需要图像处理相关技术支持的可咨询QQ:297461921