本发明属于光栅投影三维测量技术领域,具体涉及一种基于改进遗传算法的快速最短枝切搜索方法。
背景技术:
枝切法速度快,不会产生误差传播,将误差缩小至小范围内;且相较于最小范数法,面形恢复一致性较好。当残差点数量和分布一定时,显而易见,构造的枝切线总长越短,所占用的好的像素点会越少,从而会有更多的展开路径可以选择,特别是残差点密集区域更为重要。而goldstein枝切线构造方法是局部寻优,其枝切线长度不一定是最短的;且在残差点密切区域,容易形成自我封闭,从而使封闭区域中的好的像素点无法正确展开,导致误差扩大化。
最近邻算法速度快,但属于局部搜索算法。遗传算法(geneticalgorithm,ga)是一种基于生物群落进化规律的全局搜索算法,它模仿基因在后代中的进化,从而导致更好的基因的原理。如果将最近邻算法和ga结合,能快速找到最短枝切线。
技术实现要素:
为克服上述现有技术的不足,本发明的目的是提供一种基于改进遗传算法的快速最短枝切搜索方法,解决现有技术中的枝切线构造过长、容易自我封闭的问题,具有搜索速度快、寻优能力好的特点。
为实现上述目的,本发明采用的技术方案是:一种基于改进遗传算法的快速最短枝切搜索方法,包括以下步骤:
步骤1,残差点识别、数量匹配与残差点编码,具体做法是:
1)扫描整幅包裹相位图,识别出正、负残差点,并将正、幅残差点在包裹相位图中的行列号分别记录在两个矩阵中,记为正残差点行列号矩阵和负残差点行列号矩阵;
2)残差点编码时,最大编码为正、负残差点数量的最大值,依据公式(2),当正、负残差点的数量不一致时,残差点数量少的需要补充至两者相等;补充的残差点的行列号为(0,0),行列号为(0,0)的残差点既可以作为正残差点,也可以作为负残差点,即相当于图像的四边界,
n=max{no_positive,no_negative}(2)
式中,no_positive为正残差点的数量,no_negative为负残差点的数量,n为最大编码;
当一个普通残差点与一个行列号为(0,0)的特殊残差点匹配时,适应度函数采用公式(3),公式(3)表示残差点与四边界之间的最近距离,
fitness=min{xi,yi,(width-xi),(length-yi)}(3)
式中,width为包裹相位图的宽,length为包裹相位图的长,(xi,yi)为普通残差点的行列号;
步骤2,负残差点初始种群的生成
正残差点的染色体序列只有一个,且固定不变,
a、随机产生m种具有不同排序的负残差点的染色体序列;
b、采用最近邻算法产生n种有不同排序的负残差点的染色体序列,且为了实现种群多样性,所有产生的染色体序列与步骤a中的染色体序列互不相同;
c、共生成m+n种染色体序列的初始种群,为了实现后面的交叉算子,m+n应为偶数,即染色体交叉算子配对的数目为[(m+n)/2];
步骤3,选择算子
采用适者生存的自然选择法则,以适应度函数为评价标准,在当前的群体中,寻找适用度最佳的k(k<[(m+n)/2])种染色体序列来替换适应度最差的k种染色体序列,因此,优良的父染色体序列具有更大的概率将染色体传递给子染色体序列;
步骤4,交叉算子
以交叉概率pc实施交叉算子,如果有(m+n)种染色体序列的初始种群,相邻的两个染色体序列形成交叉对,则交叉对的数目为[(m+n)/2];然后,将交叉对染色体序列的一串基因交换,并将重复的基因替换,生成两个新的子染色体;
步骤5,变异算子
以变异概率pm实施变异算子,其原理是在同一染色体序列上随机选择两个基因并互换它们,变异后将产生一个新的染色体来改善种群多样性,类似于交叉算子,如果新的子染色体更适合,则父染色体被子染色体取代;否则,父染色体被保留,子染色体丢失;变异算子的具体做法参照已有的遗传算法。
步骤4所述的交叉算子,其操作步骤如下:
a、在交叉对染色体序列上随机选取两个交叉点,交叉点分别记为crosspoint(1)和crosspoint(2);
b、交叉点crosspoint(1)和crosspoint(2)之间的基因串互换,crosspoint(1)=5,表示交叉点位置,不是基因编码数据,crosspoint(2)=8;染色体序列1的crosspoint(1)和crosspoint(2)之间的基因串为7-,6-,2-,8-,染色体序列2的crosspoint(1)和crosspoint(2)之间的基因串为3-,5-,4-,6-;交互之后,染色体序列1替换为5-,4-,1-,9-,3-,5-,4-,6-,3-,染色体序列2替换为7-,8-,2-,1-,7-,6-,2-,8-,9-;
c、基因串交叉完成后,当基因编码存在重复时,参照现有遗传算法的交叉算子解决;
d、如果生成的子染色体序列适应度更好,则父染色体序列会被子染色体序列替换,否则,父染色体序列被保留而子染色体序列被遗弃;
本发明的有益效果是:
本发明采用基于改进遗传算法的快速最短枝切搜索算法,不但能快速构建全局最优的枝切线,且不易产生自我封闭,因此测量精度提高。
枝切法是在最大搜索半径内将所有残差点连接,如果正、负残差点数量相等则枝切线构造完毕。如果正、负残差点数量不相等则扩大搜索半径。这种方法容易产生枝切线自我封闭。所提出的方法由于正、负残差点是两两连接构造枝切线,不易产生枝切线自我封闭。
所提出的方法能够构造最短的枝切线,而构造的枝切线总长越短,所占用的好的像素点会越少,从而会有更多的展开路径可以选择,相位展开精度以及测量精度更好。
所提出的方法采用最近邻算法对初始种群进行了优化,因此最优枝切线的搜索与构建更快。
附图说明
图1(a)是正、负残差点的配对图。
图1(b)是正、负残差点的连接图。
图2是交叉算子图。
图3是变异算子图。
图4(a)是本发明被测物体的正、负残差点序列图。
图4(b)是本发明某一被测物体的残差点分布图。
图4(c)是本发明迭代5时的枝切线构造图。
图4(d)是本发明迭代10时的枝切线构造图。
图4(e)是本发明迭代15时的枝切线构造图。
图4(f)是本发明迭代20时的枝切线构造图。
图4(g)是本发明迭代5时的三维恢复图。
图4(h)是本发明迭代10时的三维恢复图。
图4(i)是本发明迭代15时的三维恢复图。
图4(j)是本发明迭代20时的三维恢复图。
图5(a)是某一被测物体的残差点分布图。
图5(b)是基于goldstein(msr=64)构建的枝切线图。
图5(c)是基于goldstein(msr=4)构建的枝切线图。
图5(d)是基于hga构建的枝切线图。
图5(e)是基于ea构建的枝切线图。
图5(f)是本发明构建的枝切线图。
图5(g)是基于itoh恢复的三维面形图。
图5(h)是基于goldstein(msr=64)恢复的三维面形图。
图5(i)是基于goldstein(msr=4)恢复的三维面形图。
图5(j)是基于hga恢复的三维面形图。
图5(k)是基于ea恢复的三维面形图。
图5(l)是基于本发明恢复的三维面形图。
图6(a)是被测物体兔子模型的噪声变形条纹图。
图6(b)是被测物体兔子模型的包裹相位图。
图6(c)是基于goldstein(msr=16)构建的枝切线图。
图6(d)是基于hga构建的枝切线图。
图6(e)是基于ea构建的枝切线图。
图6(f)是基于本发明构建的枝切线图。
图6(g)是基于itoh恢复的三维面形图。
图6(h)是基于goldstein(msr=16)恢复的三维面形图。
图6(i)是基于hga恢复的三维面形图。
图6(j)是基于ea恢复的三维面形图。
图6(k)是基于本发明恢复的三维面形图。
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
参见图1(a)~(b)、图3,本发明首次提出一种基于改进遗传算法的快速最短枝切搜索算法,该算法以正、负残差点两两匹配代替旅行商问题中的路径,不易出现枝切线自我封闭;采用类似于遗传算法的选择、交叉和变异算子进行全局寻优,适应度函数为匹配的正、负残差点之间的欧式距离,其中正残差点的染色体序列固定,而将负残差点染色体序列不断调整优化,并利用最近邻算法对初始种群进行优化,以提高收敛速度。此外,当正、负残差点数量不一致时,需要补偿数量少的残差点,并且当非补充残差点与补充的残差点匹配时,适应度函数将更换,即更换为非补充残差点与四边界之间的最短距离。该算法具有快速搜索出最短枝切线的能力。
本发明的方法,基于以下理论:
1)编码方法
将所有的正残差点编码成正染色体序列,该序列确定后是固定不变的;负残差点所构成的染色体序列是不断变化的,即运算过程中对负残差点的染色体序列进行优化调整,配对后的正、负残差点及其枝切线连接方式如附图1(a)~(b)所示;
2)适应度函数
利用一个适应度函数对染色体序列进行评价,适应度函数是染色体序列中所有配对正、负残差之间的欧式距离之和,公式如下
式中,(xi+,yi+)是第i个正残差点在矩阵中的索引号(即行号和列号),(xi-,yi-)是第i个负残差点在矩阵中的索引号,n是配对残差点数量;
本发明所提的算法
步骤1,残差点识别、数量匹配与残差点编码
1)扫描整幅包裹相位图,识别出正、负残差点,并将正、幅残差点在包裹相位图中的行列号分别记录在两个矩阵中,记为正残差点行列号矩阵和负残差点行列号矩阵;
2)残差点编码时,最大编码为正、负残差点数量的最大值,如公式(2),当正、负残差点的数量不一致时,残差点数量少的需要补充至两者相等,补充的残差点的行列号为(0,0),行列号为(0,0)的残差点既可以作为正残差点,也可以作为负残差点,即相当于图像的四边界,
n=max{no_positive,no_negative}(2)
式中,no_positive为正残差点的数量,no_negative为负残差点的数量,
当一个普通残差点与一个行列号为(0,0)的特殊残差点匹配时,适应度函数不再使用公式(1),替代公式为(3),它表示残差点与四边界之间的最近距离;
fitness=min{xi,yi,(width-xi),(length-yi)}(3)
式中,width为包裹相位图的宽,length为包裹相位图的长,(xi,yi)为普通残差点的行列号;
步骤2,负残差点初始种群的生成
正残差点的染色体序列只有一个,且固定不变,
1)随机产生m种具有不同排序的负残差点的染色体序列;
2)采用最近邻算法,产生n种有不同排序的负残差点的染色体序列,且为了实现种群多样性,所有产生的染色体序列与上述(1)中的染色体序列互不相同;
3)共生成(m+n)种染色体序列的初始种群。为了实现后面的交叉算子,(m+n)应为偶数,即染色体交叉算子配对的数目为[(m+n)/2];
步骤3,选择算子
采用“适者生存”的自然选择法则,以适应度函数为评价标准。在当前的群体中,寻找适用度最佳的k(k<[(m+n)/2])种染色体序列来替换适应度最差的k种染色体序列,因此,优良的父染色体序列具有更大的概率将染色体传递给子染色体序列;
步骤4,交叉算子
以交叉概率pc实施交叉算子。如果有(m+n)种染色体序列的初始种群,相邻的两个染色体阵列形成交叉对,则交叉对的数目为[(m+n)/2]。然后,将交叉对染色体序列的一串基因交换,并将重复的基因替换,从而生成两个新的子染色体,交叉算子的操作如下;
1)在交叉对染色体序列上随机选取两个交叉点,交叉点分别记为crosspoint(1)和crosspoint(2);
2)交叉点crosspoint(1)和crosspoint(2)之间的基因串互换。如附图2所示,crosspoint(1)=5(表示交叉点位置,不是基因编码数据),crosspoint(2)=8,染色体序列1的crosspoint(1)和crosspoint(2)之间的基因串为(7-,6-,2-,8-),染色体序列2的crosspoint(1)和crosspoint(2)之间的基因串为(3-,5-,4-,6-),交互之后,染色体序列1替换为(5-,4-,1-,9-,3-,5-,4-,6-,3-),染色体序列2替换为(7-,8-,2-,1-,7-,6-,2-,8-,9-);
3)基因串交叉完成后,当基因编码存在重复时,采用附图2所示过程解决;
4)如果生成的子染色体序列适应度更好,则父染色体序列会被子染色体序列替换,否则,父染色体序列被保留而子染色体序列被遗弃;
步骤5,变异算子
以变异概率pm实施变异算子。其原理是在同一染色体序列上随机选择两个基因并互换它们。变异后将产生一个新的染色体来改善种群多样性。类似于交叉算子,如果新的子染色体更适合,则父染色体被子染色体取代;否则,父染色体被保留,子染色体丢失。附图3显示了变异算子的过程。
测量精度对比与分析
被测物体为4*peaks,其中peaks是matlab提供的一个函数,图像尺寸为256×256pixels,如附图4(a)所示。附图4(b)为残差点分布,其中白色和黑色点分别代表正和负残差点。附图4(c)、图4(d)、图4(e)和图4(f)为基于所提算法构建的不同迭代次数时的枝切线分布,附图4(g)、图4(h)、图4(i)和图4(j)为基于所提算法构建的不同迭代次数时的三维面形。结果表明,随着迭代的进行,枝切线逐步变短,三维重建面形也逐步接近于原被测物体。表1为种群数量为100时,不同迭代次数的枝切线长度和执行时间。当迭代次数为20时,枝切线的总长度为448pixels,已经近似为最优值。
被测物体为2*peaks,图像尺寸为128×128pixels。采用goldstein枝切法,将goldstein枝切法的最大搜索半径定义为msr(maximumsearchradius)。如果某残差点在其3×3(msr=3)邻域内没有被平衡,则搜索半径扩展到5×5(msr=5),甚至扩展到图像的边缘(msr=64)。如果存在许多单极残差点(即残差点是孤立的并且周围没有匹配的反残差点),或者残差点局部分布是密集的,则由goldstein枝切法构造的枝切线长度不是全局最优的,并且枝切线常常存在自我封闭。例如,图5(a)~(l)是不同方法的结果对比。对于附图5(a)所示的残差点分布,goldstein枝切法(msr=64)构造枝切线如附图5(b)所示,由于msr较大,构造的枝切线较长,严重影响了相位展开精度,三维恢复面形如附图5(h)所示。但是,如果将msr设置为较小的数值,如msr=4,虽然构造的枝切线较短,但一些残差点可能无法平衡,如附图5(c)所示,其构造的枝切线没有覆盖所有的残差点,因此相位误差沿着展开路径传播,形成“拉线”现象,如附图5(i)所示。附图5(g)为itoh所提出的基本相位展开方法的相位误差传递问题。
英国约翰摩尔大学的karout等针对bcp特点,提出了一种混合遗传算法(hga)用于解决bcp。东南大学郑东亮等提出一种基于学习算法的枝切相位展开(ea)。图5(j)、图5(k)和图5(l)为初始种群为100、迭代30次时,分别采用hga、ea和所提算法bcmga得到的结果,三种方法都能找到最短枝切线,且三种方法的结果明显优于其他方法。
表2对比了不同方法的枝切线长度和执行时间。虽然msr=4的goldstein枝切法提供了最短的分支切割,但是一些残差点没有被平衡,导致相位误差沿着展开路径传播,导致误差扩大化。相反,如果msr=64,则goldstein枝切法的枝切线是最长的,相位展开误差较大。在保证所有残差点平衡的前提下,hga、ea和所提算法bcmga都能构造比msr=64的goldstein枝切法更短的枝切线。虽然goldstein枝切法可能有一个合理的msr,该合理的msr能够使其生成较为理想的枝切线和良好的展开相位,但是在不同测量对象和不同噪声水平的情况下,无法确定一个合理的msr。hga、ea和所提算法bcmga不存在上述问题,三种方法都能找到最短枝切线,但所提算法bcmga的执行时间比hga和ea算法短,表明了所提算法具有更快的收敛速度。
实验结果
相机采集的变形条纹存在噪声干扰,如附图6(a)所示。利用小波变换法计算得到包裹相位,如附图6(b)所示。附图6(c)为基于goldstein枝切法(msr=16)得到的枝切线分布。附图6(d)、图6(e)和图6(f)分别为基于hga、ea和所提算法bcmga得到的枝切线分布。附图6(g)、图6(h)、图6(i)、图6(j)和图6(k)分别为基于itoh算法、goldstein枝切法(msr=16)、hga、ea和所提算法bcmga得到的三维面形。由于基于智能优化的三种算法都能找到最短的枝切线,因此它们的测量结果是相似的,但所提算法bcmga的优点是具有更高的测量效率,参见表3所示。
表1是不同迭代时的执行时间和枝切线长度。
表2是多种算法的执行时间和枝切线长度的对比。
表1
表2
表3
表3对比了不同方法的枝切线长度和执行时间。goldstein枝切法(msr=16)的枝切线是最长的,hga、ea和所提方法的枝切线长度一致,但所提方法的执行时间更短,效率更高。