FRED红外热成像应用说明
[attachment=71282] \udB4O 使用FRED的图形用户界面和它的内置脚本语言,我们可以轻松地实现热辐射和成像。尽管强力的光线追迹同样是可能的,FRED使用了应用标准光学工程算法的高效运算器来实现热成像和辐射计算。使用源自辐射度量学的技术,用FRED追迹必要数量光线的可能需要的时间,我们可以高效并精确地完成热成像、冷反射、杂散光、热照明均匀性和热自发辐射的计算。 \ZRII<k5) [6TI_U~ 1. 热辐射和热成像是什么? <qR$ `mLN Vu(NP\Wm 热成像定义为产生一个场景的可视化二维图像的过程,该图像依赖于从场景到达成像仪器孔径的热辐射或红外辐射的差异。热成像系统通常会减去背景来增强在红外场景中变化的对比度。当背景不均匀时,由于冷反射的存在,可能产生杂散信号。对于国防和安全问题尤为重要,在其中我们可以发现具有不同热温度或辐射率的物体,此时可以从图像场景的剩余部分区分出它们。对于这个问题的主要应用是:探测、分类和追迹隐藏在个人身上、包裹中、车辆上或船运集装箱中的武器、人员、车辆、物品和材料。图1是一个非常好的案例,当在FRED中进行仿真时,一个日常用品:茶壶,通过一个具有热探测仪的摄像头成像。 !5d n7Wuj $+PioSq 热辐射是从一个光学仪器周围的环境或结构中发出的能量,它会引起杂散光问题。冷反射是一个热辐射问题,由于反射到探测器上的辐射,在一个红外系统中的热辐射表现为在一个显示图像中的黑色圆形区域。 U,2OofLM w5z]=dN 通常,这些系统通过探测叠加在大的背景上的小信号工作。在室温下,黑体辐射曲线的峰值大致在10μm处。因此世界在这个波长处“发光”,发光的微小变化表明了温度或辐射率的变化。特别的,当一个冷却的探测器图像反映了自身,那么就会产生一个局部背景的缺失。这通常表现为在图像中央的黑点。有人可能称之为“杂散黑”,而不是杂散光。 `&NFl'l1C 7Q/H+) 在测量绝对辐射而不是相对信号的红外辐射仪中,任何背景辐射是不可接受的。在这样一个仪器中,冷却整个仪器到低温度来消除由于自辐射导致的杂散光是必须的。 # m|el@) p>)1Z<D"a
[attachment=71283] -}m 图1 此图演示了一个在茶壶表面具有不同辐射系数和温度分布的暖茶壶的简单问题。然后茶壶通过单透镜成像,探测器放置在单透镜后面。这种机械结构辐射到了探测器上类型的问题,可以在许多引起热问题的红外系统中找到。 W,~*pyLdO 最近,已经开始致力于红外遥感应用中,包括温度的测量和绘图、森林火势的感知和控制、监督和多光谱地表成像等。 I0Do% Q3>qT84 这些应用种有许多是经过长距离完成的,透过大气,在大气中IR能量的吸收是这些系统性能的一个影响因素。军事的和基于空间的应用一般来说可以通过探测器处理,探测器的工作波长落在8.0-15微米之间,在这个波段内大气的吸收是最小的。其他的应用的波带较宽,为0.9-300微米。 {b- C,J =-!jm? st* 2. FRED如何进行光线追迹和显现热辐射和成像? N,w6 Fe[6Y<x+: 在FRED中追迹热辐射有几个方法。第一种方法是创建一个光源,然后在光学系统中对它进行强力光线追迹。第二种方法是通过光学系统从探测器后端进行光线追迹,这需要较少的光线。在两种方法中,能够显现二维和三维图的热成像是非常重要的。 rX$-K\4W ^RnQX#+ 事实上这里有两个问题:计算时间和精度。在一个复杂系统中,如果分析者尝试去了解设计中递增量的影响,并且想要实时这样做,光线追迹时间可能会特别长。反向光线追迹能够使计算变得几乎是交互式的。另外,由于幂指数收敛比均匀性快,即使每个微分区域只有几束光线到达热源,分析者几乎可以肯定保证精确的结果。
#4|RaI|. L^e*_q2d:>
[attachment=71284] s-*N_Dv 图2 两个辐照度计算的比较:一个是使用前向光线追迹,另一个是使用后向光线追迹。后者需要比前者少1/53倍的光线达到同样的准确度。 8GxT! 热自发辐射可以简单描述:每个光学和机械结构像朗伯辐射体一样辐射能量,辐射出的能量是自身温度和辐射系数的函数。通过追迹光线来模拟发射出的能量;在传播过程中发生透射和反射时,它们遵循几何光学的规律。这些光线(它们表示热能)累积到了FPA上。 %enJ[a%Qg }|h-=T ' 根据这个计算,大多数软件会让用户设置物体的温度和辐射系数。从统计学的角度来看,这样做完全是错误的!在大多数“真实”的系统中,相对于光学和机械元件,FPA朝向一个非常小的固体角,因此当大量光线被追迹时,如果有的话,到达FPA的光线很少(图3)。结果是热自发辐射的错误的估计。 5S? "<+J' d '2JMdbc 有一种更加高效但是非最佳的方法。直接或者间接,大多数软件允许用户指定一个优先的辐射方向;这在文献中被称为“重点采样”。使用该方法,用户为每一个光学和机械元件指定了一个重点采样。在光线追迹的过程中,光线散射到了这些优先的方向,这在引导光线到达FPA方面十分高效(图4)。这极大的改善了统计结果,并且产生了热自发辐射的一个准确评估。然而,在一个具有许多结构性元件的复杂、“真实生活”的系统,这样做单调乏味且耗时,特别是如果分析者需要设定温度和辐射系数。 "a(R>PV% t>]W+Lx#
Db2#QQ
[attachment=71285] 图3 热发射主机筒的强力光线追迹。在这个例子中,入射光线没有到达FPA。 ?bd!JW bg`
[attachment=71286] 图4 发射朝向一个重要方向,计算更加高效,但是设置麻烦。 x75;-q 处理这个计算最好的方法是采用热辐射度量学的数学方法。计算热自发辐射(TSE)基本上是该形式的总和 36'J9h\ /,7#%D [attachment=71287] ip'v<%,Q3" 因为热辐射是朗伯的,我们可以用由热出射度推导出的等值表达式替换L '_g&!zi8~ crd|r." [attachment=71288] =SJ[)| 其中ε是辐射系数,f是黑体积分,σ是斯特藩-玻尔兹曼常数,T是温度(K)。问题是如何高效的计算Aobject和Ωdetector。 @uC-dXA" I-.?qcy~ 反转光源和收集器的作用(使用方程3),我们可以写成 R(Vd[EGY @lB1t=
D [attachment=71289] Iy5W/QK6 Ypm*or 注意到探测器的面积Adetector是一个定量,为了高效的计算每个发射物体的立体角,我们在辐射方程中引用了对称性概念。 J'cE@(US .*k!Zl* [attachment=71290] j+<!4 0# 从方程4中,我们注意到如果我们从探测器(L=1/πAdetector)发射光线,入射到物体上的功率数值上将等于它的投影立体角(回想投影立体角等于Ω/π)。发射的探测器功率因此等于 EHe-wC dFeGibI{ [attachment=71291] 0T3r#zQ (事实上只有探测器辐射到了一个圆锥体中,这个公式才是正确的。如果我们希望辐射到一个矩形体中,正确的探测器功率是4/π因子) ^R\5'9K! M]\"]H? 知道如何高效的计算投影立体角是该方法的核心;这是第二个“高超的技巧”。由于立体角是常数,它们只需要计算一次。 ,[m4+6G5 avS9 "e
[attachment=71292] -NG9?sI\U 图5 从FPA反向光线追迹来获得精确的投影立体角。在大多数例子中,杜尔窗口是相对于探测器最靠近的通光孔径,因此我们一般将光线发射到它的立体角内。热自发辐射的计算由方程6获得,这很容易的应用到一个表格中(图6)。出于完整性,热自发辐射的方程由下式给出: -eSI"To L< yyR@kOGga [attachment=71293] YVHDk7s 其中表达式(Ω/π)是由光线追迹计算出的投影立体角。 (I`<;
[attachment=71294] 图6 计算热自发辐射使用的表格,如Exceltm。列“Incident Power”实际上是投射立体角,列“Contribution”实现了用方程6实现。 suj}A 热自发辐射的计算使用反向光线追迹的好处有很多,包括 VAxk?P0j6 1. 立体角的精度由从探测器追迹的光线数目决定 iEFS>kL8e 2. 为了“切合实际”,温度和辐射系数在表格中可以很容易的改变。 >fR#U"KPAB 3. 这里没有冗长的设置时间,设置时间不再是模型复杂性的函数。 d\z':d.Tt 4. 通过把探测器划分为微分区域,光线追迹并将每个区域求和,我们可以获得在探测器上热自发辐射的图像。 nDC5/xB
hYCyc-W 现代光学软件十分强大且适应性广,通过点击工具条上的按钮,为有经验和没有经验的用户提供了来完成许多复杂的任务的方法。然而,有许多地方用户需要以软件预定义的方式执行计算。应用“高超的技巧”常常是唯一的办法,在合理的期限内执行这些运算并到达所需要的精确度水平。 `0ju=FP'u5 =7P; /EV 3. FRED对于热分析如何创建几何结构? Qe/=(P< 9]8M {L 我们可以在FRED中使用图形用户界面直接创建系统几何结构,或者从IGES或STEP CAD格式和光学设计程序导入。程序有很多选项来创建表面,包括标准的平面、圆锥面、圆柱面、椭球面、双曲面、圆环面、多项式表面、Zernike、Nurb、Meshed、旋转曲面、挤压面、复合曲线、样条曲线和用户定义的表面。 Iq":
U ;rta#pRn 由于FRED具有多文件用户界面,可以在文件之间剪切、复制和粘贴元件。实体可根据逻辑关系安排到对应于系统物理布局的装配体、组件和元件等的分类中。任何表面可能会被隐式表面或者下面定义的孔径集曲线裁剪。 \;tKss!| "ZVBn!
任何表面可以根据温度和辐射系数定义。另外,把每个表面定义为热辐射源来传播热能和并创建热成像图。 ZoC?9=k nuv$B > 4. FRED如何记录热辐射路径? eWx6$_| sXC]{]
P FRED具有进行高级光线追迹的能力,并且记录所有在系统中追迹光线的所有路径,图7表示的是一个茶壶热成像的光线路径的列表,这是使用从探测器通过透镜然后到图1中所示茶壶的后向光线追迹形成的。 48%a${Nvvj ]O&A:Us 该光线历史是每个路径功率、沿着该路径的光线数、它们如何到达最后一个实体和它们通过了多少表面(事件计数)的一个完整报告。使用任何光线追迹路径并把它们复制到用户定义的路径列表中(选择该路径,点击鼠标右键,选择复制该路径到用户定义路径列表的选项)是可能的。该路径现在将会作为在高级光线追迹的可选路径和可使用的光线方法之一出现。然后在仅有的路径上,绘制点列图或辐照度分布函数是可行的。 &9] [~$ 7 -V_)FK2c 通过使用该方法,可以查看相对于信号路径,每个鬼像、直射、单个或多个散射路径贡献了多少功率。 ]i]sgg[ Mz{ Rh+gS Zr2QeLQC(
[attachment=71295] l 0b=;^6 图7 如图1所示的茶壶案例的光线路径。注意到有三条路径到达了茶壶主体(.teapot7.Body.B-Spline Surface 4),它们是该系统中的路径1,2和8,显示为在第2行到最后一行。路径数2是从探测器通过透镜然后传播到茶壶本体的直线路径。注意一下这两个路径每个的功率差异,第1条路径的0.25448和第2条路径的0.000227487。第2条路径是该路径的散射部分;第1条路径是直接热贡献。还可以查看该路径的定义;示于图9. TAJ 9Y< ~(0Y`+gC
[attachment=71296] 图8 通过透镜追迹的第二条路径 XKU=VOY
[attachment=71297] 图9 示于图8中路径的光线路径信息 1y8:tri>N 5. FRED如何显示辐照度或热辐射图? s_h< <u($!ATb 默认条件下,FRED使用3图颜色面板显示辐照度或热成像图。左上图是一个等距的伪彩色图,显示了在选择的分析面上单位面积的功率。右边有一个比例尺显示了图中的功率等级。右上角和右下角的面板是左上角面板的横截面。点击左上图的任何部位会在水平和垂直方向创建三维图的一个横截面;该位置处的位置和辐照度信息显示在左上角面板的左下角处。茶壶系统的辐照度图如图10所示。 U14dQ=~b/ Mw5!9@Fc7
[attachment=71298] 图10 茶壶系统的辐照度图 !%M-w0vC9 只考虑一个面板,在那个面板上双击鼠标左键可以放大该图。上面板正处于透视图模式,为了创建一个二维图,点击鼠标右键弹出绘图选项,选择perspective view来创建一个如图11所示的二维图。 =v5(*$"pd" r@<;
[attachment=71299] 图11茶壶的热影像二维图模式 't_=%^q 6. FRED在热应用中如何定义散射表面? ;09J;sf s3kEux^ 散射体文件夹包含了默认的和可选择的用户输入的散射模型,可以应用到FRED中的任何表面。每个模型计算出合适的基于光入射角和局部表面法向方向的三维的双向散射分布函数(BSDF)。BSDF可替换的定义是双向反射分布(BRDF)和双向透射分布函数(BTDF)。 \M532_w {:FITF3o FRED具有三个默认散射模型:黑朗伯(4%反射率漫射黑色),白朗伯(96%反射率漫射白色)和Harvey-Shack(抛光表面)。此外,参数化散射模型在FRED中同样是可用的:黑色涂料(TIS),ABg,表面颗粒(Mie)和Phong。不止一个散射模型类型可以应用到一个表面。图12是创建一个自定义散射定义的对话框菜单,注意到FRED最新的散射定义是一个脚本化的BSDF函数,在这里用户定义了一个散射方程。FRED允许或禁止每个当前应用到该表面的光线追迹控制的反射和透射的散射元件。每个散射表面必须具有至少一个散射方向,这可以使用菜单栏选项Tools: Determine Scatter Importance Sampling进行自动设置,或者从表面对话框的散射标签手动设置。每个散射方向应用到分配到该表面的每个散射模型。设置一个表面的重点采样的对话框如图13所示。通过在一个特定的或反射的方向、朝向一个特定的实体、闭合曲线、空间中的一点或一个椭圆体上定义目标,我们可以定义多个重点采样目标。 Tx_(^K K
:q-[\G
[attachment=71300] 图12散射对话框显示了多种方法定义散射 K;xW/7?
[attachment=71301] +m7x>ie) 图13重要性采样的菜单选项应用到一个特定表面。如图所示,多个散射属性可以应用于多个重要性采样目标。注意到在该图中指定了一个米散射散射体属性和一个Harvey Shack抛光表面散射体,另外定义了两个重要性采样目标,一个是指定了一个方向,另一个朝向一个表面-焦平面。 w./EJkKI Oc'z?6axWv 7. FRED如何记录热散射路径 &{=~)>h %Z5k8 在高级光线追迹完成后,当选择保持光线历史选项,FRED就具有了一个可得到的杂散光报告。然后我们就可以从工具菜单请求一个详述鬼像和散射路径如何到达任何表面的杂散光报告。图14显示了具有创建/使用光线历史文件选项和确定选择的光线路径选项的高级光线追迹对话框。图15显示了一个简单Cassegrain望远镜的杂散光报告,该报告详述了从一个光源以离轴5度角进入望远镜的杂散光。从报告中我们可以看到,在离轴5度角处的最大的杂散光光源是偏离第二个支架的侧面,因为该路径的功率的73%到达了探测器。总功率如第4列所示,表明只有0.00197290w从该路径到达了探测器。 1W!n"3#
]D-48o0
[attachment=71302] 图14 具有创建/使用光线历史文件选项和确定选择的光线路径选项的高级光线追迹对话框 EhUy7b,1_
[attachment=71303] 图15 显示了杂散光报告电子表格,可以用于追迹任何级次的散射和鬼像路径。所示的报告部分显示了详述每个报告路径的路径数、光线数、功率百分比和总功率。 |uZ=S]V@ V=*J9~K 8. FRED如何在探测器上穿过多个像素点迭代来创建热图? |8`;55G d=KOV;~); FRED具有一个内置的可编译的Basic脚本语言。从Visual Basic脚本语言里,几乎所有用户图形界面(GUI)命令是可用这里的。FRED同样具有自动的客户端和服务器能力,它可以被调用和并调用其他可启动程序,如Excel。因此可以在探测器像素点上定义多个离轴光源,及在FRED Basic脚本语言里的For Next loops语句沿着探测器像素点向上和向下扫描来反向追迹光线。注意到在图16中写了功率信息到数据文件中,这样可以使用三维图表查看器调用和查看数据。 n)7icSc p+7BsW.l 图16 FRED Basic脚本语言创建茶壶的热成像 EH "g`r 'script for calculating thermal image map ipp_?5TL 'edited rnp 4 november 2005 "=n8PNV/
c 'declarations yl 8v&e{ Dim op As T_OPERATION q
|^O Dim trm As T_TRIMVOLUME dGteYt_F Dim irrad(22,22) As Double 'make consistent with sampling |O9=C`G_ Dim temp As Double +r!h* 4 Dim emiss As Double PC_4#6^5 'setup #Fd([Zx#. nx = 21 Z=c@Gd ny = 21 rpT<cCem1 numRays = 1000 lmcDA,7 minWave = 7 'microns |\(/dXXP maxWave = 11 'microns ~&/Gx_KU sigma = 5.67e-14 'watts/mm^2/deg k^4 J|
'(;Ay4u Print "" oX4uRc7wR Print "THERMAL IMAGE CALCULATION" Qd4T?5 vG detnode = FindFullName( "Geometry.detector.Surf 1" ) ?.4l1X6Ba Print "found detector array at node " & detnode <"+C<[n. srcnode = FindFullName( "Optical Sources.DiffDetArea" ) {|E7N"Qzg Print "found differential detector area at node " & srcnode bC{8yV=) GetTrimVolume detnode, trm *n'xS L detx = trm.xSemiApe *a%PA(%6 dety = trm.ySemiApe r*wKYb area = 4 * detx * dety U}0/V
c26 Print "detector array semiaperture dimensions are " & detx & " by " & dety Wd5t,8*8 Print "sampling is " & nx & " by " & ny EG.C2]Fi 'reset differential detector area dimensions to be consistent with sampling y)E2=JQA/ pixelx = 2 * detx / nx !gf3%!% pixely = 2 * dety / ny //@=Q!MW SetSourcePosGridRandom srcnode, pixelx / 2, pixely / 2, numRays, False 9p4U\hx Print "resetting source dimensions to " & pixelx / 2 & " by " & pixely / 2 sD3|Qj; 'zero out irradiance array ]c2| m}I{: For i = 0 To ny - 1 j2Y(Q/i For j = 0 To nx - 1 $IT9@}*{ irrad(i,j) = 0.0 o{LFXNcg[ Next j <6~;-ZQY
Next i 3pW
MS& 'main loop RWo B7{G EnableTextPrinting( False ) ,-Nk-g ypos = dety + pixely / 2 l7!)#^`2_ For i = 0 To ny - 1 N=wy)+ xpos = -detx - pixelx / 2 h,'+w ypos = ypos - pixely se HbwO3 b EnableTextPrinting( True ) [9_ (+E[} Print i eBIR*TZ): EnableTextPrinting( False ) ~(/HgFLLu For j = 0 To nx - 1 p&mtKLv xpos = xpos + pixelx 30E v" 'shift source Fd&!-`T? LockOperationUpdates srcnode, true ONiI:Z>% GetOperation srcnode, 1, op X2YOD2<v op.val1 = xpos E57{*C op.val2 = ypos )6
<byO SetOperation srcnode, 1, op 4"x;XVNM[ LockOperationUpdates srcnode, false <@2# VG 'ray trace by[i"!RCu CreateSource srcnode AuipK*&g TraceExisting 'draw Ef!p:HBJ 'radiometry O
f @#VZ For k = 0 To GetEntityCount()-1
uE`|0 If IsSurface( k ) Then yKEFne8^ temp = AuxDataGetData( k, "temperature" ) oK:P@V6! emiss = AuxDataGetData( k, "emissivity" )
r;X0B If ( temp <> 0 And emiss <> 0 ) Then /'fDXSdP ProjSolidAngleByPi = GetSurfIncidentPower( k ) X\2hKUkT frac = BlackBodyFractionalEnergy ( minWave, maxWave, temp ) :yjK*"T|OD irrad(i,j) = irrad(i,j) + frac * emiss * sigma * temp^4 * t`ceVS ProjSolidAngleByPi 6n\z53Mk End If M.N~fSJ End If l)*,18n Next k Wd56B+ Next j M03i4R@h( Next i I''R\Bp EnableTextPrinting( True ) yL
x .#kx6 'write out file QsJW"4d Open "C:\Documents and Settings\teapotimage.dat" For Output As #1 ]j2v"n Print #1, "GRID " & nx & " " & ny EQ63VF Print #1, "1e+308" /:{_| P\ Print #1, pixelx & " " & pixely *8.@aX3 Print #1, -detx+pixelx/2 & " " & -dety+pixely/2 56SS
>b maxRow = nx - 1 #3yw
maxCol = ny - 1 {hRie+ For rowNum = 0 To maxRow ' begin loop over rows (constant X) 6mpg&'> row = "" vF6*c For colNum = maxCol To 0 Step -1 ' begin loop over columns (constant Y) 9Jy2T/l row = row & irrad(colNum,rowNum) & " " ' append column data to row string oA;Ty7s Next colNum ' end loop over columns DwY<qNWT Print #1, row R =9~*9 Next rowNum ' end loop over rows Sja{$zL+W Close #1 \y H3Y Print "all done!!"
|