ptv算法设计与编程实现(编辑修改稿)内容摘要:

( 214) ( 215) 其中: , i 为第一帧图像中目标粒子的下标, ε为第 i 个目标粒子可能匹配粒子的下标, ε=1,2,j, k 为第 i 个目标粒子的邻域粒子的下标, k=1,2,3,4; l 为邻域粒子可能匹配的粒子的下标; A,B 为松弛系数, A1, B1, B/A 越大收敛速度越快, n 为迭代次数,在实际应用中应该选择最合适 的一组松弛系数进行计算,一般 A=,B=4。 Step 4:上述几个式子构成迭代公式,当经过 4,5 次迭代以后,正确的匹配粒子的匹配概率会迅速增大,不正确的匹配粒子的匹配概率会迅速减小。 最后,选择所有匹配粒子中匹配概率最大的一个作为目标粒子的匹配粒子。 算法优点:该算法仅仅只需要对两帧连续图像进行处理,而且还考虑了第一帧中有的粒子跑出平面,也就是在第二帧图像中无匹配粒子这种情况,更加符合实际情况,算法采用的图示法更较为简单易懂; 算法缺点:算法对实验参数的变化非常敏感,轻易改变某个参数就会对匹配的结果产生 影响,所以对不同的图像,需要选取不同的参数来进行处理。 适用性:对于高速的流场,粒子运动速度较快,并且在光平面停留得时间比较短时,可以使用该算法。 3 PTV 匹 配算法及其验证 11 3 PTV 匹配算法及其验证 匹配算法评价方法 为了能从上面的四种 PTV 算法中选出最合适的一种算法进行改进并实现,我们首先得知道怎么去评价一种算法的好坏。 评价一种 PTV 匹配算法的优劣,主要是从两个方面进行考虑:运算效率和算法精度。 运算效率即算法运算所需的时间长短,算法精度即算法处理结果的准确性高低。 通常情况下,如果一种算法的原理比较简单,那么其运算效率也会比较高 ,但是相应的算法准确性就会比较差,因此无法满足精度上的要求;而如果一种算法的原理比较复杂,那么其精度一般也较高,但是相应的运算效率则会非常低,算法也会难以应用到实际生产生活当中。 总的来说,运算效率和算法精度二者很难兼得,我们只能使一种算法在运算效率和算法精度上能相对平衡,从而对该算法的优缺点以及适用性进行衡量。 匹配算法原理对比分析 通过对以上四种算法原理上的分析,最终选择了匹配几率法作为接下来我们深入研究的一种算法,选择它的原因主要基于以下几个原因:首先,相比与简单的最近邻法,该算法的优势明显,因为最近邻 法虽然原理简单,但是算法精度相当低,粒子错误匹配的概率非常高,在实际生活中用处很小;其次,匹配几率法对比与四帧图像粒子跟踪算法,由于四帧图像粒子跟踪算法要处理四帧图像,所以运算时间较长,运算效率低,而且连通率和精确度都不好,对低密度粒子更敏感;最后,对比与 PCSS 算法,因为 PCSS 算法对于第一帧图像中的每一个粒子都会在第二帧中找到一个粒子与之相匹配,这样,就容易使一些第一帧图像中存在的粒子但是在第二帧中跑出光平面的粒子匹配一些错误的粒子,但匹配几率法不会出现这样的情况,它会把这样的粒子去掉,而不会给它匹配错 误的粒子,所以精度相比于 PCSS 算法更高。 所以接下来将对匹配几率法进行编程实现并通过几个模拟流场对它进行进一步研究。 12 算法改进、实现与验证及其分析 算法改进与实现 通过上面的四种匹配算法的对比分析,我们选择了匹配几率法进行研究,为了检验算法我们选择了通过计算机生成模拟流场来对其进行测试,在这个研究中,我们选择了两个流场进行检验:水平粒子流动的流场和绕原点旋转的流场。 匹配几率法在上面介绍时首先要满足 3 个基本特征: 最大速度特征。 即在流场中已知有一个最大速度 u 的粒子 ,然后它最多可以在两张图像之间的间隔位移是 U△t,因此当给定粒子在第一张图像中的位置时,这个粒子在第二张图片中出现的的位置就会受到限制。 也就是说,所有示踪粒子在两帧图像时间间隔内的位移都必须小于一个确定值 R2,关于这个特征,其代码如下: for i=1:n if f2(i,1)~=0 d=sqrt((f2(i,1)f1(k,1)).^2+(f2(i,2)f1(k,2)).^2)。 %表示第一帧图像中 %的目标粒子 i 和第二帧图像中任意粒子的距离 if d=Tm %这里的 Tm 表示的就是候选粒子最大阈值,即上面说的 R2 T(1,i)=d。 end end end 流场区域特征。 以第一帧图像中的 Xi 粒子位置为圆心, R3 为半径画一个圆,这个区域被认为是粒子的邻域范围,在这个范围内,示踪粒子的速度范围应该基本相同。 也就是找出目标粒子的邻域粒子,其代码如下: for j=1:n if f1(j,1)~=0amp。 amp。 f1(j,1)~=f1(k,1) d=sqrt((f1(1:n,1)f1(i,1)).^2+(f1(1:n,2)f1(i,2)).^2)。 %表示第一帧图 %像中的目标粒子 i 在第一帧图像中的所有邻域粒子的距离 if d=Tn %这里 的 Tn 表示的就是邻域粒子的最大阈值,即上面说的 R3 R(1,j)=d。 3 PTV 匹 配算法及其验证 13 end end end 基本相同的矢量之差的模应在一个微小的范围内,误差圆半径为 R4。 其代码如下: Dispx =f2(ind{k}(j),1)f1(k,1)。 dispy=f2(ind{k}(j),2)f1(k,2)。 for i=1:nn(k) l=find((f2(:,1)f1(aneb(i),1)dispx).^2+(f2(:,2)f1(aneb(i),2)dispy).^2=Tp^2)。 %这里 的 Tp 表示的就是误差圆半径 R4 end 然后根据以上的 3 个特征进行下面的步骤: 步骤一:按照最大速度特征找出第一帧图像中示踪粒子 i 在第二帧图像中所有可能的的匹配粒子,初始时刻假定示踪粒子 i 的所有匹配粒子的匹配概率(其中包括一个不匹配的概率)值都相同,即它们的分布是均匀的。 步骤二:按照流场区域特征找出第一帧图像中示踪粒子 i 的所有邻域粒子,并且对每一个邻域粒子进行步骤一操作,这样便可以得到第一帧图像中每一个粒子在第二帧中所有可能匹配的粒子以及相应的匹配概率。 其代码如下: if ns(i)=1 %ns(i)表 示示踪粒子 i 的可能匹配粒子数目 p(i,can(:))=1/(ns(i)+1)。 %目标粒子 i 的初始匹配概率 p(i,n+1)=1/(ns(i)+1)。 %目标粒子 i 的初始不匹配概率 else p(i,n+1)=1。 %目标粒子 i 的初始不匹配概率 end 步骤三:当通过步骤一对示踪粒子 i 进行处理后,得到的可能匹配的粒子,对于每一个匹配粒子相应的会有匹配的速度向量,然后根据速度向量基本相同的这个特征,依次在其邻域的粒子的所有可能匹配粒子中寻找相似的速度向量,并把所有相似速度向量的匹配概率用第二章提到的几个式子求和并 归一化。 其代码如下: p(i,ind{i}(j))=A*p(i,ind{i}(j))+B*q(i,ind{i}(j))。 %式中 A 一般取 , B 一般取 4 14 p(i,ind{i}(1:ns(i)))=p(i,ind{i}(1:ns(i)))/(sum(p(i,ind{i}(1:ns(i))))+p(i,n+1))。 %目标粒子 i 所有可 %能的匹配概率 p(i,n+1)=p(i,n+1)/(sum(p(i,ind{i}(1:ns(i))))+p(i,n+1))。 %目标粒子错误匹配概率 算法的改进 :在上述的算法中进行 了一个小小的改进,假如在选择相似向量的时候,当目标粒子选择一个候选粒子,而在目标粒子的某个邻域粒子的候选粒子中有两个以上的粒子满足三个特征,那么就在这些候选粒子中选择速度向量和目标向量最接近的那一个,即选取最小值。 其代码如下: if length(l)0 %这里的 l 表示的是满足特征 3 中相似向量的邻域粒子及候选 %粒子 x=length(l)。 %邻域粒子中满足特征 3 的候选粒子个数 mm=zeros(1,x)。 for jj=1:x mm(jj)=(f2(l(jj),1)f1(aneb(i),1)dispx).^2+(f2(l(jj),2)f1(aneb(i),2)dispy).^2。 %对候选粒子再 %做一次特征 3 中向量差的长度并且存在 mm 中 end [yy,uu]=min(mm)。 %在 mm中选出最小的那一个值,即速度向量最相似的那一个 y=l(uu)。 %将最合适的这个粒子的位置传递给 y 一般通过 5 次迭代以后,正确的匹配概率就会越来越接近于 1,错误的匹配概率就会越来越接近于 0,接下来用水平粒子运动和绕原点的旋转运动两种模拟流场检验该算法。 模拟流场对算法的验证 水平粒子流动: 通过 matlab 随机生成一个模拟的水平流场,假设粒子 X 方向的速度 u=4m/s,Y 方向的速度 v=0。 两帧图像之间的间隔为 1s,则实现该流场的代码如下: A=randperm(200)。 B=randperm(200)。 %A 和 B 为随机生成的 200 个数 t=1。 %两帧图像的时间间隔 3 PTV 匹 配算法及其验证 15 u=4。 %粒子 X 方向的速度 v=0。 %粒 子 Y 方向的速度 for i=1:100 F1x(i)=A(i)。 %第一帧图像粒子的横坐标 F1y(i)=B(i)。 %第一帧图像粒子的纵坐标 F2x(i)=F1x(i)+u*t。 %第二帧图像粒子的横坐 标 F2y(i)=F1y(i)+v*t。 %第二帧图像粒子的横坐标 End 其正确的图像如 图 31 所示,通过匹配几率法匹配后的图像如图 32 所示。 图 31 16 图 32 参数 Tm, Tn, Tp 以及速度 u 对匹配算法的影响 Tm 对算法的影响: 图中红色原点表示第一帧图像的粒子,蓝色原点表示第二帧图像中的粒子 这里算法中参数分别是的 Tm=30, Tn=20,Tp=10,u=4m/s,v=0,t=1。 从图中可以看出只有少数粒子匹配错误,匹配正确的概率在 左右,这个相比与其他算法,精 确度很高。 上面图像出现错误匹配的粒子的原因可以很容易知道,因为上述参数中 Tm=30,也就是允许第一帧目标粒子和第二帧目标粒子的最大距离不超过 30,显然,根据原图像中粒子的分布特点可以看出,因为个别粒子群密度大,所以这个值相对来说偏大,就会造成个别粒子匹配的过程中,选到多个候选粒子,并且候选粒子都满足上述的 3 个特征,即都在 Tn 和Tp 范围内,最终在迭代过程中会被误认为是正确匹配的粒子而越发的增大,最终造成错误的匹配,为了更加形象的说明 Tm对匹配算法的影响,我们将它的值变小,比如令 Tm=10,其他参数不变,则正确 的图像如 图 33 所示 ,匹配后的图像如图 34 所示。 3 PTV 匹 配算法及其验证 17 图 33 18 图 34 可以看出,当 Tm值变小时,匹配精确度会更高,但是这仅仅是对水平运动的粒子,因为水平运动的粒子,如果选的时间间隔很小,并且运动速度也很慢的时候,可以得到离它最近的粒子就是和它正确匹配的粒子,这也就是水平运动比较慢的粒子可以使用最近邻法来匹配的原因。 Tn 对算法的影响 为了能更好的说明 Tn 对算法的影响,首先要排除最大的干扰就是 Tm,因为从上面我们可以知道,这是水平运动,且速度慢,所以 Tm 对图像的影响是巨大的,即如果 Tm取得很 小,比如取到 4,那么根据上面的数据可以知道所有的粒子匹配的粒子都是正确的,而且只有一个候选粒子,那么该算法就失去了意义,所以让 Tm 的值取得大一些,让目标粒子的候选粒子多一些,那么变化 Tn 的值就可以比较明显的看到影响了。 我们选择的参数是 Tm=100, Tn=50,Tp=10,其他关于粒子的速度都和上面一样,当然由于粒子每一次都是随机生成的,所以粒子坐标是不一样的,但不影响对算法的讨论。 当 Tn=50 时,正确的图像如图 35 所示,匹配后的图像如图 36 所示。 3 PTV 匹 配算法及其验证 19 图 35 20 图 36 现在我们将 Tn 的值变为 10, 其他值不 变的时候,其正确的图像如图 37 所示,匹配后的图像如图 38 所示。 3 PTV 匹 配算法及其验证 21 图 37 22 图 38 当我们不断变化 Tn 的值时,发现如果 Tm 和 Tp 的值如果确定了, Tn 的值其实对最后的匹配图像影响很小,因为 Tn 值表示的是目标粒子选择自己邻域粒子的阈值,所以如果它越大,那么目标粒子的邻域粒子就会越多,同时执行一次迭代的计算时间也会变长,但是理论上分析,增加邻域粒子的个数会对最后匹配正确的粒子产生影响的,也就是会影响精确度,因为增加了邻域粒子个数就会增加相似的速度向量,那么根据特征 3 就可以得到一个目标粒子可能在 迭代的时候有多个匹配的粒子,最终会使粒子产生错误的匹配。 如图中所示,可以看到第一帧图像中多个粒子匹配了第二帧中的。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。