PROSAIL是两种模型耦合得到的。 SAIL是冠层尺度的辐射传输模型,把冠层假设成是连续的且具有给定几何形状和密度的水平均匀分布的介质层,从而模拟入射辐射与均匀介质之间的相互作用,具体还是挺复杂的。而PROSPECT就是叶片尺度的辐射传输模型,把叶片假设为1到n个具有粗糙表面的吸收板,且这些吸收板被n-1层空气隔开,从而计算叶片结构的各向同性散射,当然叶片内的各种生化参数是这个模型的重要参数。PROSAIL就把两者结合起来,PROSPECT作为SAIL的基本单元,就得到了PROSAIL,能够用来计算植被的冠层光谱以及叶片各种重要的生化参数。
这是目前版本最全的主页,如下图所示:包括Matlab、fortran、IDL、python以及R语言。本人试过R语言的版本,跑起来没有问题。
http://teledetection.ipgp.jussieu.fr/prosail/
但在安装Python版本时报错,看起来应该是需要配置fortran编译器,我电脑之前装过fortran但是这个项目作者已经不再更新了,我也就没再继续死磕,怕遇上神仙bug,溜了溜了。
推荐使用这个人写的版本,(GitHub - jgomezdans/prosail: Python bindings for the PROSAIL canopy reflectance model)非常好用,效率很高,底层没有使用Fortran语言,而是改用了numba加速,是一份非常优秀的代码。可以直接 pip install prosail就可以安装。
但是对于某些计算机,可能运行下面代码时候会出现反射率的值为NAN的情况:
prosail.run_prosail(1.5, 40., 8., 0.0, 0.01, 0.009, 3., -0.35, 0.01,30., 10., 0., typelidf=1, lidfb=-0.15, rsoil = 1., psoil=1., factor="SDR")
请教空天院师兄,对原作者的Prosail python版本进行修正,修正后的放到资源中去,供有需要的小伙伴进行下载。
下图为运行run_prosail函数所需要的参数,解释与参数范围如下:
一般我们都默认‘SDR’返回反射率,函数能够返回一个数组,波长从400-2500。代码如下:
import prosail
import numpy as np
import matplotlib.pyplot as plt
ref = prosail.run_prosail(1.4, 42., 8., 0.0, 0.01, 0.009, 3., -0.35, 0.01,
27., 10., 0., typelidf=1, lidfb=-0.15,
rsoil = 1., psoil=1., factor="SDR")
plt.plot(np.arange(400,2501),ref,'r-')
plt.show()
显示的波谱曲线如下所示: