基于眼底图像的视网膜血管三维模型构建方法及装置与流程

文档序号:11277398阅读:664来源:国知局
基于眼底图像的视网膜血管三维模型构建方法及装置与流程
本发明属于医学图像处理
技术领域
,尤其涉及一种基于眼底图像的视网膜血管三维模型构建方法及其装置。
背景技术
:视网膜血管的定量评估能够为各种疾病的诊断提供有用的临床辅助信息,因此,视网膜血管的研究在临床医学上具有重大的意义。传统的视网膜血管检测结果均是二维图像,需要诊断医生凭借大量的临床经验才能够从二维图像中得到较为准确的结果,也即是说,这种方式对诊断医生的专业性和经验值要求都非常高。随着三维重建技术的成熟发展,三维重建技术的医学的应用也成为热点。因为视网膜血管的三维重建能为医生提供更为便捷和直观的血管模型,因此,目前已经有许多视网膜血管三维重建的方法。这些方法大致分为三类:1)寻找黄斑坐标后采用中心逆投影法重建视网膜血管;2)计算血管中心线和半径等参数后,用曲面细分法重建视网膜血管;3)采集不同视角采集图像数据后,在重合区域基础上进行重建。然而,上述的三类方法操作都较复杂且需要医务工作者具备扎实的专业基础。因此,现在亟需一种操作方法更加简单的视网膜血管三维模型构建方法。技术实现要素:针对上述存在的技术问题,本发明提供一种基于眼底图像的视网膜血管三维模型构建方法,其能够根据眼底图像构建视网膜血管的三维模型。为了解决上述技术问题,本发明采用的技术方案为:一种基于眼底图像的视网膜血管三维模型构建方法,其包括步骤:分别获取所述视网膜血管的骨骼的骨骼图和血管边缘图;计算所述骨骼图中每个中心点各自对应的血管半径值,并进行均值优化;以所述骨骼图中的每个中心点为球心,以及每个中心点各自所对应的血管半径为球半径画球体,并求取所有球体的并集,得到视网膜血管的三维模型。其中,所述均值优化的步骤,还包括步骤:以骨骼分叉处为分界点对所述骨骼图中的骨骼进行血管分段,并对每段血管段中所有中心点所对应的血管半径值进行均值优化;其中,以骨骼分叉处为分界点对所述骨骼图中的骨骼进行血管分段的步骤,具体包括步骤:获取堆栈中预存的起点,并沿骨骼走势扫描所述骨骼图,得到当前血管段中每个中心点的特征参数,将所述特征参数存入对应于所述当前血管段的元胞数组;判断当前是否遭遇骨骼分叉处或血管段末梢,若当前遭遇血管段末梢,则将位于血管段末梢的中心点标记为当前血管段的终点,并从所述堆栈中获取新的起点,根据新的起点沿骨骼造势扫描所述骨骼图,获取下一段血管段中每个中心点的特征参数,并将所述特征参数存入对应的元胞数组,如此循环直至堆栈为空为止;若当前遭遇骨骼分叉处,则将所述骨骼分叉处对应于当前血管段的中心点标记为所述当前血管段的终点,并将所述骨骼分叉处对应于其它血管段的中心点作为新起点进行压栈,同时从所述堆栈中获取新的起点,根据所述新的起点沿骨骼走势扫描所述骨骼图,然后获取下一段血管段中每个中心点的特征参数,并将所述特征参数存入对应的元胞数组,如此循环直至堆栈为空为止;其中,所述特征参数包括所述中心点的血管半径,所述中心点在二维骨骼图中的二维坐标值,所述中心点在三维空间中的z轴坐标,起点标记,终点标记,以及所述中心点所在血管段的血管段编号。其中,所述对每段血管段对中所有中心点对应的血管半径进行均值优化的步骤,具体包括步骤:遍历所述骨骼图,寻找每个中心点各自对应的相邻中心点;获取当前中心点及其相邻中心点的血管半径,并计算所述当前中心点及其相邻中心点的血管半径的平均值。进一步地,在以所述骨骼图中的每个中心点为球心,以及每个中心点各自所对应的血管半径为球半径画球体的步骤之前,还包括步骤:计算所述骨骼图中每个中心点在三维空间的z轴坐标值,并进行三维转换,其中,计算所述中心点的z轴坐标值的步骤,具体包括步骤:获取椭球状视网膜的球心坐标(x0,y0,z0);根据所述球心坐标计算视网膜血管上各个中心点在三维空间的z轴坐标值,其计算公式为:其中,a和c分别为椭球状视网膜的短轴和长轴,且a=1.08c。更进一步地,进行三维转换的步骤之后,还包括步骤:判断相邻两个中心点之间是否需要进行插值,若是,则计算所述相邻两个中心点之间所需要插入的插值中心点的个数n,其计算公式为:其中,z1和z2分别为两个中心点在z轴的坐标值,且计算所述n个插值中心点中每个插值中心点的z轴坐标值,并进行插值优化,所述插值中心点的z轴坐标值的计算公式为:其中,k为需要插入的n个插值中心点中的第k个插值中心点,k=1,2···n。更进一步地,所述插值优化的步骤之后,还包括步骤:根据所述相邻两个中心点的血管半径r1、r2,计算所述相邻两个中心点之间插入的每个插值中心点的血管半径r,其计算公式为:其中,r1、r2分别为相邻两个中心点的血管半径,rk为第k个插值中心点的血管半径。更进一步地,所述判断相邻两个中心点之间的是否需要进行插值的步骤之前,还包括步骤:按从起点到终点的顺序,将同一血管段中所有中心点存放在元胞数组的同一行中,得到一个新的元胞数组。更进一步地,所述基于眼底图像的视网膜血管三维重建方法还包括步骤:对所述视网膜三维模型进行平滑处理。本发明还提供了一种一种基于眼底图像的视网膜血管三维构建装置,其包括:图像预处理模块,用于对预存的视网膜血管二进制图片进行预处理,得到视网膜血管的骨骼图和血管边缘图;数据处理模块,用于根据经过预处理得到的骨骼图和血管边缘图,计算所述骨骼图中每个中心点各自对应的血管半径值;模型构建模块,用于以所述骨骼图中每个中心点为球心,以及每个中心点所对应的血管半径为球半径画球体,并求取所有球体的并集,得到视网膜血管的三维模型。进一步地,所述基于眼底图像的视网膜血管三维构建装置还包括血管半径优化模型,用于对所述数据处理模块计算得到的每个中心点的血管半径进行均值优化;所述血管半径优化模块具体包括:分段子模块,用于以骨骼分叉处为分界点对所述骨骼图中的骨骼进行血管分段,得到多段血管段;优化子模块,用于对每段血管段中所有中心点对应的血管半径进行均值优化;和/或,所述模型构建模块包括:第一计算子模块,用于计算视网膜血管上每个中心点在三维空间的z轴坐标值,其计算公式为:其中,a为椭球状眼球的短轴,c为椭球状眼球的长轴,且a=1.08c;第二计算子模块,用于根据各个中心点的z轴坐标值判断相邻两个中心点之间是否需要进行插值,若是,则根据相邻两个中心点的z轴坐标差值计算所需要插入的插值中心点的个数n,其计算公式为:以及根据所述z轴坐标差值计算每个插值中心点的z轴坐标值,并进行插值优化,所述插值中心点的z轴坐标值的计算公式为:以及计算n个插值中心点中每个插值中心点的血管半径,其计算公式为:其中,z1和z2分别为相邻两个中心点的z轴坐标值,且z1>z2,k为n个插值中心点中第k个插值中心点,k=1,2,···,n。本发明的有益之处在于:本发明的视网膜血管三维模型构建方法,将视网膜血管看作为沿骨骼的无数个小球体合并而成,因此,通过从视网膜血管图中获取到骨骼图和血管边缘图,然后根据骨骼图和血管边缘图计算得到每个中心点(即骨骼图中的每个像素点)和每个中心点所对应的血管半径,然后以骨骼图中的每个中心点为球心,以及每个中心点所对应的血管半径为半径画球,然后将所画的所有小球体进行合并求取并集,即得到视网膜血管的三维模型。另一方面,为了保证三维模型的准确性,在计算得到血管半径后还对其进行优化,然后根据优化后的血管半径进行三维模型构建;进一步地,为了保证三维模型更加接近视网膜血管,还对其进行平滑处理。附图说明图1为本发明的一种基于眼底图像的视网膜血管三维重建方法的一实施例的流程图;图2a、图2b和图2c分别为视网膜血管的二进制图片、骨骼图和血管边缘图;图3为图1中步骤s103的一实施例的流程图;图4反映的是按照八方位扫描法扫描一个中心点的示意图;图5a和图5b分别是血管半径优化前的视网膜血管三维模型和血管优化后的视网膜血管三维模型;图6为本发明的一种基于眼底图像的视网膜血管三维模型构建方法的又一实施例的流程图;图7为本发明的一种基于眼底图像的视网膜血管三维模型构建方法的再一实施例的流程图;图8a和图8b分别是差值前和差值后的视网膜血管三维模型示意图;图9a和图9b分别是进行平滑处理前和平滑处理后的视网膜血管三维模型示意图;图10为本发明的一种基于眼底图像的视网膜血管三维模型构建装置的功能模块图;图11为反映骨骼分叉处各个血管段的中心点之间关系的示意图。具体实施方式下面结合附图,对本发明作详细的说明。为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明的视膜网血管三维重建方法的原理是:将视网膜血管理解为沿骨骼的无数个小球合并而成,因此,只需要得到骨骼上每个中心点(即骨骼图中的每个像素点)和每个中心点所对应的半径(即骨骼上每个像素点),就可以骨骼上的每个中心点为球心,以及每个中心点所对应的半径为血管半径画球,然后将所有小球进行合并即得到视网膜血管的三维模型。进一步地,为了得到更加平滑的三维模型,还对其进行优化处理。具体地,下面结合具体的附图和实施例对本发明的视网膜血管三维重建方法进行详细的说明。实施例一参见图1,为本发明的一种基于眼底图像的视网膜血管三维重建方法的一实施例的流程图。具体地,本实施例中,该视网膜血管三维重建方法包括步骤:s101,分别获取视网膜血管的骨骼对应的骨骼图以及血管边缘图。由于骨骼是图像几何形态的一种重要拓扑描述,利用骨骼表示原始图像,可以在保持图像的重要拓扑特征的前提下,减少图像冗余信息,突出其特征信息。因此,本实施例中,对视网膜血管的原始二进制图片进行预处理,从而分别得到其对应的骨骼图和血管边缘图。在一具体实施例中,通过调取matlab中bwmorph函数对drive彩色图像数据库中视网膜血管的二进制图片(如图2a)进行预处理(即提取血管的骨骼),从而得到视网膜血管的二维骨骼图,如图2b所示;通过调用matlab中的bwperim函数对drive数据库中视网膜血管的二进制图片(如图2a)进行预处理(如边缘检测),从而得到视网膜血管的二维血管边缘图,同时还对血管边缘进行标记(具体地可对血管边缘的各个像素点进行标记),如图2c所示。s103,根据上述的骨骼图和血管边缘图,计算该骨骼图中的骨骼上每个中心点各自对应的血管半径值。本实施例中,该骨骼上每个中心点(即骨骼图中骨骼上的像素点)的血管半径值是指骨骼上的中心点到其对应的血管两边血管边缘的距离,即该中心点到对应的血管边缘上像素点处的像素点个数m或参见图3,在一具体实施例中,该步骤s103具体包括步骤:s301,获取每个中心点在预设的八个方向上,且与中心点相差距离为预设血管半径初始值的八个待判定像素点。在一具体实施例中,可以每个中心点为扫描中心,以预设的血管半径初始值为扫描半径,按照八方位扫描法遍历该骨骼图,从而分别得到每个中心点在预设的八个方向上,且与每个中心点相距预设血管半径初始值的八个待判定像素点。其中,该预设的八个方向是八方位扫描法中的八个方向,如图4所示。在一具体实施例中,该预设的血管半径初始值通常设置为1,即一个像素单位,从而以中心点为扫描中心,并以八方位扫描法扫描该中心点周围得到分别与该中心点相差一个像素单位的8个待判定像素点,该8个待判定像素点即是该中心点(例如图4中待求血管半径的像素点)为中心分别在八个方向(图4中八个实心箭头所指方向)上的8个像素点,而该8个像素点与该中心点的像素差值即是扫描半径(即一个像素单位),参见图4。自然,遍历该骨骼图,则会得到该骨骼图中所有中心点各自所对应的8个待判定像素点。s303,根据血管边缘图判断该8个像素点中是否包含至少一个代表血管边缘的边缘像素点,若是,则执行步骤s305a;否者,执行步骤s305b。本实施例中,该边缘像素点是指位于血管边缘上的点,具体地判断时,将骨骼图和血管边缘图进行叠加处理,即保证骨骼图中的骨骼位于血管边缘图中血管边缘的中心,从而当扫描到的待判定像素点位于该血管边缘上,或者与该血管边缘上相应位置的点重合时,则说明该待判定像素点为边缘像素点。s305a,判断与上述边缘像素点所在方向的相反方向对应的像素点是否也是代表血管边缘的边缘像素点,若是,则执行步骤s307a,否者,执行步骤s307b。在一具体实施例中,只有当该中心点对应的8个点中任意两个相反方向上的待判定像素点同时为边缘像素点时,才能够确定该中心点的两边同时达到血管边缘。因此,当判断出该8个像素点中至少有一个边缘像素点,且其所在方向的相反方向的像素点也为边缘像素点时,实质上就是判断出该8个待判定像素点中包含了至少两个边缘像素点,且该两个边缘像素点所在方向相反,即该两个像素点分别位于骨骼两边的血管边缘上。其中,两个像素点所在方向相反,是指两个像素点分别与对应的中心点之间连线的夹角为180°,否则,这两个像素点所在方向不相反。s305b,以预设的增长幅度调整预设的血管半径初始值,并根据调整后的血管半径初始值重新获取8个新的待判定像素点,并执行步骤s303。在一具体实施例中,当判断出该上述8个待判定中像素点中不包含边缘像素点时,则说明该预设血管半径初始值不够大,即还没有达到血管边缘,因此,需要调整预设的血管半径初始值,即需要增大该血管半径初始值,然后重新上述步骤s301-s303,直到步骤s303中判断出8个待判定像素点中包括至少一个边缘像素点,则不再调整该预设的血管半径初始值了,并将最后一次调整得到的血管半径初始值作为该中心点的血管半径值即可,然后执行步骤s305a,且当步骤s305a中判断出该至少一个边缘像素点中任何一个边缘像素点所在方向的相反方向对应的像素点是否也是代表血管边缘的边缘像素点,即判断出该8个待判定像素点中包括至少两个边缘像素点结束流程。如前所述,通常是将预设的血管半径初始值设置为1,即一个像素单位,因此,可以1个像素单位为增长幅度来逐次调整该预设的血管半径初始值,当然以2个或以上像素点单位为增长幅度也是可以理解的;同理,根据实际情况,一开始将该预设血管初始值设置2或其它的也是可以理解的。s307a,将预设的血管半径初始值作为该中心点的血管半径值。在一具体实施例中,由于判断出该8个待判定像素点中有两个或两个以上的边缘像素点,且其中有两个边缘像素点的所在方向相反,则说明对应的中心点的位置正确,且其两边同时到达血管边缘,因此,可直接将此时的扫描半径,即预设的血管半径初始值作为该中心点的血管半径值。s307b,调整该中心点的位置,执行步骤s301。在一具体实施例中,当步骤s305a中判断出步骤s303中得到的至少一个边缘像素点中的任何一个边缘像素点所在方向的相反方向对应的像素点不是代表血管边缘的边缘像素点,或者说,该至少一个边缘像素点中任何两个边缘像素点所在方向不相反时,则说明可能该中心点的位置有所偏差,因此,需要对该中心点的位置进行调整,具体地,是将该中心点向步骤303中判断得到的一个边缘像素点所在方向的相反方向移动相当于预设血管半径值的位移,即移动一个像素单位,然后再重复上述步骤s301—s305a,直到步骤s305a中判断出:步骤s303中得到的至少一个边缘像素点中任何一个边缘像素点所在方向的相反方向对应的像素点也是代表血管边缘的边缘像素点,即判断出该8个待判定像素点中包括至少两个边缘像素点时,则不再调整该中心点的了,并将预设的血管半径初始值/最后一次调整后(调整中心点位置后,也可能会需要进行血管半径初始值的调整,具体调整方法参照上述的步骤s305b)的血管半径初始值作为该中心点的血管半径值即可。s105,根据骨骼上所有中心点的血管半径进行视网膜血管三维重建,得到视网膜血管模型。在一具体实施例中,构建三维模型具体是以上述步骤中获取的骨骼图上每一个中心点为球心,每个中心点所对应的血管半径值为球半径构造小球体,再把所有球体组合起来求取所有小球体的并集,从而得到视网膜血管三维模型。本实施例中,通过从视网膜血管二进制图片中获取到视网膜血管的骨骼图和血管边缘图,然后根据该骨骼图和血管边缘图来计算骨骼图中每个中心点对应的血管半径,从而可直接以每个中心点为球心,计算得到的血管半径为半径画球体,再求取所有球体的并集,即得到视网膜血管三维模型,整个过程简单且易于操作,只需要医务工作者人员提供视网膜血管的二进制图片即可,不需要其进行计算或者其它操作,降低了对义务工作者的专业性要求。实施例二虽然以骨骼上每一个中心点为球心,对应的血管半径构为半径造小球体,再把所有球体组合起来求取并集从而得到视网膜血管三维模型,但是如果骨骼图上的像素点(即中心点)不连续,那么根据该骨骼图所构建得到的视网膜血管三维模型中的血管会有异常隆起的部分,如图5a所示。而造成此结果的原因之一则是:如图所示,当返回45°倾斜方向的扫描半径值(也即预设的血管半径初始值或调整后的血管半径初始值)时,返回的是血管边缘与中心点之间像素的个数,然而实际上应该返回的是沿该方向半径值乘以再返回。基于此,本发明提供了又一种基于眼底图像的视网膜血管三维重建方法,其通过对计算得到各个中心点各自对应的血管半径分别进行优化处理,然后根据优化处理后的血管半径来进行视网膜血管三维模型的优化。下面结合具体地的附图和实施例进行详细的说明。参见图6,为本发明的又一种基于眼底图像的视网膜血管三维模型构建方法,具体地,本实施例的该重建方法包括上述实施例一中的步骤s101-s103,相同的步骤采用相同的附图标记,这里不再赘述。然而,不同的是,在执行步骤s103之后,不是直接根据得到的血管半径进行三维模型构建,而是对步骤s103中计算得到的各个中心点的血管半径进行均值优化,然后根据均值优化后的血管半径进行视网膜血管三维模型的构建。然而,由于视网膜血管骨骼图是由多个像素点(即中心点)组成,数据量非常庞大,但是只有对应于同一血管段的中心点的血管半径有相邻的关系,因此,为了便于优化,在优化血管半径之前,首先以骨骼分叉处为分界点,对骨骼进行血管分段,然后对每个血管段中所有中心点对应的血管半径进行均值优化。通常一个骨骼分叉处处包括了至少三段血管段上的中心点,如图11所示,若为三段血管段的骨骼分叉处,则该骨骼分叉处有分别对应于该三段血管段的中心点,因此,在一具体实施例中,以骨骼分叉处为分界点,对骨骼进行血管分段的步骤,具体地包括步骤:s601,获取堆栈中预存的起点,并沿骨骼走势扫描骨骼图,得到当前血管段中每个中心点的特征参数,将每个中心点的特征参数存入对应于当前血管段的元胞数组。在一具体实施例中,预先指定一个起始点作为当前要处理的血管段的起点,并将其特征参数压栈。通常选取靠近整个图像边缘,且有血管末梢的一个血管段作为第一个处理的血管段,则指定该血管段上骨骼末梢处的中心点为整个分段处理过程的起始点,也即当前血管段的起点,如图11所示,指定末梢的中心点a作为即第一段血管段的起点,即堆栈中最初只有中心点a。在一具体实施例中,当每扫描一个中心点,就存储其特征参数,同时将其标记为已处理过的中心点;另外,在扫描到起点时,即对当前血管段进行编号。s603,判断当前是否遭遇骨骼分叉处或者血管段末梢,若为血管段末梢,则执行步骤s607,若为骨骼分叉处,则执行步骤s609。若既没有遭遇血管段末梢,也没有遭遇骨骼分叉处,则说明没有到达终点,也没有到达起点,因此,继续判断。在一具体实施例中,由于骨骼分叉处包括至少3个中心点(如图11的中心点b、c、d),且扫描时是扫描中心点周围八个方向,因此,当同时扫描到骨骼上的至少3个中心点,则判断当前处于骨骼分叉处。s607,将位于血管段末梢的中心点标记为当前血管段的终点,并将其特征参数存入对应的元胞数组,执行步骤s611。在一具体实施例中,当遭遇到血管段末梢,说明当前血管段已经处理完成,因此,该处的中心点标记为终点,以表示当前血管段处理完成。如图11所示,当第二段血管段的末梢的中心点e。s609,将骨骼分叉处对应于当前血管段的中心点标记为当前血管段的终点,并将其特征参数存入对应的元胞数组,同时,将其它的中心点作为新的起点进行压栈,执行步骤s11。在一具体实施例中,可根据骨骼的走势判断处骨骼分叉处的中心点中哪一个是对应于当前血管段的中心点,相应地,也可根据骨骼走势判断出其它中心点分别对应的血管段,从而分别将其它中心点作为各自对应血管段的起点,并压栈,如图11所示,当从中心点a沿骨骼走势扫描,遭遇到第一个骨骼分叉处o时,由于该骨骼分叉处包括三个中心点b、c、d,且中心点b对应于第一段血管段,中心点c对应于第二段血管段,中心点d对应于第三段血管段,则将中心点b标记为第一段血管段的终点,同时将中心点c、d压栈,此时,堆栈中有中心点c和d,令中心点c位于栈顶。s611,判断堆栈是否为空,若是,则执行步骤s615,若不为空,则执行步骤s613。在一具体实施例中,由于在处理的过程中,堆栈中的起点将不断被取出,也有可能有新的起点被加入,因此,在取新的起点之前需要判断是否已经被取完,即堆栈是否为空(如起点a被取出时,堆栈当下为空),若为空,则说明整个分段处理过程已经完成,若不为空(如遭遇分叉处o时起点c和d被压栈,当再次遭遇骨骼骨骼分叉处时,该堆栈中又会增加新的起点,),则说明还有待分段处理的血管段。s613,从堆栈的栈顶获取新的起点,根据新的起点沿骨骼走势扫描骨骼图,获取下一段血管段中每个中心点的特征参数,并将特征参数存入对应的元胞数组。在一具体实施例中,当处理完一段血管段,就需要重新处理另一段血管段,因此,需要从堆栈中获取另一段血管段的起点,如图11所示,若处理完第一段血管段之后,从堆栈的栈顶获取中心点c,然后对第二段血管段进行扫描处理,此时,堆栈中只剩下中心点d,当再次遭遇骨骼骨骼分叉处时,该堆栈中又会增加新的起点,由于中心点d位于栈底,因此该中心点d对应的血管段及其分支将可能是最后处理的。s615,结束血管分段操作,执行步骤s617。在一具体实施例中,该特征参数包括:每个中心点在二维骨骼图中的二维坐标,以及在三维空间中z轴坐标(待求取),对应的血管半径,每段血管段的起点、终点,血管段编号。其中每段血管段对应于一个血管段编号,且该血管段编号是每获取一个起点时即自动加1。相应地,对骨骼进行分段处理之后,再以血管段为单位,分别对每段血管段中中心点的血管半径进行优化,具体地包括步骤:s617,遍历骨骼图,寻找每个中心点对应的相邻中心点。在一具体实施例中,寻求相邻中心点,具体地可为:遍历骨骼图,在每个中心点周围八个方向(如前所述的八方位扫描法),寻找与其相差一个像素单位的像素点,若其中有位于骨骼上的中心点,即其为该当前中心点的相邻中心点,且该相邻中心点可能与该中心点属于同一段血管段,也可能属于其它血管段,例如骨骼分叉处的中心点。s619,获取当前中心点及其相邻中心点的血管半径,并计算该当前中心点及其相邻中心点的血管半径的平均值。在一具体实施例中,计算得到的该平均值即为该当前中心点优化后的血管半径值。当对所有中心点进行第一次均值优化后,还可重复上述步骤s619和s621四次到五次,即对每个中心点的血管半径进行多次均值优化,从而使得其能够达到最优化。其中,可直接在元胞数组中读取每个中心点的血管半径即可,同理相邻中心点的血管半径也可在元胞数组中读取,因此,通过计算该每个中心点自身的血管半径和相邻中心点的血管半径的平均值,并将该平均值作为该中心点的血管半径,即对该中心点的血管半径进行均值优化,从而使得该中心点处过渡平缓,对比效果如下表一和表二所示。表一优化前局部的血管半径7.070000000002.8280000000012.8280000000010000000100000010000002.82802.8280000002.82800000010000010002.8280002.82800002.82802.82802.82802.8280000表二:优化后局部的血管半径本实施例中,当对所有血管段中所有中心点各自对应的血管半径进行优化后,再根据优化后的血管半径进行三维模型构建,从而能够避免血管中呈现凸起等状况。实施例三本发明还提供了一种基于眼底图像的视网膜血管三维模型重建方法,下面结合具体的实施例和附图进行详细的说明。由于根据骨骼图中各个中心点及其对应优化后的血管半径画球,然后求并集从而得到视网膜血管三维模型,也即是说,实际上是由二维(xy)的平面空间(骨骼图和/或血管边缘图)变为三维空间(即三维模型,xyz),那么原本连续的两个点就有可能因为第三维中的z值相差太大变得不相邻、不连续,如下表三所示。表三差值前部分中心点坐标数据而要让在平面空间中连续的点在转化为三维空间后也变得连续,就必须在三维空间中两个间断的中心点之间插入若干个插值中心点,而插入的插值中心点的半径以两个间断的中心点的血管半径作为上下限。具体地,本实施例中的该视网膜血管三维模型重建方法,包括上述实施例二中的步骤s101-s105,不同是,参见图7,本实施例中,在得到优化后的血管半径之后,进行三维模型构建(即画球体求取并集)之前,需要先将二维骨骼图中的各个中心点转换到三维空间,并进行插值优化,其中,转换到三维空间的过程中之前,还需要计算每个中心点在三维空间的z轴坐标值,具体地,计算中心点的z轴坐标值的步骤,具体包括步骤:s701,获取椭球状视网膜的球心的三维坐标(x0,y0,z0)。由于人的眼球可以近似的看成一个两个短轴相等的椭球,而黄斑是眼球底部视网膜的中心,因此,可将黄斑可以看成是椭球的最低点,即椭球状视网膜的球心,那么可直接扫描黄斑的坐标即可得到球心的三维坐标,则椭球方程为:其中,a和b为椭球状视网膜的短轴,且a=b,a和b可根据黄斑到视网膜血管边缘的像素点个数计算得到,c为长轴,且a=b=1.08c。s703,根据上述公式计算视网膜血管上任意中心点在三维空间的z轴坐标值,其计算公式为:其中,由于每个中心点从二维骨骼图中转换到三维空间,只是z轴坐标的变化,因此其在三维空间中的x轴和y轴的坐标,与其在二维骨骼图中的x轴和y轴的坐标相同,即x和y是该中心点在二维骨骼图中的坐标值,可直接从元胞数组中获取到该中心点的特征参数,从而得到其对应的二维坐标值。在一具体实施例中,当计算得到各个中心点的z轴坐标值之后,存入元胞数组中相应的元素(即z轴坐标对应的元素)。在另一具体实施例中,根据上述步骤得到相邻两个中心点的z坐标后,还需要根据两者之间的差值来判断该两个中心点之间是否需要进行插值,若需要插入,则需要计算插入的插值中心点的z轴坐标值和相应的血管半径,具体地,包括步骤:s705,计算二维骨骼图中同一血管段上相邻两个中心点(x1,y1,z1)和(x2,y2,z2)的z轴坐标之间的差值。在一具体实施例中,为了便于相邻两个点之间的坐标差值的计算,预先按从起点到终点的顺序,将同一血管段中所有中心点存放在元胞数组的同一行中,得到一个新的元胞数组。即既可进行血管段分段之后即进行重新排序,也可在步骤s701或步骤s705之前,都是可以理解的。s707,判断步骤s705计算得到的z轴坐标差值是否大于预设常数0.5,若是,则执行步骤s709,否则,判定该相邻两个中心点之间不需要插值。s709,根据该z轴坐标差值计算该相邻两个中心点之间需要插入的插值中心点的个数n,其计算公式为:其中,z1和z2分别为相邻两个中心点的z轴坐标值,且z1>z2,k为n个插值中心点中第k个插值中心点,k=1,2,···,n,n为整数。s711,根据该z轴坐标差值计算n个插值中心点中每个插值中心点的z轴坐标,其计算公式为:其中,z1>z2,插值中心点(xk,yk,zk)为两个中心点之间需要插入的n个插值中心点中任意一个,且k=1,2,···,n,xk=x1,yk=y1。在一具体实施例中,根据上述公式计算得到的中心点插值后的数据如表四所示,则根据计算得到的z轴坐标值进行插值后的血管如图8b所示(图8a为差值前的对比图)。表四插值后的部分中心点数据s713,根据该相邻两个中心点之间优化后的血管半径之差,计算该相邻两个中心点之间插入的每个插值中心点的血管半径r,其计算公式为:其中,r1和r2分别为两个相邻的中心点的(优化后的)血管半径,rk为n个插值中心点中第k个插值中心点的待求取的血管半径。在一具体实施例中,当计算得到各个插值中心点的z轴坐标值和血管半径之后,存入元胞数组中相应的元素(即z轴坐标参数和血管半径参数),且当完成插值以后,再根据每个中心点及插值中心点的血管半径和z轴坐标进行三维模型构建。在一具体实施例中,计算插值中心点的血管半径时,是根据中心点优化后的血管半径计算的,当然,计算各个插值中心点的血管半径的步骤也可以是在进行画球体之前执行也是可以理解的。更进一步地,如图9a所示,可以观察到即使插值之后的视网膜血管三维模型仍不如理想的血管那样光滑,且伴有明显棱角,因此为了使得视网膜血管三维模型更加逼真,需要对所构建的三维模型进行圆滑处理。本实施例中,可通过调用matlab中的stlwrite函数将模型以stl的格式输出后导入mimics中,利用其中平滑处理程序对重建出来的模型进行圆滑处理,得到处理后的血管三维模型如图9b所示,与上图9a所得视网膜血管进行对比,处理后血管更趋近真实血管。实施例四对应于上述实施例一、二、三中的基于眼底图像的视网膜血管三维模型构建方法,本发明还提供了一种基于眼底图像的视网膜血管三维模型构建装置。下面结合具体的实施例和附图进行详细的说明。参见图10,为本发明的一种基于眼底图像的视网膜血管三维模型构建装置的一实施例的功能模块图,具体地,本实施例中,该视网膜血管三维模型构建装置,包括:图像预处理模块101,用于对预存的视网膜血管二进制图片进行预处理,获取得到视网膜血管的骨骼图和血管边缘图;数据处理模块102,用于根据经过预处理得到的骨骼图和血管边缘图,计算所述骨骼图中每个中心点各自对应的血管半径值;具体地,该数据处理模块102以每个中心点为扫描中心,以预设的血管半径初始值(例如1个像素单位)为扫描半径,按照八方位扫描法遍历该骨骼图,从而分别得到每个中心点在预设的八个方向上,且与每个中心点相距扫描半径的八个待判定像素点,然后判断其中是否包含至少一个边缘像素点,若包含至少一个边缘像素点,但其中任意一个边缘像素点所在方向相反方向的像素点不为边缘像素点,则调整该中心点的位置(具体调整策略参照上述实施例中的调整方法)后再重新扫描;或者当判断出该边缘像素点所在方向的相反方向上的像素点也为边缘像素点,则需要调整扫描半径,具体调整方法参数上述实施例一中的调整方法,这里不再赘述,最后得到该中心点的血管半径;模型构建模块103,用于以骨骼图中每个中心点为球心,以及每个中心点所对应的血管半径为球半径画球体,并求取所有球体的并集,得到视网膜血管的三维模型。进一步地,为了进一步接近真实的视网膜血管,本实施例中的该视网膜血管三维模型构建装置还包括:血管半径优化模型104,用于对上述数据处理模块103计算得到的每个中心点的血管半径进行优化;具体地,该血管半径优化模块104具体包括:分段子模块,用于以骨骼分叉处为分界点对骨骼图中的骨骼进行血管分段,得到多段血管段,具体地,该分段子模块从堆栈中获取预存的起点开始沿骨骼走势扫描骨骼图,得到各个中心点的特征参数,并存入元胞数组,扫描过程中,当遭遇到血管末梢,则将对应点标记为当前血管段的终点,然后重新获取新的起点并重新扫描,当遭遇骨骼分叉处,则将该分叉处对应与当前血管段的中心点标记为终点,将对应于其它血管段的中心点进行压栈,然后重新获取新的起点并重新扫描,具体流程图参照上述实施例二中的方法;优化子模块,用于对每段血管段中所有中心点对应的血管半径进行均值优化,具体地,该优化子模块根据血管骨骼上的中心点自身血管半径及其周围相邻中心点的血管半径取均值作为该中心点的血管半径,从而使得该中心点处能够平缓过渡,得到优化后的血管半径。参见图10,在一具体实施例中,该模型构建模块包括:第一计算子模块,用于计算视网膜血管上每个中心点在三维空间的z轴坐标值,其计算公式为:其中,a为椭球状眼球的短轴,c为椭球状眼球的长轴,且a=1.08c;第二计算子模块,用于根据各个中心点的z轴坐标值判断相邻两个中心点之间是否需要进行插值,若是,则根据相邻两个中心点的z轴坐标差值计算所需要插入的插值中心点的个数n,其计算公式为:以及根据z轴坐标差值计算每个插值中心点的z轴坐标值,并进行插值优化,其中,插值中心点的z轴坐标值计算公式为:其中,z1和z2分别为相邻像个中心点的z轴坐标值,且k为需要插入的n个中心点中的第k个中心点,k=1,2···n。由于血管每段占据元胞数组的每一行,并且是依次读取,依次存放的,所以该行上所有相邻两点在骨架图中均有真实的相邻关系,因此,将该预设常数设置为0.5。相应地,上述的模型构建模块103还包括构建子模块,用于根据插值后的血管段,以及每个中心点优化后的血管半径和每个插值中心点的血管半径进行三维模型的构建,即以该中心点和插值中心点为球心,各自的血管半径为球半径画球体,求取并集得到视网膜血管三维模型。更进一地,本实施例中的该视网膜血管三维模型构建装置还包括模型优化模块,用于对上述的模型构建模块103所构建的三维模型进行平滑处理。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1