1. 引言
卫星云图常常受到云层干扰,造成信息的大量丢失甚至图像的直接废用 [1]。因此建立一套遥感图像云检测模型成为一项重要的研究工作。
遥感图像云检测技术通常指通过定量分析遥感云图,将云和地物区分的技术 [2]。早期经典的云检测方法大多基于多谱段卫星图像融合技术,根据云在不同谱段下的反照率,选取适当的单一阈值,进行云识别 [3]。该方法至今仍被广泛应用,具有代表性的经典方法有NDVI法、D阈值法等 [4]。
但是目前这些云检测方法大多针对单一类型的遥感数据,而且阈值的选择容易受到季节、纬度、地表类型等影响 [5]。特别地,由于受到气候环境因素,不同时刻、地域、传感器的反射率和亮温不同,阈值也会随之不同,进而难以选择合理的阈值 [6]。这也是云检测方法的难点。
针对这些问题,目前提出了基于卷积神经网络的高分辨率遥感图像云检测方法 [7],获取云特征后采用超像素分割方法进行图像分割,最后将检测结果影像块拼接,完成整幅影像云检测 [8]。这种云检测方法不受光谱范围限制,云检测精度高,误判较少,适合国产高分辨遥感影像云检测。
因此按照这种原理,本文提出一种用马氏距离改进SLIC算法中欧式距离的思路,即设欧氏距离为
,马氏距离为
,改进后的距离即为
,式中
为未知参数。(1)
之后寻找合适的阈值,进行图像的黑白二值化,完成云检测。
本文构造云图数据集,包括300张不同区域、不同时间的云图,经过多次实验,训练出合适的参数,对云层准确率进行了一定的改进。为了方便叙述,设改进前算法为O-SLIC,改进后算法为M-SLIC。
本文的改进用聚类的方法处理了分类的问题,也改善了欧氏距离不适于云图分类的一些问题,提高了图像分割的精度和云图识别的准确率和灵敏度,扩大了云检测算法的使用范围。
2. 欧式距离和马氏距离
2.1. 欧氏距离 [4]
为更加突出马氏距离的优越性,这里先简单介绍一种常用的距离——欧式距离,欧式距离是欧式空间中两点间的普通距离,这里直接推广至n维欧式空间 [9],设y为欧式空间中任意两点,欧式距离的计算公式为
(2)
欧式距离的适用范围限定在正交空间中,对相互独立的变量进行计算才有意义 [10]。本文的研究对象为遥感云图,云和地物在特征空间中作为变量并不相互独立,此时使用欧式距离进行度量会造成很大程度上的误差,故本文引入马氏距离 [11]。
2.2. 马氏距离
马氏距离的计算建立在总体的样本之上,它代表两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度 [11],能考虑到各种特性之间的联系从而排除变量间相关性的干扰 [12]。
设
为n维形式列向量,其中
为行向量,设
为第i个元素的期望值,即
,定义协方差矩阵中的第i,j项为
,则协方差矩阵为
。故马氏距离计算公式为
(3)
3. SLIC算法
SLIC算法是简单的线性迭代聚类算法,属于一种分割算法 [13]。它消除了图像的冗余信息,并大大降低了后续图像处理任务的复杂性,因此广泛应用于图像分割、深度估计、人体姿态评估和目标定位等领域 [14]。
SLIC算法将图像转换到CIELAB色彩空间后,再结合像素的位置坐标(x, y)组成一个五维向量
,然后再以间隔为S的等间距进行种子像素(即聚类中心)的生成,进而自适应寻找具有同类纹理特征的像素点进行聚类,l, a, b表示的是图像的颜色信息,而x, y表示的是图像的空间信息 [15]。
算法对这5维特征向量构造距离度量标准,并对不同的量纲进行归一化,从而对图像像素进行局部聚类,形成紧凑、近似均匀的超像素 [16]。
4. M-SLIC算法
4.1. 改进思路
除为确定每个超像素的大小范围,在图像内均匀分配聚类中心,以最小梯度作为条件进行聚类。而在计算每个聚类中心与邻近像素点的距离时,使用欧式距离会忽略变量间的相关性,而马氏距离能考虑到各种特性之间的联系从而排除变量相关性的干扰,故可利用马氏距离改进欧式距离。
本文以M-SLIC作为改进后算法的名称,以O-SLIC作为未改进算法的名称。
4.2. 算法步骤 [17]
4.2.1. 聚类中心
假设图片共有N个像素点,预分割为K个相同尺寸的超像素,那么每个超像素的大小为
,相邻聚类中心的距离(步长)近似为
。
计算聚类中心
邻域内(一般取n = 3)所有像素点的梯度值,将聚类中心移到该邻域内梯度最小的地方。这样做可以避免聚类中心落在梯度较大的轮廓边界上(噪声点上),以免影响后续聚类效果 [18]。
4.2.2. 距离度量
O-SLIC算法中的距离包括颜色距离和空间距离:对于每个搜索到的像素点,分别计算它和该聚类中心的距离 [19],计算方法如下:
(4)
其中,dC为颜色距离,dS为空间距离,D'为距离度量。NS是类内最大的空间距离,公式为
,确定采样间隔,适用于每个聚类;NC是类内最大的颜色距离,既随图片的不同而不同,也随聚类的不同而不同,所以本文取一个固定常数10来代替。
而根据4.1的改进思路,本文改进了距离的度量公式。故M-SLIC的距离度量G的公式如下:
(5)
4.2.3. 迭代优化
上述步骤不断迭代直到误差收敛,即每个像素点聚类中心不再发生变化。实践发现10次迭代对绝大部分图片都可以得到较理想效果,所以一般迭代次数取10。
5. 实验过程
5.1. 实验数据集
本文搜集300张不同时间段、不同地区的卫星云图(来自“风云2号卫星、葵花卫星”)作为自己的云图数据库。从中选取200张云图作为训练集,剩余的100张云图即为测试集。
本文将训练集和测试集进行人工的云和地物二值化,即云标成白色,地物标成黑色。这样标定过的云图视为真实值,即云和地物的划分都是正确的。
5.2. 准确率、灵敏度和识别率
为了方便解释,本文将人工标定的云图记为A,将计算机识别的云图记为B。
准确率TP:相对于A中云所在位置,B中相应的位置被判别为云的比例;
灵敏度FP:相对于A中地物所在位置,B中相应的位置被判断成云的比例;
TN:相对于A中地物所在位置,B中相应的位置被判别为地物的比例;
FN:相对于A中云所在位置,B中相应的位置被判断成地物的比例。
则云检测技术的识别率:
,其中,
,
(6)
具体程序计算:
分别读取A、B,由于图像已经过二值化处理,故分别提取其中R通道的数据,得到两个500*500矩阵p1,p2,矩阵元素为0或255,比较两个矩阵的元素,利用准确率、灵敏度和云检测技术识别率的定义分别进行计算 [20]。
5.3. 隶属度和二值化
卫星云图中云和地物可以通过R、G、B的数值来区分。因为一幅图的R、G、B像素为256,按照粗略得二分类(云和地物),本文定义每个分割块中R、G、B小于128的像素点占整个分割块总像素点的比例为每个分割块的隶属度,即每个超像素的隶属度。然后利用这些隶属度画出直方图并连接各柱状的中心点进行曲线拟合,寻找曲线谷底对应的数值作为划分云和地物的阈值 [21]。
当隶属度大于此阈值时,本文把该超像素确定为云,使之变成白色;反之,则为地物,使之变成黑色。最终得到一个二值化图,即云和地物区分后的图像 [22]。
5.4. ROC曲线
本文定义ROC曲线的x轴对象为灵敏度,y轴对象为准确率。然后根据定义的隶属度,范围在0~1之间,取步长为0.01,由此可以算出每一个隶属度对应的图像准确率和灵敏度,从而画出ROC曲线 [23]。ROC曲线的面积代表了算法的性能,面积越接近1,算法的效果越好。
ROC曲线的左上角是最佳的诊断界限值,TN和FN最小,本文定义此点为最优分类点,越靠近(0, 1)点,分类效果越好。
5.5. 参数α和M-SLIC的云识别率
ROC曲线的面积可以作为参数的衡量指标,也可以求出M-SLIC的识别率,从而与O-SLIC进行对比。通过调参,计算训练集中每张图片每个参数的ROC曲线面积,得到参数的最终训练值α = 0.45。
然后将此参数运用到测试集中,计算对应的每个云识别率和ROC曲线的面积,求取平均值即为对应的结果。
6. 实验结果
6.1. 图像分割和二值化效果对比
由图1和图2的红框对比可以看出,M-SLIC比O-SLIC算法分割云和地物的效果更细致,同一块超像素的颜色更相近,便于后续的黑白二值化处理。
由图3和图4与云图的蓝框对比,可以地看出M-SLIC算法的黑白二值化更贴近云图。
6.2. ROC曲线对比
M-SLIC与O-SLIC算法的ROC曲线对比图如图5所示。由图5可得,M-SLIC算法的ROC曲线面积明显大于O-SLIC算法,而且最优分类点更加偏向(0, 1),因此可以得出M-SLIC算法在云识别上的准确度更好。
Figure 1. O-SLIC algorithm segmentation effect
图1. O-SLIC算法分割效果
Figure 2. M-SLIC algorithm segmentation effect
图2. M-SLIC算法分割效果
Figure 5. Comparison of ROC curves before and after improvement
图5. 改进前后ROC曲线对比
6.3. 结果对比和分析
O-SLIC算法与M-SLIC算法阈值、ROC曲线面积和云识别率的平均值对比如表1所示,可以得出M-SLIC算法的阈值、ROC曲线面积和云识别率均高于O-SLIC。
Table 1. Comparison of O-SLIC and M-SLIC algorithm results
表1. O-SLIC和M-SLIC算法结果对比
其中,测试集中O-SLIC和M-SLIC算法的云识别率的箱线图如图6所示,M-SLIC算法云检测的识别率大于O-SLIC的云检测识别率,说明对于云图数据库中的大部分图像来说,M-SLIC算法相比于O-SLIC算法有改良效果。
Figure 6. Box plot comparison of O-SLIC and M-SLIC cloud recognition rates
图6. O-SLIC和M-SLIC云识别率的箱线图对比
除此之外,M-SLIC算法在本文数据集中的平均识别率已经达到了87.5%以上,有些云图识别率甚至达到了90%以上,说明M-SLIC算法的效果较好。
7. 结束语
本文利用马氏距离对SLIC算法的欧式距离进行改进,提高聚类效果,更加准确地划分云的边界,提高云检测的准确性。
本文在2.1和2.2中对比了欧式距离和马氏距离,肯定了马氏距离在云检测算法的优势;在4.1提出了M-SLIC算法的改进思路,在4.2介绍了M-SLIC算法的步骤;其中有一个参数α和阈值待确定,参数训练方法于5.5提到,阈值训练方法于5.3提到,训练的衡量指标于5.4提到;在5.2还介绍了准确率、灵敏度、云检测识别率等几个重要概念;最后,在6.1对比了M-SLIC算法和O-SLIC算法的分割效果和二值化,在6.2对比了两个算法的ROC曲线,在6.3对比了两个算法的阈值、ROC曲线面积和云检测的识别率,充分体现了M-SLIC相比于O-SLIC算法的优势。
实验结果表明,M-SLIC算法的阈值比O-SLIC更大,误识别率更小;ROC曲线面积更大,最优分类点也更靠近(0, 1)点;云识别率更大;所以算法性能更好。
致谢
我们首先要感谢我们的导师张正军老师。在本篇论文的完成过程中,张老师对我们提出了很多建设性的指导意见,细心地和我们讲解论文中出现的问题,给予专业上的指导,信心上的鼓励。在此我们由衷地向张老师表示感谢。
同时我们也要感谢学校和学校的领导给我们创造的良好的学习环境,让我们能够在良好的氛围中完成论文。感谢同学和家人在这期间的大力支持。同时对国家科学基金资助者、给予转载和引用权的文献的所有者,表示感谢!
基金项目
南京理工大学本科生科研训练“百千万”计划立项资助,项目编号为202010288134Y;大规模互补约束数学规划的信赖域算法研究及应用(项目批准号:11671205)。