eCognition面向对象分类实战:从多尺度分割到机器学习
发布时间:2026/9/16 23:13:54 作者:尧图编辑部 阅读量:1,286

做遥感影像分类这几年我从ENVI一路折腾到eCognition最大的感触是很多人一开始就选错了发力点。用逐像素监督分类跑高分影像结果就像拿毛笔画工笔画——工具本身没问题但它干不了精细活。一个地块被分得七零八落分类图拿到野外根本对不上号。我真正把思路扭转过来是从接触eCognition 9.0的面向对象分类开始的。所谓面向对象就是先把影像分割成一个个同质对象再基于对象的特征去做分类和逐像素的思路相比这完全是两套玩法。更吸引我的是eCognition 9.0同时提供了两条路一条是规则集方法把人的经验写成显式的分类逻辑另一条是把机器学习算法直接内嵌进来让模型自己学特征。这篇内容不是软件手册而是我用eCognition 9.0做多尺度分割和分类的实战复盘适合刚开始接触eCognition、被参数搞晕的新手也适合已经跑通流程但总觉得分类结果不对劲的老手。1. 从像素到对象eCognition面向对象分类到底改了什么1.1 逐像素分类的三大痛点先说说为什么会有面向对象这个东西。传统逐像素分类比如最大似然法、支持向量机直接作用在单个像元上处理单元就是像素。这在Landsat这类30米分辨率影像上问题不大因为一个像元对应地面900平方米像元间光谱相对稳定。但用到高分影像上问题全出来了。第一椒盐噪声严重。高分影像里同一类地物内部往往存在很大的光谱变异。同一棵树的树冠向阳面和背阴面的亮度能差出去好几档。逐像素分类会把同一个树冠切成好几类宏观上看就是满地噪点分类图丑得没法看。第二分类结果没有形状概念。地物是有几何形态的一栋楼有矩形轮廓一块田有边界线一条河有连续走向。逐像素分类完全不利用这些信息只盯着光谱值结果就是分类结果呈点状分布地物边界锯齿状严重完全达不到制图要求。第三光谱混淆严重。很多地物光谱非常接近比如新铺的柏油路和屋顶沥青防水层单看光谱特征几乎分不开。逐像素方法在这个问题面前基本无解。这三个痛点叠加起来就是为什么高分时代大家开始重新审视逐像素方法。1.2 对象才是地物的自然表达单位面向对象方法的核心思想其实很简单先把影像分割成一个个同质对象然后以对象为单位做分类。为什么对象才是地物的自然表达单位你在野外看到一小块农田第一反应是这是一整块地而不是这块地由几千个像素构成。分割得到对象之后能计算的东西就多了光谱均值、标准差、形状特征、纹理特征、与周围对象的空间关系。这些特征大大丰富了分类的信息维度很多在像素层面无解的问题在对象层面就有了答案。最典型的例子是区分道路和房子。像素层面两者光谱相近很难分开但对象层面房子有规则的矩形轮廓、有屋顶形态、旁边往往伴生阴影而道路是狭长连续的。这些形状和上下文特征是面向对象分类独有的优势也是eCognition整个软件设计的出发点。在eCognition里对象贯穿始终。分割得到的图斑就是对象每个对象都有索引、特征值、类属性。软件还把对象组织成层次网络父子关系、邻接关系都记录在案。理解这一点后面看规则集里的与相邻对象对比与父对象对比这些特征选项时就不会一头雾水。换句话说eCognition处理的不是一张单纯的影像而是一张带关系网络的对象地图这为后续的规则集和机器学习都铺好了底子。2. 多尺度分割参数怎么定尺度到底选多大2.1 尺度参数(Scale Parameter)的真正含义多尺度分割是eCognition的看家本领也是所有面向对象流程的第一步。分割质量直接决定分类上限——这句话我强调过很多次分割不合适后面再牛的规则集和机器学习都救不回来。我见过太多人把时间花在调分类器上却不愿意多花半小时看分割边界最后只能在一个糟糕的地基上盖危楼。多尺度分割本质上是一个区域合并算法。它从单个像素出发不断把相邻且相似的区域合并直到合并后的异质性超过设定阈值才停止。这个阈值就是尺度参数Scale ParameterSP。很多人对SP的直观理解是值越大对象越大方向没错但不够准确。SP控制的不是对象的目标大小而是对象内部允许的最大异质性。同一幅影像SP50分出来的对象平均面积和影像分辨率、地物复杂程度都有关系。实际操作时SP怎么选核心是围绕你要分什么来定。提取建筑物SP通常设在30到80之间保证一栋楼大体是一个对象做宏观土地覆盖概览SP可能要提到150以上。没有绝对正确的值只有适合你目标的值。我习惯的一个做法是先确定目标地物在图上的大概像素规模再反推一个SP粗跑一遍目视检查对象边界是否贴合地物边缘然后逐步微调。2.2 形状/紧致度权重光谱纯度和几何完整性的取舍除了SP分割还涉及两组关键权重shape形状权重和compactness紧致度权重。这里先提醒一个很多人没意识到的点分割时光谱权重和形状权重加起来是1所以shape设得越高光谱信息用得越少。有些人为了让边界规整把shape调得很高结果边界倒是整齐了但光谱上本来能分开的类别彻底糊在一起。先理解shape。区域合并时判断异质性由光谱异质性和形状异质性两部分组成shape权重就是形状异质性占总异质性的比例。如果shape0只考虑光谱分割会很碎因为地物内部微小光谱变化都会打断合并如果shape太高比如0.7以上分割又会过于追求形状规整把不同地物硬并到一起。我常规的设置是0.1到0.3之间以光谱信息为主形状作为辅助约束。影像噪声较大、地物光谱变异明显时可以适当提高shape。compactness是形状因子内部的权重平衡的是边界光滑度和整体紧致度。compactness越高结果越接近紧凑规则形状越低越允许细长、不规则的边界。一般来说compactness和光滑度加起来也是1所以compactness0.5就是两者对半。这两个参数的调节不用太较真常规从0.5开始根据结果微调即可真正需要花心思的是SP。2.3 多尺度分割的实用策略实际项目中我很少指望一次分割搞定所有地物因为不同地物的最佳尺度天然不同。建筑物需要小尺度农田地块中等尺度大范围水体可能需要大尺度。eCognition的多尺度分割可以多次运行而且分割结果会自动形成层次关系这是它最值钱的设计之一。一种很实用的策略是先粗后细先用较大SP做一次粗分割把影像分成大尺度的地物单元比如先分出水域、裸地、植被区然后在某个类别内部用较小SP再做一次细分割把该类内部进一步拆开。eCognition会把第二次分割结果作为第一次分割的子对象保留规则集里就能用子对象的NDVI大于父对象均值这类特征来做判断。另外强烈建议善用ESP工具Estimation of Scale Parameter。它通过计算分割结果的局部方差变化生成一条尺度变化曲线帮你判断哪些尺度对应地物的最优尺度。ESP不能完全替代人工判断但作为初筛工具能把SP的取值区间从瞎猜缩到有依据建议新手先跑一遍再动手。3. 规则集把专家经验翻译成机器能执行的逻辑3.1 规则集的本质对象特征的逻辑组合规则集是eCognition里最核心、也最能体现人的经验的部分。说白了就是一串如果...那么...的逻辑判断。比如如果对象的NDVI大于0.3并且面积大于某个阈值就把它分类为植被这就是一条最简单的规则。多条规则按顺序组合、嵌套、循环就构成一棵规则树也就是规则集。规则集内部包含多个进程Process每个进程包含条件和动作支持顺序执行、逐层细化、循环遍历对象、条件分支等多种运行模式。动作不只是分配类别还可以是合并对象、执行再分割、导出矢量、计算指标等等。正因为动作类型丰富规则集不只是分类工具更像是一套影像分析流程的编程环境。在eCognition的Process Tree面板里你能看到整棵规则树的执行顺序也能随时单步调试。3.2 特征选择与阈值确定的实操方法构建规则集的第一步是想清楚你到底要用哪些特征来区分地物。这一步很多人偷懒上来就对特征列表乱选。我建议按这个思路来先想清地物之间最本质的差异。如果地物A在近红外波段显著高于B优先选近红外均值如果A边缘光滑、B边缘毛糙那就考虑形状或纹理特征。我在实际项目中最常用的特征大概分四类光谱特征各波段均值、标准差、比值以及NDVI、NDWI、亮度等衍生指数形状特征面积、长宽比、密度、形状指数、边界长度纹理特征GLCM同质性、对比度、熵等层次特征与父对象、子对象、相邻对象的关系。eCognition的Feature View可以很直观地查看每个对象的特征值分布。我常用Feature Space Optimization自动评估哪些特征对区分类别最有帮助然后人工复核一遍。阈值怎么定不要靠猜。最简单实用的办法是在eCognition里分别选中几类地物的典型对象对比它们在某个特征上的取值区间几个对象一看阈值大致就出来了。更正规一点的做法是基于样本做特征统计分析或借助决策树自动切分出合适阈值。另外eCognition支持模糊隶属度你可以用NDVI在0.25到0.35之间渐变这类模糊条件替代一刀切的硬阈值分类结果更自然边缘过渡也更平滑。强烈建议用起来。3.3 规则集的调试为什么你的规则过拟合规则集最大的坑是过拟合到你选的那几个标准对象上。盯着三五个典型对象调出来的阈值放到整幅影像上往往大面积错分。原因很简单你选的对象是标准件真实地物有太多变体。我自己就栽过跟头。做城市建筑提取时根据几个典型平顶建筑把长宽比大于2且面积大于500作为建筑判定条件结果一整跑很多长条形厂房屋顶被漏掉因为面积远小于500。后来把条件放宽成面积大于200且长宽比大于1.5再加一条与道路距离的约束漏分才拉回来。所以调试规则集必须遵循多样性原则在影像不同区域挑不同表现的对象来检验阈值别反复看同一块地方。另一个技巧是善用叠加显示。把分类结果半透明叠加到原始影像上逐步缩放到错分区域反查是哪条规则误伤了它。规则集的调试不是一次到位的事分割参数变了、影像区域换了规则就要重新校准。很多人说eCognition难难的不是软件操作而是这一步——规则调试需要大量的耐心和人工经验积累。4. 机器学习集成让eCognition从按规则办事到自己学特征4.1 eCognition中的机器学习算法支持情况eCognition 9.0把机器学习的门槛降了下来在软件里可以直接调用K近邻KNN、支持向量机SVM、决策树、随机森林和贝叶斯分类器等算法。这些算法可以单独用也可以和规则集混搭这是eCognition很灵活的地方。拿随机森林来说基本思路是训练出多棵决策树每棵树基于特征的一个随机子集做判断最后投票决定类别。它的优势很突出对特征噪声不敏感、不容易过拟合、能处理高维特征还可以输出特征重要性。做土地覆盖分类这类多类别问题随机森林表现稳定也是我个人的首选。几种算法各有适用场景我在项目里大致是这样取舍的算法优点局限性适合场景KNN原理简单、无需复杂训练特征维度高时检索慢小样本快速试跑、基准对比SVM小样本下分类效果好调参麻烦、大样本速度慢类别少、样本量有限的场景随机森林抗过拟合、支持高维特征训练时间相对长多类别、特征多的主流任务决策树结果可解释、可转规则容易过拟合阈值提炼、规则初筛4.2 样本选择的坑机器学习不是样本越多越好在eCognition里跑机器学习核心步骤是选样本→训练→应用但样本怎么选学问很大。先说一个最常见的误区以为样本越多越好。样本数量确实重要但更重要的是代表性。如果你只在影像右上角选了100个水体对象做样本而左下角的水体含沙量大、颜色偏黄模型很可能把左下角水体漏掉。我的经验是样本选择要从空间分布、光谱变异、类内多样性三个维度去考虑。空间上尽量均匀覆盖全图光谱上把同类地物的不同表现树荫下的草地、阳光直射的草地都收进来类内上要包含边界不典型、形状不规整的对象让模型学到真实世界的样子。另一个问题是类别不平衡。如果影像里建筑占60%、水体只占1%样本比例也照搬这个比例模型会对水体严重不敏感。建议给小类别适当多选样本让模型看到它们。eCognition不会自动做样本重采样这件事必须手工控制。一个实用的参考量是每类样本数量不低于200个对象类别占比小的类型可以适当上浮到与主类接近效果会稳很多。4.3 特征空间优化与分类后处理机器学习分类要吃特征输入。很多人喜欢多多益善把所有特征全塞给模型。但特征多到一定程度不仅引入噪声、增加训练时间还可能带来维度灾难。eCognition的Feature Space Optimization工具就是干这个的它会评估一组特征对类别可分性的贡献筛出高贡献特征。我通常先用它筛出十几个特征作为机器学习的输入训练更稳结果也更容易解释。分类完成后别急着导出先过一遍分类后处理。eCognition常用的后处理动作有合并相邻同类对象Merge Region让图斑整净、清理小面积碎斑把面积小于阈值的对象并入周边主导类别、基于邻域关系做平滑把孤立的岛状对象并入周围类别。这些后处理动作带来的图面改善往往比在特征里多加一百个变量更明显。在eCognition中机器学习这条路的典型操作流程是先做分割然后用样本编辑器给一部分对象打上类别标签在Classification菜单下选择训练对应算法设置特征跑出模型后应用到整幅影像。跑完后的结果还可以继续套规则集做精修两条路互相配合效果最好。5. 实测复盘与避坑清单5.1 一个完整的项目流程梳理为了建立整体概念我拿一个做过的土地利用分类项目为例把从影像到成果的完整流程拆开讲一遍。项目是0.5米分辨率的无人机正射影像目标分类是建筑、道路、植被、裸地、水体五类。第一步导入影像。eCognition支持TIFF、JPEG等常见格式导入时注意勾选坐标信息无人机正射影像拼接完成后一般自带地理参考这一步基本不花时间。第二步多尺度分割。先用SP80、shape0.2、compactness0.5做一次分割整体切成大块对象然后目视检查。重点看三类问题建筑物是否大体独立成对象、道路有没有断成碎段、水体边缘是否光滑。建筑被切成两三块SP要调大道路和裸地并到了一起就要调大shape或减小SP。这一步花的时间通常在半天左右是整套流程里最吃经验的一步但值得慢慢磨。第三步用规则集做快速初分。主要用NDVI分离植被、NDWI分离水体再利用形状特征粗分建筑和道路。这一步不求精细目的是先得到各类别的分布轮廓为后面机器学习提供干净的背景。第四步选样本训练机器学习。在初分结果的基础上用样本编辑器对每类挑代表性对象每类300到500个空间上均匀分布。然后训练随机森林分类器特征输入用前面Feature Space Optimization筛出的十几个特征。第五步应用分类器得到最终分类做后处理合并小碎斑、清除孤立对象、平滑边界。第六步精度评估。用预留的独立样本算误差矩阵看总体精度和Kappa系数。这一步很多人忽略但它是整个流程里最重要的一环不评估就不知道成果能不能用也不知道哪里还需要补样本或调参数。5.2 高分辨率影像分类的常见翻车点跟同行交流多了加上自己的项目教训我总结出高分辨率影像面向对象分类翻车的几个高频节点。第一个是分割尺度不匹配。总有人拿到影像就按默认参数跑分割完全不管影像分辨率和地物尺度。0.5米分辨率下一辆车可能只有几个像素大SP100分割时一辆车绝不可能是独立对象。动手前先问自己目标地物在图上大概占多大像素规模一栋1000平方米的建筑0.5米分辨率约4000个像素SP可以考虑60到100一条2米宽的小路只有几个像素宽必须用更小的SP甚至需要在规则集里专门针对线状地物做一层特殊处理。第二个是把规则集阈值定死在理想对象上。前面说过的过拟合问题这里再次强调特征阈值必须建立在多样本统计基础上不能靠目视一两个对象去量。第三个是训练-应用数据不一致。在一景影像上训练分类器直接用到另一景如果光照、大气条件差异大模型大概率崩掉。跨影像应用时要么补充新影像上的样本重新训练要么做辐射归一化没有第三种偷懒的办法。第四个是忽视对象边界精度。面向对象分类的精度包含类别精度和边界精度两层。有时类别分对了但对象边界与实际地物边距差了好几个像素。这种问题在误差矩阵里不容易暴露但对测绘应用是致命的。所以我反复强调分割后要目视检查边界贴合度必要时微调SP。5.3 我的个人经验与建议最后分享几条个人习惯不一定适合所有人但能帮你少走弯路。一是分割参数不必死磕全局最优。有人花好几天调一组SP想让一幅影像一次分割就完美适配所有地物。与其追求一次分割的完美不如接受分割的不完美用多层次分割和规则集来弥补。多跑几次不同尺度的分割在规则集里组合利用往往比死磕参数更高效。二是规则集和机器学习最好组合用。我的习惯是规则集负责把差异大的类别粗分开机器学习负责把光谱相似的类别细分开。这样既用先验知识兜底又发挥机器学习的特征学习能力。一上来就把所有类别扔给机器学习有些类别会因为缺少先验分界反而学不好。三是善用规则集的批量处理能力。eCognition的规则集可以完整保存这个特性特别适合批量处理。我做过一个几十景无人机影像的项目先在一景影像上把规则集和机器学习模型调好再批量套用到其余影像。套用前一定要抽样验证几张因为不同影像光照可能有差异别偷懒验证过才稳妥。四是精度评估别看总体精度就完事。混淆矩阵里每个类别的生产者精度和用户精度都要看。我见过总体精度90%以上、水体用户精度只有50%的情况说明水体被大量错分进来了。只看总体精度这类问题根本发现不了。把逐类精度当成项目交付的硬指标对成果负责也对你自己负责。