王菊花,张建华,周 诠
(中国空间技术研究院西安分院,西安 710000)
云的角色是多重的。一方面,通过能量交换过程,云能够对地球的保温和降温发挥至关重要的作用,这使地球的温度与人类的适宜生存环境相匹配[1-2]。另一方面,根据统计数据,云大致上可以覆盖全球天空的百分之六十[3]。驱使气候变化的主要因素有多种,其中最主要的不确定性因素就是云,因此人们通常不太可能获得一幅完全没有云的遥感图像。很多的卫星遥感图像中都包括被云层挡住的不可见区域,从而导致了局部地物的信息产生缺失现象。这显然会对后续图像的分析与理解操作产生影响,从而引起数据利用率的显著下降[4]。因此,对于遥感图像的数据处理过程而言,云检测已经凸显为必须首先攻克的关键技术问题之一。
目前研究人员已经提出了若干种云检测方法。主要方法包括:利用云在可见光、热红外等波段具有的光谱特征、云与下面地物的纹理特征差异、云的低频率特性[5-6],利用云的光谱、频率、纹理等特性结合阈值法、统计分析法、聚类法、HIS模型法、深度学习法、神经网络法等技术进行云检测[7-16]。
频率结合阈值法和光谱结合阈值法是两种有代表性的结合阈值法。其中,频率结合阈值法的原理主要是利用了云所具有的低频性质。这种方法结合傅里叶变换和小波分析等手段可以获得图像的低频数据,并进一步实现云检测。但是,因为一般需要采用多层小波变换来消除地面的低频信息所产生的干扰,所以云检测的效率显著降低。光谱结合阈值法的原理主要是利用了云对可见光波段所具有的强反射性质。这类算法的一个局限性是对阈值比较敏感。同一颗卫星的数据随着天气和时间等因素的变化而变化,这将引起检测阈值的急剧变动,因而导致这类算法的局限性愈加严重。
本文提出一种灰度阈值结合纹理特征的方法。根据卫星轨道高度及云图分辨率完成图像分块,统计子块图像的灰度阈值,产生灰度共生矩阵,计算二阶矩,通过和参数加权处理等,完成了星载云检测算法的实现。
云检测算法流程图如图1所示。
首先根据卫星轨道高度和云图分辨率,对图像进行分块,每块大小为HEIGHT行WIDTH列;其次统计分块内图像像素的灰度,当灰度数值大于灰度阈值value的记为高像素灰度,若高灰度区小于图像块的3/4则为非云,否则继续其它特征值的计算;分别计算图像块均值和方差,通过均值方差计算M1;产生分块图像的灰度共生矩阵,根据矩阵计算特征值,具体计算方法详见文献[9];通过修正系数进行加权计算得到M2数值;最后判断M2数值,正数则该图像块判决为云,否则判决为非云。
某卫星图像数据位宽为12比特,每行图像数据长度为1058(32+1024+2),其中32个辅助数据,1024个图像数据,两个云判决标识填充数据。用现场可编程门阵列(field programmable gate array,FPGA)实现卫星图像的云检测算法,首选确定图像分块大小为512行512列,灰度阈值为3276,每行输入图像数据分成两个图像块并行进行云检测。卫星图像输入512行结束后,前两个图像分块的云检测标识,填充在前512行图像,每行图像的填充云检测标识位置,第一个位置填充第一块图像云检测标识,第二个位置填充第二块图像云检测标识。
图1 云检测算法流程图Fig.1 Flow chart of cloud detection algorithm
云检测功能FPGA实现[17]的原理图如图2所示,主要包括6个模块,分别是输入(first in first out,FIFO)缓存模块、时钟处理模块、双倍速率同步动态随机存储器 (double data rate,DDR)用户接口模块、云检测模块、云判标识模块和输出FIFO缓存模块。
时钟处理模块,是对本地100MHz的时钟,进行数字时钟管理模块(digital clock management,DCM)倍频,分别产生clk_100M的零相位时钟,clk_120M的时钟,clk_200M的时钟;其中clk_100M的零相位时钟供所有模块使用,clk_120M的时钟,clk_200M的时钟提供给外挂DDR使用,clk_120M的时钟另外还要提供给云判标识模块和输出FIFO缓存模块使用。
图2 FPGA实现原理框图Fig.2 Schematic diagram of FPGA implementation
输入FIFO缓存模块,功能是把数据时钟域的数据,通过FIFO缓存,转换成本地时钟域。FIFO的输入时数据钟、数据和门控,输出则为本地钟、数据和门控。
外挂DDR,用来缓存图像输入数据。DDR用户接口模块,是FPGA针对外挂DDR的接口模块,功能是把云判输出后100M数据,进行时序和位宽处理,以满足DDR接口需求。
输出FIFO缓存模块,功能是把120兆的非连续DDR输出数据,缓存成100兆的按行输出地连续数据。
云检测模块由5个子功能组成,灰度共生矩阵二阶距功能、方差及均方根功能、灰度阈值判定功能、参数加权判定功能和接口处理功能。接口处理功能,首先把输入的每行数据拆分为32个辅助数据,1024个图像数据和两个填充数据;然后对512行输入数据进行分块;最后产生相对应的门控时序信号。灰度阈值判定功能,是以图像子块为基础进行的,统计子块图像数据像素值,与子块图像灰度阈值进行比较,当超过75%的数据值大于等于灰度阈值,则继续做纹理特征的分析,否则判为非云。方差及均方根功能,对输入分块内所有图像像素实时求取平均值,根据平均值再次计算得到方差,最后根据修正系数加权计算得到均方根。灰度共生矩阵二阶距功能,对输入一子块图像,首先产生灰度共生矩阵,然后统计矩阵内每一类图像像素值的概率,通过运算得到该矩阵的二阶距特征值;要实现该功能需要占用FPGA存储资源,双端口随机存期存储器(random access memory,RAM)占用4块,FIFO占用两块, 双端口RAM用来存储灰度共生矩阵的初始值和更新值,FIFO缓存前后连续输入的两行图像数据,且该两行数据随着输入数据的不同随时更新。参数加权判定功能,是对分块内图像灰度产生的均方根,及灰度共生矩阵计算得到的特征值,进行一定参数加权计算,求得最准确的云判结果。
云判标识模块,是把云检测输出标识,按一定格式填充在每行图像数据后面的两个云判决标识填充位置,其中第一个填充第一分块云标识,第二个填充第二分块云标识。
用FPGA(XC5VFX130T-3FF1738)实现云检测硬件算法,其中逻辑资源使用1783个,占FPGA逻辑总资源的8%;RAM存储器使用12块,FIFO存储器使用两块,占总存储资源的4%;全局钟使用9个,占总全局钟资源的28%,具体如表1所列。
表1 FPGA实现资源消耗Tab.1 FPGA implementation resource consumption
用FPGA实现云检测硬件算法,共有5个主钟工作。其中输入图像数据时钟,工作频率为10ns,约束频率为8.33ns,最好情况可以达到5.061ns。输入本地晶振时钟为10ns,因为FPGA内部倍频的原因,工作时钟只能按实际频率10ns约束;而倍频产生的0相位100兆时钟最高可以达到6.0ns,120兆时钟最高频率可以达到4.739ns,DDR所需的200兆时钟,最高频率可以达到4.739ns,具体如表2所列。从表2可以看出,FPGA所有时钟均满足时序要求。
表2 FPGA工作时序Tab.2 FPGA working timing
云检测算法硬件实现时图像分块大小为512×512,针对每个图像块判别规则如下:若人工判为云而算法判为非云,则认为该单元为漏警;若人工判为非云而算法判为云,则认为该单元为虚警;若人工判别结果与算法计算结果一致,则认为该单元为正确。根据上述规则,针对测试图像,定义如下算法性能测试指标:
检测率=硬件判决正确图像块数/所有图像块数;
虚警率=硬件判决为云而实际非云图像块数/所有图像块数。
云图选择9幅典型图像,具体如图3所示。每幅图像大小为2048行1058列(32+1024+2:其中1024为图像数据,其它为辅助数据),云图特征包括了厚云、薄云、城市高亮地物、冰雪等。在全色可见光光谱范围内,雪和云的反射率曲线基本重合,且云和雪均为大尺度地物覆盖形态,从纹理上也难以区分两者的差别,因此在指标计算中,云和雪作为同一目标进行指标计算。
图3 典型云图Fig.3 Typical cloud images
在人工对云进行标记时,可考虑按照图像可用度分级来评定云的厚薄关系和可用性,如表3所列。当处于1级或者部分2级的图像可被有指导性地人工判决为云,3~6级人工判决为非云。
云检测指标测试原理图如图4所示,图像发送源发送云图,数据处理器云检测FPGA接收并进行检测,云图和检测结果送给数据采集设备,数据采集后进行人工判决和算法判决结果分析,计算云检测指标。
表3 图像可用度分级Tab.3 Image availability rating
图4 云检测指标测试原理图Fig.4 Schematic diagram of indicator test for cloud detection
通过对9幅典型云图和两轨实拍云图,共约500分块(每块大小512×512)进行云检测硬件的算法判决和主观判决,如图5所示有两轨图像,每轨图像左图右图分块完全对应;左图为云图,可以通过主观判断为云或非云;右图为客观算法判决结果图,若为白块,则对应左图图像分块判决为云,若为黑块,则对应左图图像分块判决为非云。统计500分块图像主客观判决结果,可以计算得出,厚云检测率大于97%。
图5 算法判决和主观判决结果图Fig.5 Algorithm decision and subjective decision result
天空中云的大面积覆盖,遮挡了地物,使得卫星数据传输中,不能高效率高质量地获取地面图像。为了解决该问题,本文提出一种灰度阈值结合纹理特征的云检测算法,通过对大量典型云图的仿真,该算法云检测指标性能良好。为了满足星载应用需求,本文利用FPGA芯片和DDR芯片,提出了该算法的硬件实现方案;该方案云检测性能与软件算法一致,硬件处理速度高、存储量小且实时可行,目前已成功应用于数十颗卫星平台。地面测试和星载在轨测试表明:该算法厚云检测率达到97%,满足星载要求。云检测算法的星载应用,大大提高了数据传输的效率和地物图像识别的准确度。