⛄常见大气校正模型
大气校正是遥感图像标准化处理的重要环节,消除太阳辐射传输过程中大气对于遥感图像的影响,提高影像的清晰度,获取地物真实的光谱信息。由于大气条件较为复杂,且随区域地理分布和观测时间是动态变化的,国内外研究学者进行大量的研究工作,目前大气校正算法主要包括:基于辐射传输模型的大气校正算法、基于经验统计模型的大气校正和神经网络大气校正算法。
基于辐射传输模型的大气校正方法主要包括LOWTRAN
模型、MODTRAN
模型、FLAASH
模型、6S
模型等,该方法充分考虑辐射传输过程中大气以及临近效应等的影响,是利用电磁波在大气中的辐射传输原理构建起来的,设置合适的大气校正参数是其最为关键的步骤,合适的参数能够反映大气分子、气溶胶等粒子的散射和水汽、臭氧等物质的吸收过程。基于经验统计模型的大气校正方法主要包括经验线性法、暗像元法、QUAC
模型等,利用先验知识或实测数据,直接由遥感图像自身消除大气影响。神经网络方法是一种有效的非线性逼近方法,是功能强大且灵活多变的大气校正方法。
Sen2cor是欧空局官方提供的Sentinel2 MSI
影像的大气校正方法,用于生成L2
级陆地产品。该算法是一种半经验算法,集成了基于图像检索和LibRadtran
(辐射传输计算软件包)模型的查找表(Look-Up-Tables
, LUTs
),以消除S2 MSI
影像的大气影响。该方法将生成的大气校正查找表集成在程序中,这一操作简化了操作流程并缩短了程序运行的时间。
La SRC是美国地质勘探局(USGS
)专门为Landsat8
数据设计的大气校正程序,主要用于支持地面遥感应用。USGS仅提供美国境内的La SRC
产品,所以国内无法利用La SRC
来进行大气校正,但RSD
(Remote Sensing Desktop)软件引进了该算法的核心代码,重写全部流程管理代码,可以实现国内产品的La SRC
大气校正,对相同数据集的RSD L8
大气校正和USGS LaSRC
产品进行对比,其差异可以忽略不计,所以可以用RSD L8
来替代La SRC
产品。
ACOLITE是由比利时皇家自然科学研究所开发的Landsat8 OLI
和Sentinel2 MSI
处理软件,该软件用于校正沿海和内陆水域的图像,是一个完全基于图像的处理器。ACOLITE
有两种内置大气校正方法,分别是指数外推(EXP)和暗光谱拟合(DSF),DSF是通过自动搜索场景或子场景中的暗目标来构建光谱,从而来计算大气路径反射率,而不预先定义暗带,对气溶胶的空间变异性具有鲁棒性,与EXP算法相比有更好的应用潜力.
iCOR是一种基于场景的大气校正处理器,可以处理沿海、内陆或过渡水域和陆地上收集的卫星数据。该处理器包括以下步骤:基于近红外842nm波段识别陆地和水的像元;使用陆地像元来推导气溶胶光学厚度,并使用SIMEC
对水域和陆地目标的固定背景范围进行邻接校正;最后求解辐射传输方程。利用SNAP
中的iCOR
插件来完成iCOR
大气校正(需配置Python2.7相关环境)。
参考文献(模型的详细阐述):
[1]张焕炜.Landsat-8大气校正水陆邻近像元效应改进模型及在水深遥感的应用研究[D].2023.
[2]李海翠.鄱阳湖大气校正方法适用性评价研究[D].江西理工大学,2022.
⛄6S大气校正模型
6S
大气校正模型是美国马里兰大学地理系Vermote等人于1997年在5S模型的基础上改进的,很好地模拟太阳光在太阳-地面目标-传感器的传输过程中所受到的大气影响。相对5S
模型,6S
模型考虑了地面目标的海拔高度、非朗伯平面的情况和新的吸收气体种类(CH4
,N2O
,CO
),提高了瑞利和气溶胶散射作用的计算精度。光谱步长提高到了2.5nm。6S
模型建立在辐射传输理论基础之上,模型应用范围广,不受研究区特点及目标类型等的影响。
Py6S
只是6S
模型的一个接口,没有可执行的编译文件。如果只安装Py6S
会提示如下错误信息,所以需要编译制作可执行文件。
# 测试
from Py6S import *
print(SixS.test())
# 输出异常
6S wrapper script by Robin Wilson
Error: cannot find the sixs executable in $PATH or current directory.
None
👀6S模型安装
(1)安装包准备
-
x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z
(mingw64
) -
make-3.81.exe
-
tar-1.13-1-bin.exe
-
Fort99.zip
-
6SV-1.1.tar
-
Py6S-1.9.2.tar.gz
安装包打包下载地址:安装包链接(https://download.csdn.net/download/twg666/89930630)
(2)mingw64安装及测试
下载压缩包x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z
,解压缩并放置对应路径,配置环境变量。
-
配置步骤:我的电脑→属性→高级系统设置→选择环境变量→系统变量→选择"
Path
"→添加环境变量(mingw
的bin
文件的路径)。 -
命令测试:
CMD
命令行中输入g++ -v
、gcc -v
、gdb -v
命令,显示对应的版本信息即可。
# 小编mingw64的bin路径
D:\Py6S\mingw64\bin
# mingw64测试,CMD命令行中输入以下命令。
Microsoft Windows [版本 10.0.22631.4317]
(c) Microsoft Corporation。保留所有权利。
C:\Users\twg>g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=D:/Py6S/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-win32-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=win32 --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-win32-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-win32-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-win32-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-win32-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-win32-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '
Thread model: win32
gcc version 8.1.0 (x86_64-win32-seh-rev0, Built by MinGW-W64 project)
C:\Users\twg>gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=D:/Py6S/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-win32-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=win32 --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-win32-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-win32-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-win32-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-win32-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-win32-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '
Thread model: win32
gcc version 8.1.0 (x86_64-win32-seh-rev0, Built by MinGW-W64 project)
C:\Users\twg>gdb -v
GNU gdb (GDB) 8.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-w64-mingw32".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(3)make和tar安装
-
另一种方式:通过GnuWin32 Packages下载,双击
make-3.81.exe
和tar-1.13-1-bin.exe
,安装即可。 -
配置步骤:我的电脑→属性→高级系统设置→选择环境变量→系统变量→选择"
Path
"→添加环境变量(make
的bin
文件的路径)。
# 小编make的bin路径
D:\Py6S\GnuWin32\bin
(4)Fort99安装
-
另一种方式:通过Free FORTRAN Compilers下载后解压,不需要安装,直接放到安装路径。
-
配置步骤:我的电脑→属性→高级系统设置→选择环境变量→系统变量→选择"
Path
"→添加环境变量(Fort99
的bin
文件的路径)。
# 小编make的bin路径
D:\Py6S\Fort99\G77\bin
(5)6SV-1.1下载—安装—编译
-
另一种方式:通过Index of /downloads下载(链接直达),解压并找到文件夹中的
Makefile
文件。 -
原始的
Makefile
文件:
SHELL = /bin/sh
SYSTEM = HP-UX
EXTRA = +FPVZOUD +O3 -D$(SYSTEM)
EXTRA = -g
EXTRA = -O
FFLAGS= $(EXTRA)
CFLAGS = -Ae $(EXTRA)
FC = g77 $(FFLAGS)
CC = cc $(CFLAGS)
OBJECTS0 = AATSR.o ABSTRA.o AEROSO.o AKTOOL.o ATMREF.o AVHRR.o BBM.o BDM.o BRDFGRID.o \
CHAND.o CLEARW.o CSALBR.o DICA1.o DICA2.o DICA3.o DISCOM.o \
DISCRE.o DUST.o ENVIRO.o EQUIVWL.o GAUSS.o GLI.o GOES.o HAPKALBE.o \
HAPKBRDF.o HRV.o IAPIALBE.o IAPIBRDF.o IAPITOOLS.o INTERP.o ISO.o \
KERNEL.o KERNELPOL.o LAKEW.o MAS.o MERIS.o METEO.o METH1.o METH2.o METH3.o METH4.o \
METH5.o METH6.o MIDSUM.o MIDWIN.o MIE.o MINNALBE.o MINNBRDF.o \
MOCA1.o MOCA2.o MOCA3.o MOCA4.o MOCA5.o MOCA6.o MODIS.o MSS.o NIOX1.o \
MODISBRDF.o MODISALBE.o \
NIOX2.o NIOX3.o NIOX4.o NIOX5.o NIOX6.o OCEA.o OCEAALBE.o OCEABRDF.o OCEABRDFFAST.o\
OCEATOOLS.o ODA550.o ODRAYL.o OS.o OSPOL.o OXYG3.o OXYG4.o OXYG5.o OXYG6.o \
OZON1.o PLANPOL.o POLDER.o POSGE.o POSGW.o POSLAN.o POSMTO.o POSNOA.o POSSOL.o POSSPO.o \
POLGLIT.o POLNAD.o \
PRESPLANE.o PRESSURE.o PRINT_ERROR.o RAHMALBE.o RAHMBRDF.o ROUJALBE.o \
ROUJBRDF.o SAND.o SCATRA.o SEAWIFS.o SOLIRR.o SOOT.o SPECINTERP.o SPLIE2.o \
SPLIN2.o SPLINE.o SPLINT.o STM.o SUBSUM.o SUBWIN.o TM.o TROPIC.o \
TRUNCA.o US62.o VARSOL.o VEGETA.o VERSALBE.o VERSBRDF.o VERSTOOLS.o \
WALTALBE.o WALTBRDF.o WATE.o WAVA1.o WAVA2.o WAVA3.o WAVA4.o WAVA5.o \
WAVA6.o AEROPROF.o ALI.o ASTER.o ETM.o HYPBLUE.o VGT.o VIIRS.o
OBJECTS1= main.o
sixs: $(OBJECTS0) $(OBJECTS1)
$(FC) $(OBJECTS1) $(OBJECTS0) -o sixsV1.1 -lm
clean:
rm -f *.o
- 修改后的
Makefile
文件:
(1)修改1
第8行:FC = g77 $(FFLAGS)修改为:
FC = gfortran -std=legacy -ffixed-line-length-none -ffpe-summary=none $(FFLAGS)
(2)修改2
将35行的-lm删去,并将sixsV1.1添加.exe
$(FC) $(OBJECTS1) $(OBJECTS0) -o sixsV1.1.exe
完整版如下:
SHELL = /bin/sh
SYSTEM = HP-UX
EXTRA = +FPVZOUD +O3 -D$(SYSTEM)
EXTRA = -g
EXTRA = -O
FFLAGS= $(EXTRA)
CFLAGS = -Ae $(EXTRA)
FC = gfortran -std=legacy -ffixed-line-length-none -ffpe-summary=none $(FFLAGS)
CC = cc $(CFLAGS)
OBJECTS0 = AATSR.o ABSTRA.o AEROSO.o AKTOOL.o ATMREF.o AVHRR.o BBM.o BDM.o BRDFGRID.o \
CHAND.o CLEARW.o CSALBR.o DICA1.o DICA2.o DICA3.o DISCOM.o \
DISCRE.o DUST.o ENVIRO.o EQUIVWL.o GAUSS.o GLI.o GOES.o HAPKALBE.o \
HAPKBRDF.o HRV.o IAPIALBE.o IAPIBRDF.o IAPITOOLS.o INTERP.o ISO.o \
KERNEL.o KERNELPOL.o LAKEW.o MAS.o MERIS.o METEO.o METH1.o METH2.o METH3.o METH4.o \
METH5.o METH6.o MIDSUM.o MIDWIN.o MIE.o MINNALBE.o MINNBRDF.o \
MOCA1.o MOCA2.o MOCA3.o MOCA4.o MOCA5.o MOCA6.o MODIS.o MSS.o NIOX1.o \
MODISBRDF.o MODISALBE.o \
NIOX2.o NIOX3.o NIOX4.o NIOX5.o NIOX6.o OCEA.o OCEAALBE.o OCEABRDF.o OCEABRDFFAST.o\
OCEATOOLS.o ODA550.o ODRAYL.o OS.o OSPOL.o OXYG3.o OXYG4.o OXYG5.o OXYG6.o \
OZON1.o PLANPOL.o POLDER.o POSGE.o POSGW.o POSLAN.o POSMTO.o POSNOA.o POSSOL.o POSSPO.o \
POLGLIT.o POLNAD.o \
PRESPLANE.o PRESSURE.o PRINT_ERROR.o RAHMALBE.o RAHMBRDF.o ROUJALBE.o \
ROUJBRDF.o SAND.o SCATRA.o SEAWIFS.o SOLIRR.o SOOT.o SPECINTERP.o SPLIE2.o \
SPLIN2.o SPLINE.o SPLINT.o STM.o SUBSUM.o SUBWIN.o TM.o TROPIC.o \
TRUNCA.o US62.o VARSOL.o VEGETA.o VERSALBE.o VERSBRDF.o VERSTOOLS.o \
WALTALBE.o WALTBRDF.o WATE.o WAVA1.o WAVA2.o WAVA3.o WAVA4.o WAVA5.o \
WAVA6.o AEROPROF.o ALI.o ASTER.o ETM.o HYPBLUE.o VGT.o VIIRS.o
OBJECTS1= main.o
sixs: $(OBJECTS0) $(OBJECTS1)
$(FC) $(OBJECTS1) $(OBJECTS0) -o sixsV1.1.exe
clean:
rm -f *.o
- 编译
通过cmd
打开6SV1.1
文件夹,输入make
命令即可得到sixsV1.1.exe
,最后测试是否生成成功。
(1)输入Make,等待......
(2)sixsV1.1.exe < ..\Examples\Example_In_1.txt
注意:一定要通过"
cmd
"打开测试,如果通过Windows PowerShell
打开,会显示"<运算符是为将来使用而保留的
"的异常信息。若成功,就将编译成功的sixsV1.1.exe重命名为sixs.exe放在C:\Windows\System32路径下。
👀Py6S库安装测试
由于Py6S-1.9.2.tar.gz
是.tar.gz
格式的,不是.whl
格式的。安装教程如下:
解压→setup.py
→cmd
命令行切换到该目录→执行命令Python.exe setup.py install
。
from Py6S import *
print(SixS.test())
# 输出结果,成功标志如下:
6S wrapper script by Robin Wilson
Using 6S located at C:\WINDOWS\system32\sixs.exe
Running 6S using a set of test parameters
6sV version: 1.1
The results are:
Expected result: 619.158000
Actual result: 619.158000
#### Results agree, Py6S is working correctly
0
基于6S模型Landsat8/Sentinel2/GF大气校正的具体应用:基于6S模型的多源影像大气校正工程
多谢!多谢!
笔者不才,请多交流!!!
欢迎大家关注预览我的博客Blog:HeartLoveLife
能力有限,敬请谅解!!