一、数据
数据来源:教程中的实验数据,共包含RGB三个波段,还有数字地表模型(以下简称DSM)文件。
图一 RGB影像
数据特征:数据范围较小,要素种类少,仅包含较多的建筑和大片的绿地。由于建筑的房顶使用的材料和材料颜色不同,所以建筑的光谱特征没有规律,是不连续的特征。而绿地的光谱特征则十分容易分辨。
但是建筑通常具有规则的形状,而且建筑相比于周围其他要素通常有较高的高程,因此也会在其周围产生阴影,结合以上两点,我们可以对建筑物进行初步提取。
首先对影像进行分割,采用多尺度分割,分割参数设置为尺度为25,形状为0.1紧凑度为0.5,结果如下:
图二 多尺度分割结果
根据上文数据特征的描述,我们这里通过高程特征来提取建筑。打开Feature View窗口,选择Object feature下的Layer Values的Mean,双击 DSM波段,右键选择Update Range,此时Feature View视窗底部会更新出影像的高程范围。
图三 Feature View
勾选前面的单选框eCognition的数据视窗会显示影像分割对象的高程均值信息。
图四 分割对象的高程均值
通过调整Feature View窗口底部的高程均值范围可以在数据视窗预览特定高程范围内的分割对象。通过与原始影像的对比,可以筛选出建筑的分割对象。这里将范围设置为大于等于765,这样高程均值大于等于765的对象会被显示为蓝色和绿色,而不在此范围的对象显示为灰色。结果如下:
图五 高程均值大于等于765的对象
通过与原始影像的对比发现,在该范围内的对象与实际情况有很好的吻合效果。但是也存在一些其他不规则形状的非建筑对象,从原始影像可以发现这些对象是树木,因为树木也具有很大的高程,此为噪声信息,需要在后续步骤去除。
下面通过算法对建筑对象进行分类,在Process Tree中插入分类进程,选择assign class分类算法,在Threshold condition设置阈值条件为Mean DSM>=765,并在类别中设置为建筑类别,参数设置入下:
图六 assign class分类
在菜单栏将试图切换到View Classification可以查看分类结果,浅蓝色部分是建筑分类,结果如下:
图七 建筑分类结果
可以看出建筑分类结果与底图基本吻合,除了有树木的部分。因此下面需要把树木从建筑分类中分离。
树木具有大的高程数据是由于树木的枝叶反射光谱信息到传感器造成的,但是树木枝叶之间的空隙会有透过的电磁波到达地面,再反射到传感器,因此树木的高程数据会呈现出这样的特征:树木对象的高程数据是不均匀的,在较大的高程数据中有较小的高程数据。从DSM影像上看就表现为波浪状的纹理,如下图:
图八 DSM
而建筑的高程数据是十分均匀的,也就是说树木的高程信息和建筑相比具有较大的方差,通过这个特征可以将建筑与树木分离。
与分类建筑类似,从Feature View中选择Standard deviation下的DSM,更新范围后调整到大于等于6,在数据视窗显示DSM方差大于等于6的对象如下:
图九 DSM方差大于等于6的对象
从上图可以看出,建筑对象都呈现灰色,而树木均显示为蓝绿色,至此再使用assign class分类算法将DSM方差大于等于6的对象从建筑分类中分离。在分类时,将参数Class filter设置为“建筑”,这是因为树木对象在上一步被分到建筑类别中,其所属类别为建筑。最终结果如下:
图十 初步分离树木结果
通过与图七对比可以看出大部分树木已经从建筑中分类,但仍然有少量树木未被处理,这些树木枝叶间的间隙较少,所以透过的电磁辐射较少,导致其高程信息较为均一,方差较小。换言之,这类树木枝叶较为茂盛,在绿色波段会有较高的反射值,但是由于数据没有近红外波段,所以我们通过绿色波段的比率来分离树木。
在Feature View窗口Object features选择Customized自定义特征,输入表达式如下:
图十一 自定义特征
然后通过调整green ratio的取值范围来确定植被对象,这里调整到大于等于0.36,结果如下:
图十二 green ratio大于等于0.36的对象
可以看出绝大多数植被对象都被选中,包括建筑周围的植被对象,再通过assign class分类将植被从建筑类别中分离,注意此处的参数Class filter依然要选择建筑,因为我们要分离的是还在建筑分类里的植被对象,阈值条件设置为green ratio大于等于0.36,结果如下:
图十三 green ratio分离结果
与图十对比可以看出大部分错分的树木对象已经被分离,但仍有小部分树木未被分离,而且有的建筑边缘分类效果不理想,所以我们要根据建筑邻域环境进行精细化分类。
那些建筑边缘未被分类的对象与建筑有很长的公共边界,如果有未分类的对象满足上述条件,那么这些对象应该被划分为建筑,这里提到的公共边界在eCongtion中对应到class-related feature下的Relations to neighbor objects,在Rel. border to中创建相对于建筑物的对象边界信息,该值的取值范围为0到1
图十四 创建建筑物边界信息
然后在Feature View中进行阈值调整以查找应该被分类为建筑的对象,这里调整到0.5至1,可以从下图看出很多未被分类的建筑对象符合条件:
所以我们使用此阈值范围在进行一次assign class分类,注意参数设置Class filter设置为未分类的对象,阈值条件设置为0.5~1,Use class设置为建筑,因为我们这里是要将没有分类的建筑对象分类为建筑类别。结果如下:
图十五 上下文分类结果
与上图相比,可以看出有一些建筑边缘对象重新分类为建筑,仍然有一些对象未被分类,同时还有少量植被对象被错分。前文提及,建筑一般具有规则的形状,所以下面用过形状信息再次精细化分类。
由于我们进行了多尺度分割,所以所有的建筑对象仍然是以单独的不规则个体单独存在的,因此首先我们需要将已经分类的建筑对象合并。在Process Tree中插入新的进程,算法选择merge region,Class filter选择建筑,执行后得到合并后的结果与图十五无异,但是原本相互连接、独立的建筑对象被合并成一个大的对象。然后我们可以根据shape信息查找被错分为建筑的对象,这类对象一般是独立分布的单个面积较小的对象。
在Feature View窗口Object features中找到Geometry,在Extent中双击Area,通过调整底部的取值范围来过滤掉面积较小的对象。这里设置的范围是大于等于7000(pixels),结果如下:
图十六 大于等于7000pixels的对象
然后通过assign class算法,将小于7000pixels的对象从建筑类别中分离,注意Class filter设置为建筑,阈值条件设置为Area<7000,结果如下:
图十七 shape精细化分类结果
通过与图十五对比,可以看出较小的错分为建筑的对象已经被分离,最后的分类结果仍然有小瑕疵,还需要通过其他手段进行处理,但是整体效果已经很符合实际情况。至此,建筑物的简单提取完成。
注:本文是依据eCongnition官方操作文档进行一步步操作的,所用的数据也是官方提供的示例数据,如有侵权,请联系作者删除。