一种适用于分布式架构的波段计算方法、装置及存储介质与流程

文档序号:24160858发布日期:2021-03-05 16:39阅读:85来源:国知局
一种适用于分布式架构的波段计算方法、装置及存储介质与流程

[0001]
本发明属于图像处理技术领域,尤其涉及一种适用于分布式架构的波段计算方法、装置及存储介质。


背景技术:

[0002]
随着对地观测技术的快速发展,遥感影像的获取正变得越来越容易,如今的遥感图像正向着更高空间分辨率、更高光谱分辨率、更高清晰度、更大信息量的方向发展。目前的卫星影像一般具有信息量大、分辨率高、光谱信息丰富等特点,可用于各类遥感指数的计算,而在遥感领域中,遥感指数已被广泛用来国土、农业、林草、水利等各行各业的相关指标定量定性评价中。因此,针对海量的遥感影像数据,如何更加快速高效且灵活的计算各类遥感指数成为了亟需解决的问题。
[0003]
波段计算器是一个灵活的图像处理工具,由于每个用户都有独特的需求,利用该工具用户可以自定义遥感指数或处理算法,用户可依据需要自定义简单或复杂的处理程序。波段计算工具能够方便的执行图像中各个波段的加、减、乘、除、三角函数、指数、对数等数学函数计算。但是由于卫星传感器制造水平的不断发展,卫星影像数据量呈现指数型增长趋势,因此集成于桌面端单机软件上的波段计算工具及所使用的计算方法已不能满足,存在如下技术问题:(1)随着卫星影像数据量的增加,波段计算效率显著降低;(2)系统架构从单机向集群、分布式发展,波段计算工具无法充分利用集群优势,突破处理速度瓶颈。


技术实现要素:

[0004]
本发明旨在解决上述问题,提供一种适用于分布式架构的波段计算方法、装置及存储介质。
[0005]
第一方面,本发明提供一种适用于分布式架构的波段计算方法,包括:根据设定的分块尺寸,将影像在长宽方向分别进行分块处理为若干分块,并获得总分块数;基于总进程数和总分块数,所述总进程包括若干子进程;根据分配策略将各分块分配至各子进程;各子进程根据计算策略计算所对应分块的起始位置和分块大小信息,并读取输入影像当前分块的像素值;各子进程解析计算公式并按照运算符的优先级顺序将公式中的运算符和常变量存储在运算处理类中;各子进程通过递归方式,将对应分块影像各像素值分别代入计算公式,按照优先级由低到高的顺序进行公式运算;各子进程处理结束后同步结束状态,以确保各个进程状态彼此知悉;如果任一子进程返回失败,则退出进程同时写出失败状态文件,否则顺利退出,即完成波段计算。
[0006]
优选的,所述适用于分布式架构的波段计算方法,所述分配策略,包括:
总进程数大于等于总分块数,将各分块一对一分配给对应各子进程;总进程数小于总分块数,将各分块按顺序依次分配给所有子进程后,再将剩余的分块按照相同的顺序再次分配给所有子进程;不断循环,直到所有分块分配完毕。
[0007]
优选的,所述适用于分布式架构的波段计算方法,所述各子进程根据计算策略计算所对应分块的起始位置和分块大小信息,并读取输入影像当前分块的像素值,包括,根据分配策略,提取子进程序号与各分块的对照关系,在各子进程内部动态计算其处理的各分块信息;包括如下步骤:根据行向分块数和列向分块数计算总分块数:总分块数=行向分块数
×
列向分块数根据总分块数和总进程数,在每个进程中计算需要重复使用进程的次数:重复次数=总分块数
÷
进程数根据下式动态获取分配给各子进程的所有分块序号:分块序号=itotalid
×
i+iid其中itotalid为总进程数,i为子进程循环的次数,iid为子进程的序号;根据获取的分块序号,计算该分块分别在行向和列向上的偏移量;根据偏移量读取影像对应分块的像素值:行向偏移量=分块序号
÷
总分块数列向偏移量=分块序号%总分块数。
[0008]
优选的,所述适用于分布式架构的波段计算方法,所述各子进程解析计算公式,包括:将自定义的以中缀表达式表示的公式转换为以后缀表达式表示的公式;通过引入栈,处理过程只需要顺序读入,遇到数字则入栈,遇到运算符则将两个栈中取出进行运算。
[0009]
优选的,所述适用于分布式架构的波段计算方法,所述将自定义的以中缀表达式表示的公式转换为以后缀表达式表示的公式,包括:如果读入操作数,则直接放入输出表达式;如果读入一般运算符,则放入栈;放入栈前须检查栈顶,并确定栈顶运算符的优先级比放入的运算符优先级低;如果放入的优先级较低,则将栈顶的运算符放入输出表达式中;如果读入左括号(,左括号优先级最高,放入栈中;当左括号放入栈中,则优先级最低;如果读入右括号),则将栈中运算符取出放入输出表达式中,直到取出左括号(为止;顺序读完中缀表达式,如果栈中还有操作符,则依次弹出,放入输出表达式中。
[0010]
优选的,所述适用于分布式架构的波段计算方法,所述各子进程通过递归方式,将对应分块影像各像素值分别代入计算公式,按照优先级由低到高的顺序进行公式运算,包括:所述计算公式为后缀表达式表示的公式;所述后缀表达式表示的公式的计算包括:从左到右遍历表达式的每个数字、波段标识符对应的像素值和符号,遇到数字或波段标识符对应的像素值就进栈,遇到运算符,则将栈顶数字出栈。
[0011]
优选的,所述适用于分布式架构的波段计算方法,所述遇到运算符,则将栈顶数字出栈,包括:如果是双目运算符,则将处于栈顶的两个数字或波段像素值出栈;如果是单目运算符,则将处于栈顶的一个出栈,进行计算,运算结果进栈,直到最终获得结果。
[0012]
第二方面,本发明提供一种适用于分布式架构的波段计算装置,包括:分块单元,所述分块单元用于根据设定的分块尺寸,将影像在长宽方向分别进行分块处理为若干分
块,并获得总分块数;分配单元,所述分配单元用于基于总进程数和总分块数,所述总进程包括若干子进程;根据分配策略将各分块分配至各子进程;子进程处理单元,所述子进程处理单元用于根据计算策略计算所对应分块的起始位置和分块大小信息,并读取输入影像当前分块的像素值;解析计算公式并按照运算符的优先级顺序将公式中的运算符和常变量存储在运算处理类中;通过递归方式,将对应分块影像各像素值分别代入计算公式,按照优先级由低到高的顺序进行公式运算;同步输出单元,所述同步输出单元用于同步各子进程处理结束后的状态;如果任一子进程返回失败,则退出进程同时写出失败状态文件,否则顺利退出,即完成波段计算。
[0013]
第三方面,本发明提供一种适用于分布式架构的波段计算电子设备,包括处理器和存储器;所述存储器用于存储所述处理器的可执行指令;所述处理器配置为经由执行所述可执行指令来执行第一发明内容所述的适用于分布式架构的波段计算方法。
[0014]
第四方面,本发明提供一种计算机存储介质,其上存储有计算机程序;所述计算机程序被处理器执行时实现第一方面内容所述的适用于分布式架构的波段计算方法。
[0015]
本发明所述适用于分布式架构的波段计算方法、装置及存储介质,将海量的遥感数据分解成多个子任务,分配给不同的处理器,各个处理器之间相互独立,并行的执行子任务,从而达到加速求解速度,提高执行效率;支持集群架构的多机/多节点处理,可以充分利用各节点上的硬件资源,极大的提高波段计算的处理效率;且本发明构建了一种分块的进程分配策略,当分块数大于进程数时,可有效解决分块的进程分配问题。
附图说明
[0016]
图1为本发明所述分布式架构的波段计算方法流程示意图;图2为本实施例所述对影像行列向进行分块示意图;图3为本实施例所述循环分配策略示意图;图4为本实施例所述波段处理任务分发示意图。
具体实施方式
[0017]
下面通过附图及实施例对本发明所述适用于分布式架构的波段计算方法、装置及存储介质进行详细说明。
[0018]
示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
[0019]
本说明书中使用用语“一个”、“所有”和“所述”用以表示存在一个或多个要素/组成部分/等;用语“包括”和“具有”用以表示开放式的包括在内的意思并且是指除了列出的要素/组成部分/等之外还可存在另外的要素/组成部分/等。此外,附图仅为本公开的示意
性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。
[0020]
实施例一本公开实施例首先提供一种分布式架构的波段计算方法,如图1所示包括如下步骤:步骤s1,根据设定的分块尺寸,将影像在长宽方向分别进行分块处理为若干分块,并获得总分块数;步骤s2,基于总进程数和总分块数,所述总进程包括若干子进程;根据分配策略将各分块分配至各子进程;步骤s3,各子进程根据计算策略计算所对应分块的起始位置和分块大小信息,并读取输入影像当前分块的像素值;步骤s4,各子进程解析计算公式并按照运算符的优先级顺序将公式中的运算符和常变量存储在运算处理类中;步骤s5,各子进程通过递归方式,将对应分块影像各像素值分别代入计算公式,按照优先级由低到高的顺序进行公式运算;步骤s6,各子进程处理结束后同步结束状态,以确保各个进程状态彼此知悉;步骤s7,如果任一子进程返回失败,则退出进程同时写出失败状态文件,否则顺利退出,即完成波段计算。
[0021]
在本公开实施例中,如图2所示,在步骤1中将影像在长宽方向分别进行分块处理为若干分块;按照给定的分块大小将影像行向分为4块,列向分为6块,格网的每一个矩形格网作为待处理的影像块。
[0022]
在本公开实施例中步骤2所述分配策略为:总进程数小于总分块数,将各分块按顺序依次分配给所有子进程后,再将剩余的分块按照相同的顺序再次分配给所有子进程;不断循环,直到所有分块分配完毕。
[0023]
如图3所示,分块影像共24块,总进程个数为5,分块首先从一行开始,从第一列开始向后分配分块给各进程,如果分块1给进程1,分块2给进程2,分块3给进程3,分块4给进程4,分块5给进程5;循环完所有进程后,再将分块6分给进程1,分块7分给进程2,
……
,按照该顺序多次循环分配,直到所有分块分配完成。图中标号为进程序号。
[0024]
根据本公开实施例所述分配策略,提取出进程序号与分块数的数字对照关系,可通过下述公式在各进程内部动态计算其处理的各分块序号,并获取相关分块信息。步骤s3的过程包括如下:步骤s31,根据行向分块数和列向分块数计算总分块数:总分块数=行向分块数
×
列向分块数;对应本实施例中,总分块数为24块,即总分块数=4
×
6=24;步骤s32,根据总分块数和总进程数,可在每个进程中计算需要重复使用进程的次数:重复次数=总分块数
÷
进程数;对应本实施例中,进程重复使用频次为5次,即重复次数=24
÷
5=4.8≈5;
步骤s33,针对某一个进程,可根据下述公式动态获取分配给它的所有分块序号:当进程循环第1次时:序号为1的进程所处理的分块序号为1;序号为2的进程所处理的分块序号为2;序号为3的进程所处理的分块序号为3;序号为4的进程所处理的分块序号为4;序号为5的进程所处理的分块序号为5。
[0025]
当进程循环第2次时:序号为1的进程所处理的分块序号为6;序号为2的进程所处理的分块序号为7;序号为3的进程所处理的分块序号为8;序号为4的进程所处理的分块序号为9;序号为5的进程所处理的分块序号为10。
……
.
[0026]
基于上述规律,总进程数为itotalid,当进程循环第i次,序号为iid的进程处理的分块序号处理的分块序号为:分块序号=itotalid
×
i+iid步骤s34,根据获取的分块序号,计算得到该分块分别在行向和列向上的偏移量,即可根据偏移量读取影像对应位置上的块上的像素值。行向偏移量=分块序号
÷
总分块数列向偏移量=分块序号%总分块数
[0027]
在本公开实施例中,基于openmpi波段计算处理任务分发及状态反馈;基于openmpi镶嵌处理任务分发机制如图4所示,通过mpi框架启动波段计算工具,工具启动后,根据上述影像分块的进程分配规律,各进程并行处理对应的多个分块,并行mpi框架提交任务,mpi框架将任务分配给计算机a、计算机b、

、计算机n。所有计算机子进程执行任务完毕后,汇总任务结束状态到openmpi框架,openmpi框架进行状态信息分发,确保所有进程状态彼此知悉,所有进程委派进程1根据反馈的任务结果生成最后结果。
[0028]
步骤s4解析计算公式是将自定义的以中缀表达式表示的的公式转换为后缀表达式的过程。后缀表达式使得计算机运算非常方便,通过引入栈,计算机处理过程只需要顺序读入,遇到数字则入栈,遇到运算符则将两个栈中取出进行运算。将中缀表达式转换为后缀表达式的步骤具体如下:步骤s41,如果读入操作数,则直接放入输出表达式中;步骤s42,如果读入一般运算符,则放入栈,但是放入栈之前必须要检查栈顶,并确定栈顶运算符的优先级比放入的运算符优先级低;如果放入的优先级较低,则需要将栈顶的运算符放入输出表达式中;步骤s43,如果读入左括号(,左括号优先级最高,因此放入栈中,但是注意,当左括号放入栈中,则优先级最低。
[0029]
步骤s44,如果读入右括号),则将栈中运算符取出放入输出表达式中,直到取出左括号(为止;
步骤s45,顺序读完中缀表达式,如果栈中还有操作符,则依次弹出,放入输出表达式中。
[0030]
在本公开实施例中以一个归一化植被指数(ndvi)的中缀表达式:(b4-b3)/(b4+b3)进行后缀表达式转换过程如下:
步骤s5是对于步骤s4所得后缀表达式进行计算,后缀表达式计算过程是从左到右遍历表达式的每个数字、波段标识符对应的像素值和符号,遇到数字或波段标识符对应的像素值就进栈,遇到运算符,则将栈顶数字出栈:如果是双目运算符,则将处于栈顶的两个数字或波段像素值出栈;如果是单目运算符,则将处于栈顶的一个出栈,进行计算,运算结果进栈,一直到最终获得结果。
[0031]
以上述获取的归一化植被的后缀表达式:b4 b3

b4 b3+/为例进行详细步骤说明,此处b3、b4为3波段和4波段的像素值。
[0032]
1)初始化一个空栈。此栈用来对要运算的数字进出使用。
[0033]
2)后缀表达式中前两个都是非运算符,则b4 b3对应的波段像素矩阵依次进栈。
[0034]
3)接下来是减号
“-”
,所以将栈中的b3波段像素矩阵出栈作为减数,b4波段像素矩
阵出栈作为被减数,并运算b4-b3得到结果,再将b4-b3进栈。
[0035]
4)接着将b4 b3对应的波段像素矩阵依次进栈。
[0036]
5)接下来是减号“+”,所以将栈中的b3波段像素矩阵和b4波段像素矩阵出栈,并运算b4+b3得到结果,再将b4+b3进栈。
[0037]
6)接下来是除号“/”,所以将栈中的b4-b3的结果矩阵和b4+b3的结果矩阵出栈,并运算(b4-b3)/(b4+b3)得到结果,得到最终结果。
[0038]
各子进程处理结束后同步结束状态,以确保各个进程状态彼此知悉;如果任一子进程返回失败,则退出进程同时写出失败状态文件,否则顺利退出,即完成波段计算。
[0039]
实施例二基于与前述实施例一中所述的一种分布式架构的波段计算方法同样的发明构思,本实施例公开了一种分布式架构的波段计算装置,本公开实施例所述分布式架构的波段计算装置包括分块单元、分配单元、子进程处理单元和同步输出单元。
[0040]
在本公开的实施例中分块单元用于根据设定的分块尺寸,将影像在长宽方向分别进行分块处理为若干分块,并获得总分块数;在本公开的实施例中分配单元用于基于总进程数和总分块数,所述总进程包括若干子进程;根据分配策略将各分块分配至各子进程;在本公开的实施例中子进程处理单元用于根据计算策略计算所对应分块的起始位置
和分块大小信息,并读取输入影像当前分块的像素值;解析计算公式并按照运算符的优先级顺序将公式中的运算符和常变量存储在运算处理类中;通过递归方式,将对应分块影像各像素值分别代入计算公式,按照优先级由低到高的顺序进行公式运算;在本公开的实施例中同步输出单元用于同步各子进程处理结束后的状态;如果任一子进程返回失败,则退出进程同时写出失败状态文件,否则顺利退出,即完成波段计算。
[0041]
前述实施例一中的具体实例同样适用于本实施例的一种分布式架构的波段计算装置,通过对前述分布式架构的波段计算方法的详细表述,本领域技术人员可以清楚的知道本实施例中分布式架构的波段计算装置的实施方法,所以为了说明书的简洁,在此不再赘述。
[0042]
实施例三基于与前述实施例一中所述的一种分布式架构的波段计算方法同样的发明构思,本实施例还公开了一种分布式架构的波段计算电子设备,包括处理器及存储器;所述存储器用于存储所述处理器的可执行指令;所述电子设备以通用计算设备的形式表现。电子设备的组件可以包括但不限于:上述至少一个处理器、上述至少一个存储器、连接不同系统组件的总线。在具体实施过程中,所述处理器配置为经由执行所述可执行指令来执行上述实施例一所述的分布式架构的波段计算方法。
[0043]
本领域的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此本发明所公开的实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行本发明公开的实施例所述的方法。
[0044]
实施例四基于与前述实施例一中所述的一种分布式架构的波段计算方法同样的发明构思,本实施例还公开了一种计算机存储介质,其上存储有计算机程序;在本公开的实施例中所述计算机程序被处理器执行时实现上述实施例一所述分布式架构的波段计算方法,执行过程包括:根据设定的分块尺寸,将影像在长宽方向分别进行分块处理为若干分块,并获得总分块数;基于总进程数和总分块数,所述总进程包括若干子进程;根据分配策略将各分块分配至各子进程;各子进程根据计算策略计算所对应分块的起始位置和分块大小信息,并读取输入影像当前分块的像素值;各子进程解析计算公式并按照运算符的优先级顺序将公式中的运算符和常变量存储在运算处理类中;各子进程通过递归方式,将对应分块影像各像素值分别代入计算公式,按照优先级由低到高的顺序进行公式运算;各子进程处理结束后同步结束状态,以确保各个进程状态彼此知悉;如果任一子进程返回失败,则退出进程同时写出失败状态文件,否则顺利退出,即完成波段计算。
[0045]
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1