一种水下光学成像蒙特卡洛矢量化异构并行优化方法

文档序号:36495239发布日期:2023-12-27 11:08阅读:50来源:国知局
一种水下光学成像蒙特卡洛矢量化异构并行优化方法

本发明属于水下光学仿真算法优化,尤其涉及一种水下光学成像蒙特卡洛矢量化异构并行优化方法。


背景技术:

1、在水下光学领域,蒙特卡洛仿真技术,被广泛应用于模拟光子在水介质中的传输过程,特别是在光子与介质中的微粒(如水分子、悬浮粒子、气泡)相互作用的情况下。蒙特卡洛光子传输模型结构包括:

2、1.场景建模:首先,需要对仿真场景进行几何和光学特性的建模,包括介质的光学特性、目标物体的几何形状和光学特性等。

3、2.光线发射:模拟从光源向介质中发射光线的过程,可以通过设定光源的位置、方向和光强能量等参数来模拟光线的发射。

4、3.光线传输追踪:采用蒙特卡洛方法,通过随机采样的方式追踪光线在介质中的传输过程。模拟每个光子与介质中的粒子(如水分子)之间的相互作用,包括散射、吸收等物理过程。

5、4.光线检测:当光线到达相机传感器平面或特定的检测面时,记录其位置和能量信息。

6、具体光学成像仿真流程如图1所示,相对于一维模型,蒙特卡洛方法在描述光传输过程方面更为直观,具有更高的现实性和解释性。其能够灵活调整各种波长、介质散射相函数、固有光学特性等条件,从而实现对介质中光场的三维模拟。

7、然而,目前蒙特卡洛方法在水下光学成像领域仍然存在一个显著的挑战,在传统的蒙特卡洛算法中,对光子进行传输模拟时,采用单步操作是逐个处理单个光子,存在着计算时间过长的问题。尽管早期已经提出了多种方差减少技术以提高计算速度,但这些方差减少技术只是在一定程度上提升了光子利用效率,而未根本解决计算时间长的根本问题。近年来,随着图形处理单元的发展,基于gpu并行加速的蒙特卡洛方法被提出,然而,这些基于cuda线程编译,并行处理单光子传输的方法也存在一些问题。例如,每个cuda线程仅处理单光子蒙特卡洛运算,计算效率受限,无法充分发挥gpu并行计算的优势,导致计算效率相对较低。同时,需要频繁地访问内存,可能导致内存读写速度成为计算瓶颈,影响了整体的仿真速度。对于大规模的仿真问题,单光子传输的并行加速方法可能会受到gpu内存容量的限制,无法进行有效处理。

8、因此,如何更有效地加速蒙特卡洛仿真,成为了当前水下光学成像领域亟需解决的技术问题。


技术实现思路

1、针对上述问题,本发明提出了一种水下光学成像蒙特卡洛矢量化异构并行优化方法,并包括以下步骤:

2、步骤1,设定仿真目标物上各个光源的参数条件;

3、根据测试设备的显存容量设定适当的光子数传输阈值,根据该阈值划归所有光源的传输批次;

4、根据光子波长,设定仿真的水体固有光学特性,包括吸收系数、衰减系数、各向异性系数和相对折射率;

5、设定仿真所用的成像透镜的参数,其中透镜中心坐标为;同时设定镜头光圈的数值孔径;计算透镜焦距;

6、设定传感器中心位置;

7、步骤2,按传输批次顺序,在设备的cpu内存中持续初始化每批次内所有点光源的全部光子,初始化光子的属性信息包括位置坐标、方向余弦、能量、存活状态的标识;采用矢量化方式将初始化后的全部光子的属性进行升维后变形,打包为一个具有上述属性的光子包对象;

8、步骤3,将光子包对象送入gpu,并行加速水下蒙特卡洛光线追迹成像仿真,记录经过水体,穿过相机透镜、光阑孔径后,被传感器平面接收的光子信息,包括位置坐标和能量;

9、步骤4,检查gpu是否完成光子包对象传输任务,若完成该批次传输任务,把本批次任务所记录的被传感器平面接收的光子数据从gpu送回cpu;然后,立即把cpu内存中的下一批次光子包对象数据送入gpu显存,持续进行水下蒙特卡洛光线追迹成像仿真;

10、步骤5,使用cpu对传感器平面接收的光子位置信息、能量信息进行可视化处理,其中。

11、优选的,所述步骤1中设定仿真目标物上各个光源的参数条件具体为:

12、设定模拟的各个光源的参数条件,包括波长、模拟目标物的高度及宽度、目标物上点光源的分布的高度间隔及宽度间隔、光源在三维笛卡尔坐标系中的位置坐标;

13、设定点光源角度参数,包括天顶角、方位角、天顶角循环步进角度和方位角的循环步进角度。

14、优选的,所述步骤1中根据测试设备的显存容量设定适当的光子数传输阈值,根据该阈值划归所有光源的传输批次具体为:

15、s11.获取仿真目标物上点光源横向分布的数量信息和纵向分布的数量信息,其中,;获取每个点光源的光子数量信息,天顶角的离散点数量,方位角的离散点数量,其中,;

16、s12.获取每个点光源所要发射的光子总数,其中;

17、s13.计算仿真目标物待模拟的光子总数,其中;

18、s14.根据模拟光子的阈值上限和待模拟的光子总数,对光源进行批次划分。

19、优选的,所述步骤1中设定仿真所用的成像透镜的参数具体包括:透镜材质的折射率、透镜中心坐标、外直径、上下球面的球心及、中心厚度和透镜两侧曲面的曲率半径及;

20、所述步骤1中计算透镜焦距为:

21、

22、其中,为空气折射率,为水体折射率。

23、优选的,所述步骤2的具体过程为:

24、s20.按传输批次顺序,获取该批次内所有点光源的信息,包括:在三维笛卡尔坐标系中位置坐标,横向分布的数量信息、纵向分布的数量信息,天顶角、方位角、天顶角循环步进角度和方位角循环步进角度;

25、s21.在设备的cpu内存中,对该批次内所有点光源发射的全部光子进行初始化,生成光子的属性信息,包括:在三维笛卡尔坐标系中的位置坐标、方向余弦、能量、存活状态的标识,生成的属性均以numpy数组形式表示;

26、s22.把该批次内所有光子,在三维笛卡尔坐标系中的从一维数组变形成一个形状为的二维数组坐标从一维数组变形成一个形状为的二维数组,坐标从一维数组变形成一个形状为的二维数组;

27、s23.把该批次内所有光子的天顶角变成一个形状为的二维数组,将方位角变成一个形状为的二维数组;

28、s24.根据光子的天顶角和方位角,计算该批次内所有光子在极坐标系中初始化方向向量,并把极坐标系中的方向向量转化为三维笛卡尔坐标系下表示,得到光子的初始化方向向量,其中:

29、

30、为三维笛卡尔坐标系中、、方向的方向余弦,都是形状为的二维数组;

31、s25.把该批次内所有光子的能量,变形成一个形状为的二维数组;

32、s26.把该批次内所有光子的存活状态的标识,变形成一个形状为的二维数组;

33、s27.把该批次内所有光子的各个属性:,,,,,,,从相应形状的二维数组升维成四维数组,其形状均为;

34、s28.把该批次内所有光子升维后的各个属性:,,,,,,,均降维拉平变形成一维数组,其形状均为;

35、s29.将该批次内所有光子打包为一个光子包对象,包含上述属性,,,,,,。

36、优选的,所述步骤3的具体过程为:

37、s31.使用cupy库将光子包对象数据从cpu内存送入gpu显存,并行加速水下蒙特卡洛光子传输仿真;在水体蒙特卡洛光子传输仿真的过程中,在每步迭代后,更新光子包对象的属性,并记录有用的光子信息,随即清除在该步迭代中消亡的光子,释放无用的运存空间占用;

38、s32.在gpu上,对光子进行光线追迹成像仿真;使用解析定义透镜的双侧球面边界,并根据几何光学原理精确地模拟了光子在透镜界面处的传输;

39、s33.传感器平面接收光子包对象内穿过相机透镜、光阑孔径后的光子,记录光子的位置坐标、能量;

40、s34.将被传感器平面接收的光子数据从gpu传输回cpu;利用cupy库提供的函数将gpu上的数据转移到cpu内存,同时将数据类型从cupy数组转换为相应的numpy数组。

41、优选的,所述步骤32的具体过程为:

42、s321.检查光子包对象内的光子在当前步的运动轨迹是否与透镜平面相交;

43、首先,判断交点是否位于透镜外直径的范围内,筛选出在当前步必定会穿过透镜的光子,并记录它们在此步运动的初始坐标、方向余弦和权重,把当前步必定穿过透镜的光子的存活状态的标识设置dead;

44、其次,判断光子包对象内所有光子的存活状态,是否均为dead,若是,仅保留那些穿过透镜的光子的信息,包括初始坐标、方向余弦和权重,对光子包对象进行更新;

45、s322.解析法定义透镜的双侧球面边界;

46、s323.根据几何光学原理精确地模拟光子在透镜界面处的传输。

47、优选的,所述步骤322的具体过程为:

48、透镜面向目标物点光源侧的表面球心,曲面半径为,其球面方程为:

49、

50、设光子包对象内的光子与透镜球面相交于点;根据已知的光子在这一步的运动轨迹:光子的初始位置坐标和方向向量,则入射光线的直线参数方程表示为:

51、

52、将入射光线的直线参数方程代入透镜球面方程,得到

53、

54、求解未知参数,其中:

55、

56、求解得到:

57、

58、其中;进而求解出与透镜球面的交点坐标。

59、优选的,所述步骤323的具体过程为:

60、s1.在每个入射光子方向向量和透镜曲面的交点处构建局部坐标系;在局部坐标系中,轴与该入射点处透镜曲面的法线相切,轴正方向与三维笛卡尔坐标系的轴正方向的夹角为锐角;矢量,与入射平面正交,局部坐标系的轴与相切,并同向;局部坐标系轴的方向由与的叉乘定义;

61、s2.将入射光方向向量以及交点处透镜界面法向量转换为局部坐标系中的矢量;

62、s3.在局部坐标系中,利用斯涅耳定律:,计算折射光方向向量,其中代表入射介质的折射率,代表出射介质的折射率,为光线的入射角,为光线的折射角;

63、s4.将局部坐标系中的折射光方向向量重新转换为三维笛卡尔坐标系中右手系标准正交基的表示形式;

64、s5.光子包对象入射透镜后,把光子包对象内各个光子的方向向量更新为折射光方向向量;

65、s6.计算光子包对象内各个光子入射透镜的菲涅尔透射率:

66、

67、其中是入射角,是折射角;

68、s7.更新 光子包对象内各个光子的权重:

69、

70、s8.对光子包对象出射透镜,重复上述流程。

71、优选的,所述步骤5的具体过程为:

72、s51.在传感器接收面上划分网格以模拟传感器的光敏元件像素阵列;

73、s52.光子经过透镜聚焦后被传感器平面接收,随后被分配到与其投射位置相对应的网格中,记录其能量和坐标信息;

74、s53.传感器平面的每个像素网格对接收到光子的数量和能量信息进行累计;

75、s54.对传感器各个像素网格的能量进行非线性量化;

76、使用传感器平面上的像素格点累计的最大光子能量值,对传感器平面所有像素格点的能量进行了归一化处理;依照a-law编码规则,将归一化后的像素格点能量置于到非线性传递函数中,调整成像的相对亮度;

77、s55.把传感器平面上各个像素的相对亮度映射回0到255的范围内,转换为图像的r、g、b三个通道的数值,并以此生成对应的图像。

78、与现有技术相比,本发明提出的一种水下光学成像蒙特卡洛矢量化异构并行优化方法,通过矢量化操作将大量光子打包,并基于cpu-gpu异构并行加速蒙特卡洛光子传输仿真,获得水下光学成像的仿真效果图。

79、实验结果显示,采用矢量化处理后,减少了传输批次,从而有效减少了对内存的频繁访问,进一步加速了计算速度。此外,矢量化处理技术也为水下光子传输过程的处理策略提供了更灵活的空间,允许针对不同仿真场景和设备条件进行更多优化和定制,以满足特定需求。并且,本发明所提方法充分发挥了cpu在处理复杂控制逻辑和任务分发等方面的优势,同时利用gpu处理大规模并行计算任务,结合cupy提供的一些高级特性和cuda编译器的优化选项,进一步提升水下光子传输蒙特卡洛仿真的程序性能。本发明高效地利用计算资源,显著提升了计算效率,达到了百亿级光子吞吐量。利用解析定义了透镜的双侧球面边界,根据几何光学原理精确地模拟了光子在透镜界面处的传输,更为精确地进行光线成像追迹仿真。

80、通过本发明所提方法,加快了水下光子传输蒙特卡洛仿真速度,提升了水下光学成像的仿真计算效率,可以获得水下光学成像的仿真效果图,为水下光学成像领域的研究和应用提供了一种高效、可靠的仿真工具。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1