基于ENVI+IDL的HJ星云识别算法实现
HJ-1星CCD传感器以及高光谱传感器(HIS)波段设置在红外与近红外波段范围,两类数据的云识别便是根据云在可见光和近红外波段的反射率明显高于植被、土壤、水体等下垫面的特征,从反射率的差异出发识别云。对于HJ-1B星数据而言,第三波段(0.63~0.69um)以及第三波段(0.63~0.69um)与第四波段(0.76~0.90um)的比值可以较好的检测出影像上的云像元。
根据上述的云的光谱特征的分析,结合HJ-1B星的CCD数据各通道的波谱特征,采用多特征阈值检测法识别云像元,主要采用了可见光反射率特征以及通道间的组合特征,具体的特征算法流程如下:
在http://www.cresda.com上下载的HJ星CCD1数据属于L2级数据,该数据已经进行过几何校正,如果需要更高精度的数据,需要对数据进行二次的几何精校正;如果没必要,该数据亦满足需求。
本文数据进行的预处理是对数据的辐射定标,采用ENVI软件下的HJ星数据读取对其进行读取、显示、波段组合,具体的实现步骤如下:
File →Open External File →HJ-1 →HJ-1A/1B Tools,弹出对话框:
图:HJ星CCD数据星上辐射定标窗口
点击Apply,完成数据的定标处理以及数据波段组合“_LayerStacking”:
图:HJ星CCD数据波段组合列表
完成HJ星CCD数据的预处理操作,采用上述的算法进行云像元的识别,具体的实现方法步骤如下2 。
2、云像元识别
途径一:ENVI下的波段运算
采用红通道反射率与NIR/VIS(近红外/红光)比值的综合检测法进行云像元的识别,该方法主要是通过ENVI软件中的波段运算“Band Math”(Basic Tools →Band Math)实现的。

途径二:ENVI+IDL二次开发波段运算
function hjremovecloud,b3,b4
end
“0 {HJ}
图:新增菜单功能
3)运行程序进行云识别运算
图:打开数据文件对话框
图:结果列表显示
1)从影像上像元的集聚程度来看:IDL编程所做的结果要比其他两种途径做的结果要好,原因在于:在IDL读取影像文件的时候,文件数据很大,需要更多的存储空间,为了简便,在读取影像数据的时候进行了重采样,这样做的目的:云监测对于影像分辨率的要求不是很高,其次,在idl运算过程中减少了内存的占有;
2)从计算效率上来看,重采样后的计算效率会更高些;
3)结果精度上看,重采样后的结果更符合实际情况。
4、云像元剔除结果对比
结果对比:
1)重采样后进行的云剔除结果要比其他两种途径的结果精度高很多,在ENVI+IDL与ENVI下所做的结果,都误将水体当作云像元给予剔除,不符合实际情况;
2)从去云的效果上看,ENVI+IDL与ENVI这两种途径的去云跟更好一些,但是这样的精度结果,可以在算法上进行阈值的调整进行完善,对于IDL编程而言不是精度不能达到的问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理