遥感图像处理基础知识
遥感图像处理基础知识
第一章 认识图像
图像的概念
图像就是所具有视觉效果的画面,作为一种客观对象的表达方式,是我们最常用的信息载体,也是我们最主要的信息源。(一切具有空间排列关系的数据皆为图像!)
遥感图像中的关键信息
基本信息:行数、列数、波段数、数据文件类型、数据储存方式、数据类型
像素信息:像素数据类型、像素位深、取值范围、统计特性、起始位置
空间信息:投影信息、仿射变换、地面控制点、有理函数
光谱信息:波段信息
储存信息:间隔方式、波段顺序、压缩方式、是否分块、分块索引、金字塔
其它信息:时间、地点、色彩空间、传感器信息
第二章 地图投影
大地水准面
大地水准面是指与平均海水面重合并延伸到大陆内部的水准面。是正高的基准面。
国家大地坐标系
北京54、西安80、CGCS2000
地图投影的方式
按投影的变形性质分类
- 等角投影:投影面上某点的任意两方向线夹角与椭球面上相应两线段夹角相等,角度变形为零。
- 等积投影:投影面与椭球面上相应区域的面积相等,即面积变形为零。
- 任意投影:投影图上,长度、面积和角度都有变形,它既不等角又不等积。
- 等距投影:在特定方向上没有长度变形的任意投影,属于任意投影。
按投影方式分类
一、几何投影
- 按辅助投影面的类型划分
- 方位投影:以平面作为投影面的投影。
- 圆柱投影:以圆柱面作为投影面的投影。
- 圆锥投影:以圆锥面作为投影面的投影。
- 按辅助投影面和地球体的位置关系划分
- 正轴投影:辅助投影平面与地轴垂直,或者圆锥、圆柱面的轴与地轴重合的投影。
- 横轴投影:辅助投影平面与地轴平行,或者圆锥、圆柱面的轴与地轴垂直的投影。
- 斜轴投影:辅助投影平面的中心法线或圆锥、圆柱面的轴与地轴斜交的投影。
- 按辅助投影面与地球面的相切或相割关系划分
- 切投影:辅助投影面与地球(椭球)面的相切。
- 割投影:辅助投影面与地球(椭球)面的相割。
二、条件投影:是在几何投影的基础上,根据某些条件,用数学解析法确定球面与平面之间点与点的函数关系。
方位投影、圆柱投影、圆柱投影、多圆锥投影、伪方位投影、伪圆柱投影、伪圆锥投影。
常见地图投影的变形特点
- 圆锥投影的各种变形均是纬度j 的函数,与经度λ无关,同一纬线上的变形是相同的。
- 方位投影的各种变形均是天顶距Z的函数,与方位角α 无关。同一等高圈上的变形是相同的。
- 圆柱投影的各种变形均是纬度j 的函数,与经度λ无关。同一纬线上的变形是相同的。
第三章 图像还原
辐射纠正
原因-辐射误差
传感器存在光学误差。
大气对电磁波传输存在影响,如吸收、反射、散射和投射。
地形起伏也会造成辐射误差。
其它原因:检测器的干扰、故障等。
校正方法
大气校正
统计学方法:利用野外实测值和卫星观测值对比确定校正量。
内部平均法、经验线性法
辐射传递方程计算法:测量大气参数,利用科学公式计算校正量。
波段对比法:利用不容易被大气干扰的波段的值来校正其它波段。
回归分析法、直方图法
地面校正
公式法
几何纠正
几何变形
- 传感器成像方式
- 传感器外方位因素
- 地形起伏
- 地球曲率
- 大气折射
- 地球自转
分类:系统性和非系统性
- 系统性几何变形是有规律和可以预测的,比如扫描畸变、地球曲率引起的图像变形、地球自转的影响等
- 非系统性几何变形是不规律的,它可以是遥感器平台的高度、速度和姿态等的不稳定等等,一般很难预测
粗纠正
基于地物点、像点、投影中心的共线方程做粗纠正。
由于卫星信息的保密性,多用有理函数模型代替实际成像模型。
精纠正
为什么
- 粗纠正处理了传感器成像方式、地球曲率、地球自转等因素造成的系统性误差,但是对卫星姿态、位置、速度不同造成的非系统性误差没有处理。
- 一个地物在不同的图像上,位置要一致,才可以进行后续图像处理。
- 如果同一地区的不同时间的影像,不能把它们归纳到同一个坐标系中去,图像中还存在变形,这样的图像是不能进行融合、镶嵌和比较的,是没有用的。
步骤
确立纠正的多项式模型。
选择若干个控制点,利用有限个地面控制点的已知坐标,求解多项式的系数。
一般来说GCP的数量至少要大于(n+1)(n+2)/2,n是多项式的阶数
将各像元的坐标带入多项式进行计算,便可以求得纠正后的坐标。
位置进行变化,同时进行灰度重采样。
重采样方法:最邻近点法、双线性内插法、三次卷积内插法
精度评定。
重采样
最近邻点法: 用与像元点最近的像元灰度值作为该像元的值
双线性内插法 :用像元点最近的四个像元值作内插
三次卷积内插法 -:用基于计算点周围相邻的16个点进行内插
第四章 图像运算及变换
图像运算
代数运算
- +:多幅图像求平均值,降低加性噪声;生成图像叠加效果
- -:去除某一幅图像中不需要的加性图案,如背景阴影;求同一场景两幅图像间的变化;分离混合图像;去除叠加图案
- ×:掩膜
- ÷:扩大不同地物的差异;去除阴影
逻辑运算、几何运算
图像变换
K-L变换
对图像进行正交投影变换,使得数据的互相相关性最低
主成分分析(K-L变换的一种)
正交变换,特征降维,使得变换后的各维度互不相关且能表征最多的信息。(投影后数据间的方差越大越好)
实质上是对原图像信息量的再分配。•图像大小不变•图像波段变少
主成分分析作用
- 提取地物目标总体反射强度 / 去除噪声
- 增强动态变化信息
- 提高高光谱遥感图像分类效率
- 减少遥感图像储存数据量
- 波段降维、去相关
傅里叶变换
傅里叶变换把信号(函数)从时(空)域转换到频率域
图像傅里叶变换是一种二维离散函数的傅里叶变换形式, 得到频率谱图
频率谱图表达了构成原始图像的各单频信号,及其频率、 方向和振幅
频率:像元到中心点的距离。方向:中点到像元点的指向。振幅:像元点的属性值。
傅里叶变换给图像提供了全新的视角(频率域),可以方便 的针对特定频率的信号进行针对性处理
提取边缘 - 只保留高频信息。去除噪声:只保留低频信息。
小波变换
用“小波”模拟原始信号
小波的变换结果同时包含时频信息,能将时域和频域结合起来描述观察信号 - 时频分析法
具有多分辨率分析的特点,时间窗和频率窗都可以改变
作用:图像压缩、图像融合、图像去噪等
缨帽变换
一种经验性的多波段图像的正交线性变换,提取植被相关信息。
第五章 图像增强
实质
扩大目标与背景的差异,突出目标,抑制背景,不会增加原始图像的信息量。
直方图变换
图像反转:观察暗部细节
线性拉伸:对比度更大,视觉效果更饱满
对数变换:扩展低亮度区,压缩高亮度区
三角波 变换等
直方图均衡化
直方图均衡化是将原图像的直方图通过变换函数变为均匀的直方图
特点:自动的增加整个图像的对比度;增强效果不易控制,处理的结果总是得到全局均衡化的直方图。
直方图规定化
直方图规定化是指使一幅图像的直方图变成规定形状的直方图而对不想进行变换的增强方法。
直方图规定化的原理是对两个直方图都做均衡化,变成相同的 归一化的均匀直方图,以此均匀直方图为媒介,再对参考图像做均衡化的逆运算。
特点:变换结果和规定图像色调分布趋于一致。
卷积滤波
图像中常见的噪声
- 加性噪声:与图像信号强度不相关。
- 乘性噪声:与图像信号相关,随图像信号的变化而变化。
- 量化噪声:数字图像主要的噪声源,表示数字图像与原始图像的差异。
- 盐和胡椒噪声:黑图像上的白点,白图像上的黑点。
二维卷积
平滑滤波器
均值滤波器:模糊化和减少噪声,邻域内像素平均灰度值取代原灰度值,模糊边缘,去除不相干细节
中值滤波器:像素值用该邻近区域像素的 “中间值” 代替,适用于椒盐噪声
锐化滤波器
目的:突出图像中细节或增强被模糊的细节。
一阶微分和二阶微分区别
- 一阶微分产生的边缘宽(如:沿斜坡很长一段非0)
- 一阶微分对灰度阶跃反应强烈
- 二阶微分对细节反应强烈如细线、孤立点
- 对图像增强来说,二阶微分比一阶微分好一些,因为形成增强细节的能力好一些
特点:常数或变化平缓的区域,结果为0或很小,亮度降低了。边缘被增强。整体对比度降低。可能出现负值。
第六章 图像融合
概念
图像融合是用特定的算法将两幅或多幅图像综合成一幅新的图像。利用两幅图像在时空上的相关性及信息上的互补性融合,的结果能够同时呈现多幅图像的特征,方便后续图像处理。
图像配准
图像配准是是像素级图像融合的先决条件。
确定空间变换模型——求解变换模型参数。
IHS变换法
I分量与空间纹理细节相关,H分量和S分量与人类感受色彩的方式一致。
主成分变换(PCA)融合
主要针对超过三个波段的影像融合。
步骤:1.将N个波段的地分辨图像进行主成分变换。2.将单波段的高分辨率图像经过灰度拉伸,与主成分变换后的第一分量图像匹配。3.用单波段的高分辨率图像像代替第一分量图像。4.经过主成分逆变换还原到原始空间。
优势:细部特征更加清晰,光谱信息更加丰富。可以对3个波段以上的多光谱图像进行融合。
局限性:高分辨率图像与第一分量图像含义不同,融合得到的图像在空间分辨率和光谱分辨率上会有所变换。光谱信息的变化仍然存在。
小波变换融合
- 首先对两图像进行配准 。
- 对低分辨率的多光谱数据进行重采样和高分辨率的空间分辨率一致 。
- 对配准后的多光谱和全色图像分别进行小波正变换,获得各自的低频图像和高频细节/纹理图像。
- 用SPOT5多光谱的低频图像替代全色的低频图像 。
- 用替换后的多光谱低频图像与全色的高频细节进行小波逆变换得到融合结果图像。
第七章 纹理分析
纹理分析方法
统计分析法、模型分析法、结构分析法、空间/频率域联合分析
灰度共生矩阵
通过研究灰度的空间相关特性来描述纹理的常用方法。
灰度游程长度法
模型分析法
自相关模型法
当纹理较粗时,ρ(d)随d的增加下降速度较慢;当纹理较细时,ρ(d)随d的增加下降速度较快。
边界频率分析法
基于分形维数的分析法
结构分析法
在已知纹理基元的情况下,根据图像纹理小区域内的特征及其周期性排列的空间几何特征和排列规则进行纹理分析。
空间/频率域联合分析法
依据傅立叶频谱峰值所占的能量比例将图像分类。
各类方法比较
基于统计的方法:原理简单,实现方便,能反映图像的很多特征,但是计算量较大,也较易受到噪声的影响。
基于模型的方法:效果较好,易于实现纹理分类与合成的一体化,但计算量大,自然纹理也很难用单一模型表达。
基于结构的方法:研究重点是纹理元的相互关系和排列规则,仅适用于规则纹理,对于自然纹理较难取得满意的效果;特征的选取对图像本身要求较高,在实际中不容易见到。
基于空间/频率域联合分析法:利用在空间域和频率域同时取得较好局部化特性 的滤波器对纹理图像进行滤波,从而获得较为理想的纹理特征,计算量较大。
纹理应用
如何选择一种合适的纹理特征提取方法,使得相似的纹理具有相似的特征矢量(矢量间距离小),而不同类纹理具有较大的特征矢量(矢量间距离大),是正确识别和区分目标的关键。
为什么要灰度级压缩
主要原因:增强统计性。附加收益:降低了计算量。
特征值的选取
- 可区分性:对于属于不同类别的对象来说,它们的特征值应具有明显的差异。
- 可靠性:相同对象的特征值应比较相近。
- 独立性:所用的各特征之间应彼此不相关。虽然相关性很高的特征可以组合 起来(例如取均值)以较少噪声干扰,它一般不应该作为单独的特征使用。
- 数量少:模式识别系统的复杂度随系统的维数(特征的个数)迅速增长。
第八章 非监督分类
概念
是计算机根据图像数据中所体现的不同特征,把不同类别的目标自动区别开来的图像分类处理方法。
不需要先验知识、全自动处理、端到端算法
原理
根据像元之间特征的相似程度,将相似度高的像元归为一种类别
目标
费希尔最优准则(Fisher):类内方差最小 & 类间方差最大
方法
简单集群分类方法、K-均值法、迭代自组织数据分析技术方法
简单集群分类方法
根据直方图的分布特征找出各峰值区,以谷底为界进行划分,得到的落于一个单峰区域内的样本就被划分为同一类,称为单峰子类。(若样本数据多维,可先进行K-L变换)
K-均值聚类
原理
样本越相似,在特征空间中的距离就越短
流程
- 确定类别数
- 计算类中心(首次执行时类中心随机确定)
- 计算所有像元到所有类中心的距离
- 按最近距离原则对每一个像元进行归类
- 据Condition选择重复上述步骤2-4, 或退出
- 类中心不再变化时(或所有像元归属不再发生变化),得到最终分类结果
ISODATA算法
在K-均值聚类中增加了分裂、合并操作。
类内方差大了(类内部不聚集),就分裂;类间方差小了(类别间很相近),就合并
非监督分类方法优缺点
优点
- 不需要预先对待分类区域有广泛的了解
- 需要较少的人工参与,人为误差的机会减少
- 小的类别能够被区分出来
缺点
- 盲目的聚类
- 难以对产生的类别进行控制,得到的类别不一定是想要的类别
- 计算速度慢
第九章 监督分类
是以建立统计识别函数为理论基础,依据典型样本训练方法进行分类的技术。
主要步骤
- 选择训练样本区
- 确定类别数
- 对每类样本选择足够多的有代表性的样本
- 分类前分析样本区质量
- 选择合适的分类算法
- 分类结果的精度评估
选择训练样本区
- 准确性——确保选择的样区与实际地物的一致性
- 代表性——考虑到地物本身的复杂性,所以必须在一定程度 上反映同类地物光谱特性的波动情况
- 统计性——选择的训练样区内必须有足够多的像元
选择合适的分类算法
距离判别函数和距离判别规则
- 最小距离分类法
- 平行六面体分类法
- 最近邻分类算法
概率判别函数和贝叶斯判别规则
- 最大似然分类法
分类结果的精度评估
混淆矩阵
精准率=生产者精度,召回率=用户者精度
监督分类特点
- 避免出现不必要的分类
- 可以控制训练样本的选择
- 分类结果
- 训练结果主观性较高
- 训练花费较多人力物力
制约图像分类精度的因素
遥感图像的制约
地物本身的复杂性(同物异谱、同谱异物),传感器性能有限
分类方法的制约
单点分类,地物空间结构的信息没有利用
非监督分类与监督分类的区别
- 非监督分类不需要先验知识,监督分类需要
- 监督分类需要带标签的训练样本,非监督分类不需要
- 适用场景不同,监督分类多用于分类、预测场景,非监督分类多用于探索数据的内在结构
- 算法不用,监督分类有LDA、神经网络等,非监督分类有K-Means等。
第十章 图像分割
基本策略
- 根据图像像素灰度值的不连续性
- 先找到点、线(宽度为1)、边(不定宽度) ——找边界
- 再确定区域
- 根据图像像素灰度值的相似性
- 通过选择阈值,找到灰度值相似的区域——找区域
- 区域的外轮廓就是对象的边
边界分割法
阈值分割法
适用于物体与背景有较强对比的情况,这种方法总可以得到封闭且连通区域的边界。
分类
- 通过直方图得到阈值(直方图上的某个特定点作为分界线,如谷底)
- 基本全局阈值法
- P参数法
- 最优准则法(组内方差越小,组间方差越大)
- 像素集合的区域增长
- 区域分裂与合并
分水岭算法
图像像素的灰度值 -> 该点的海拔高度
主要目标是找出分水线
基本思想:在每个区域最小值的位置上打一个洞并且让水以均匀的上升速率从洞中涌出,从低到高淹没整个地形
当处在不同的汇聚盆地中的水将要聚合在一起时,修建大坝阻止聚合,大坝即为图像的边界
第十一章 分类后处理
分类编码、赋色
遥感影像经分类后形成的专题图,用编号、字符、图符或颜色表示各种类别
众数分析
用于去除单个类中的虚假像元;利用模板运算实现,模板中心像元被赋值为模板窗口中占多数的像元的值
少数分析
模板中心像元将被赋值为模板窗口中占少数的像元的值
类聚块
类过滤
类合并
类统计
栅格噪声去除
栅格图斑矢量化
第十二章 深度学习遥感图像分类
基本原理
卷积计算特征 → 迭代计算参数 → 预测趋近真值
人工神经网络优化方法
随机梯度下降法、动量法、自适应梯度法、自适应动量法
优势
- 卷积运算:有利于刻画目标图像特征
- 深层次神经网络结构:有利于刻画复杂非线性映射关系
- 大数据:有利于学习目标的有效特征
CNN和ANN的区别
结构差异:
ANN:人工神经网络通常指的是全连接网络,其中每个神经元与前一层的所有神经元相连接。
CNN:卷积神经网络引入了卷积层和池化层。
参数数量:
CNN较ANN参数数量更少。
应用场景:
ANN:由于其结构的通用性,ANN可以应用于各种类型的数据和任务,如分类、回归等。
CNN:特别适用于处理图像数据。在图像识别、图像分类、物体检测等领域,CNN展现了卓越的性能。
训练数据:
CNN需要的训练数据较ANN更多。
CNN各层间的权重共享,ANN不共享。
第十三章 形态学处理
基本思想
用具有一定形态的结构元素探测目标图像,通过检验结构元素在图像目标中的可放性和填充方法的有效性,来获取有关图像形态结构的相关信息,进而达到对图像分析和识别的目的。
腐蚀
把结构元素B看作为一个卷积模板,每当结构元素平移到其原点位置与目标图像A中那些像素值为“1”的位置重合时, 就判断被结构元素覆盖的子图像的其它像素的值是否都与结构元素相应位置的像素值相同;只有当其都相同时,就将结果图像中的那个与原点位置对应的像素位置的值置为“1”,否则置为0。
结构元素中的任何元素不能超出目标图像的范围。
膨胀
求结构元素S关于其原点的反射集合。
每当结构元素Ś在目标图像A上平移后,结构元素Ś与其覆盖的子图像中至少有一个元素相交时,就将目标图像中与结构元素Ś的原点对应的那个位置的像素值置为 “1”,否则置为0。
允许结构元素中的非原点像素超出目标图像范围。
对偶性
对目标图像的膨胀运算,相当于对图像背景的腐蚀运算。
对目标图像的腐蚀运算,相当于对图像背景的膨胀运算。
开运算
先进行腐蚀运算,然后再进行膨胀运算。
作用
- 平滑物体的轮廓
- 使狭窄的链接断开
- 消除细的突出物或毛刺
闭运算
先进行膨胀运算,然后再进行腐蚀运算
作用
- 平滑物体的轮廓
- 弥合狭窄的间断,消除小的孔洞,填补轮廓线中的断裂
开运算具有磨光图像外边界的作用,而闭运算具有磨光物体内边界的作用。
目标击中选择
边界提取
用原图像减去腐蚀后的图像, 删除了内部点,留下了边界像素。
区域填充、连通分量提取、骨架提取
第十四章 数字地形分析
基本概念
数字高程模型
- 规则格网DEM
- TIN
- 基于点的DEM
- 和基于等高线的DEM
地形参数计算
坡度、坡向、曲率、地形起伏度、地表粗糙度、地表切割深度
地形特征分析
地形特征点
山顶点(peak)、凹陷点(pit)、脊点(ridge)、谷点(channel)、鞍点(pass),平地点(plane)等
山脊线和山谷线提取
- 基于图像处理技术的原理
- 基于地形表面几何形态分析原理
- 基于地形表面流水物理模拟分析原理的算法
- 基于地形表面几何形态分析和流水物理模拟分析相结合
- 平面曲率与坡位组合法
流域分析
格网DEM实现流域地形分析的步骤:
- DEM洼地填充
- 水流方向确定
- 水流累积矩阵生成
- 流域网络提取
可视性分析、渲染图的制作、填/挖、地形变化
编程相关
通用
GDALDriver* poDriver;
GDALDataset* poSrcMss = (GDALDataset*)GDALOpen(mssPath, GA_ReadOnly);
GDALRasterBand* pBandR = poSrcMss->GetRasterBand(3);
GDALRasterBand* pBandG = poSrcMss->GetRasterBand(2);
GDALRasterBand* pBandB = poSrcMss->GetRasterBand(1);
图像融合
// 此区域需要自己实现
for (int i = 0; i < panYSize; i++) {
// 逐行读取各波段数据
pBandR->RasterIO(GF_Read, 0, i, panXSize, 1, pR, panXSize, 1, GDT_Float32, 0, 0);
pBandG->RasterIO(GF_Read, 0, i, panXSize, 1, pG, panXSize, 1, GDT_Float32, 0, 0);
pBandB->RasterIO(GF_Read, 0, i, panXSize, 1, pB, panXSize, 1, GDT_Float32, 0, 0);
pan->RasterIO(GF_Read, 0, i, panXSize, 1, panI, panXSize, 1, GDT_Float32, 0, 0);
for (int j = 0; j < panXSize; j++) {
// 对pan数据进行归一化处理
float pINorm = (panI[j] - panMin) * pixelDepth / (panMax - panMin); //pixelDepth=255
// 如果需要,也对RGB数据进行归一化处理
float rNorm = (pR[j] - RMin) * pixelDepth / (RMax - RMin);
float gNorm = (pG[j] - GMin) * pixelDepth / (GMax - GMin);
float bNorm = (pB[j] - BMin) * pixelDepth / (BMax - BMin);
// 将RGB转换为HIS
float h, s, i;
RGB_HIS(rNorm, gNorm, bNorm, h, i, s);
// 用归一化后的pan数据替换I分量
i = pINorm;
// 将HIS转换回RGB
float rNew, gNew, bNew;
HIS_RGB(h, i, s, rNew, gNew, bNew);
// 将新的RGB值赋值回数组
pR[j] = rNew;
pG[j] = gNew;
pB[j] = bNew;
}
// 将修改后的数据逐行写入输出波段
pwBandR->RasterIO(GF_Write, 0, i, panXSize, 1, pR, panXSize, 1, GDT_Float32, 0, 0);
pwBandG->RasterIO(GF_Write, 0, i, panXSize, 1, pG, panXSize, 1, GDT_Float32, 0, 0);
pwBandB->RasterIO(GF_Write, 0, i, panXSize, 1, pB, panXSize, 1, GDT_Float32, 0, 0);
}
GDALClose(poSrcMss);
GDALClose(poSrcPan);
GDALClose(pwDataset);
delete[] pR; delete[] pG; delete[] pB;
delete[] pH; delete[] pS; delete[] panI;
cout << "融合成功";
return 0;
}
灰度共生矩阵计算
//计算四个方向的灰度共生矩阵
int firstpoint = 0, secondpoint = 0;
switch (sel_Angle)
{
case 0:
//0:东西方向(0°)
for (int i = 0; i < Ori_height; i++)
{
for (int j = 0; j < Ori_width - glcm_stride; j++)
{
firstpoint = histImage[i * Ori_width + j];
secondpoint = histImage[i * Ori_width + j + glcm_stride];
glcm[firstpoint * glcm_class + secondpoint]++;
}
}
break;
case 1:
//1:东北-西南方向(45°)
for (int i = 0; i < Ori_height - glcm_stride; i++)
{
for (int j = glcm_stride; j < Ori_width; j++)
{
firstpoint = histImage[i * Ori_width + j];
secondpoint = histImage[(i + glcm_stride) * Ori_width + j - glcm_stride];
glcm[firstpoint * glcm_class + secondpoint]++;
}
}
break;
case 2:
//2:南-北方向(90°)
for (int i = 0; i < Ori_height - glcm_stride; i++)
{
for (int j = 0; j < Ori_width; j++)
{
firstpoint = histImage[i * Ori_width + j];
secondpoint = histImage[(i + glcm_stride) * Ori_width + j];
glcm[firstpoint * glcm_class + secondpoint]++;
}
}
break;
case 3:
//3:西北-东南方向(135°)
for (int i = 0; i < Ori_height - glcm_stride; i++)
{
for (int j = 0; j < Ori_width - glcm_stride; j++)
{
firstpoint = histImage[i * Ori_width + j];
secondpoint = histImage[(i + glcm_stride) * Ori_width + j + glcm_stride];
glcm[firstpoint * glcm_class + secondpoint]++;
}
}
break;
default:
cout << "空间位置关系选项出错!";
return 1;
}
计算混淆矩阵
栅格图斑聚类
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
pos = i * cols + j;
pos_left = pos - 1;
pos_up = (i - 1) * cols + j;
if (i == 0 || j == 0) {
if (i == 0 && j == 0) pDataout[pos] = freeflag++;
else if (i == 0 && j != 0) {
if (pData[pos] != pData[pos_left]) pDataout[pos] = freeflag++;
else pDataout[pos] = pDataout[pos_left];
}
else if (i != 0 && j == 0) {
if (pData[pos] != pData[pos_up]) pDataout[pos] = freeflag++;
else pDataout[pos] = pDataout[pos_up];
}
}
else {
if (pData[pos] != pData[pos_left] && pData[pos] != pData[pos_up]) pDataout[pos] = freeflag++;
else if (pData[pos] == pData[pos_left] && pData[pos] != pData[pos_up]) pDataout[pos] = pDataout[pos_left];
else if (pData[pos] != pData[pos_left] && pData[pos] == pData[pos_up]) pDataout[pos] = pDataout[pos_up];
else if ( pData[pos] == pData[pos_left] && pData[pos] == pData[pos_up]){
if (pDataout[pos_left] == pDataout[pos_up]) pDataout[pos] = pDataout[pos_left];
else {
pDataout[pos] = pDataout[pos_up];
for (int ii = 0; ii <= i; ii++) {
for (int jj = 0; jj < cols; jj++) {
if (pDataout[ii * cols + jj] == pDataout[pos_left])
pDataout[ii * cols + jj] = pDataout[pos_up];
}
}
}
}
}
}
}