发明名称 以二维对比度为特征帧匹配测量位移的方法及装置
摘要 以二维对比度为特征帧匹配测量位移的方法及装置,由一个计算机摄像头与一台普通的计算机组成;先在参考帧内提取x轴和y轴方向的边方向数据,作为被测物体反射图像的二维特征;对于各个轴方向,分别计算边方向数据的自关联系数,得到各自适合被测物反射面的最佳比较窗像素阵列,取其大者作为比较窗像素阵列;再分别沿各个坐标轴方向,把比较窗与取样帧进行边方向数据的交叉关联匹配计算,取其交叉关联系数值最大者作为最佳匹配者,籍此获得各个轴向的二维位移,取其平均值作为本次测量的位移;据此,调整比较窗的位置或更新参考帧,调整交叉关联匹配算子阵列的规模,以减少计算量,提高测量精度;本发明进一步克服了环境光照变化对测量的影响。
申请公布号 CN102022982B 申请公布日期 2013.02.27
申请号 CN200910190925.6 申请日期 2009.09.22
申请人 重庆工商大学 发明人 曾艺
分类号 G01B11/02(2006.01)I;G06T7/00(2006.01)I 主分类号 G01B11/02(2006.01)I
代理机构 代理人
主权项 一种以二维对比度为特征帧匹配测量位移的方法,它利用一台普通的计算机安装一个计算机摄像头测量二维位移,其特征在于,该方法通过所述摄像头拍摄并根据二维边方向数据实施帧匹配测量二维位移,包括下列步骤:步骤一、以位图M×N的格式拍摄一帧被测物体的图像,其中,M、N∈正整数,作为参考帧;以该帧像素阵列左上角的第一个像素的位置为原点,向右方向为X轴方向,垂直向下方向为Y轴方向;在所述像素阵列的中央区域选取一个区域,规模为m×n,其中,m=m0,n=n0,m0、n0∈正整数,称之为比较窗,它距离所述像素阵列的水平方向和垂直方向的边缘像素各有h和v个像素,即有:m0+2h=M,n0+2v=N,h、v∈正整数;步骤二、对于上述参考帧之像素阵列,逐像素行、逐像素列导出沿X轴方向和Y轴方向的边方向数据,并以3bit的二进制数值001,010和100分别表示其中的正边、负边以及第三类边,如此构成了对应所述参考帧像素阵列的关于X轴方向和关于Y轴方向的两帧边方向数据{referencex(x,y)}和{referencey(x,y)},其中,下标x或y表示所沿的坐标轴的方向,符号“{}”表示沿其中函数下标所标示的坐标轴方向比较窗内诸像素(x,y)处的边方向数据reference(x,y)的一个集合,这种表示方式适用于后面的步骤;保存这些数据;步骤三、对于上述两帧边方向数据,分别计算所述参考帧里比较窗的像素阵列的自关联匹配系数: <mrow> <mi>auto</mi> <mo>_</mo> <msub> <mi>correlation</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mi>a</mi> <mo>,</mo> <mi>b</mi> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mi>&Sigma;</mi> <mrow> <mi>y</mi> <mo>=</mo> <mi>v</mi> <mo>+</mo> <mn>1</mn> </mrow> <mrow> <mi>v</mi> <mo>+</mo> <mn>1</mn> <mo>+</mo> <mi>n</mi> </mrow> </munderover> <munderover> <mi>&Sigma;</mi> <mrow> <mi>x</mi> <mo>=</mo> <mi>h</mi> <mo>+</mo> <mn>1</mn> </mrow> <mrow> <mi>h</mi> <mo>+</mo> <mn>1</mn> <mo>+</mo> <mi>m</mi> </mrow> </munderover> <mo>[</mo> <msub> <mi>reference</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mi>x</mi> <mo>,</mo> <mi>y</mi> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <msub> <mi>reference</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mi>x</mi> <mo>+</mo> <mi>a</mi> <mo>,</mo> <mi>y</mi> <mo>+</mo> <mi>b</mi> <mo>)</mo> </mrow> <mo>]</mo> </mrow> <mrow> <mi>auto</mi> <mo>_</mo> <msub> <mi>correlation</mi> <mi>y</mi> </msub> <mrow> <mo>(</mo> <mi>a</mi> <mo>,</mo> <mi>b</mi> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mi>&Sigma;</mi> <mrow> <mi>v</mi> <mo>=</mo> <mi>v</mi> <mo>+</mo> <mn>1</mn> </mrow> <mrow> <mi>v</mi> <mo>+</mo> <mn>1</mn> <mo>+</mo> <mi>n</mi> </mrow> </munderover> <munderover> <mi>&Sigma;</mi> <mrow> <mi>x</mi> <mo>=</mo> <mi>h</mi> <mo>+</mo> <mn>1</mn> </mrow> <mrow> <mi>h</mi> <mo>+</mo> <mn>1</mn> <mo>+</mo> <mi>m</mi> </mrow> </munderover> <mo>[</mo> <msub> <mi>reference</mi> <mi>y</mi> </msub> <mrow> <mo>(</mo> <mi>x</mi> <mo>,</mo> <mi>y</mi> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <msub> <mi>reference</mi> <mi>y</mi> </msub> <mrow> <mo>(</mo> <mi>x</mi> <mo>+</mo> <mi>a</mi> <mo>,</mo> <mi>y</mi> <mo>+</mo> <mi>b</mi> <mo>)</mo> </mrow> <mo>]</mo> </mrow>式中,运算符号·表示二进制逻辑与运算,其运算结果或为逻辑0或为逻辑1,运算符号“[]”表示取其中的逻辑运算函数所对应的数值,或为数值0,或为数值1,参数变量a、b的组合决定了关联匹配算子阵列的规模,取3×3关联匹配算子阵列:a=‑1,0,1,b=‑1,0,1,因此,沿每个坐标轴方向各自会产生9个自关联匹配系数auto_correlationx(a,b)和auto_correlationy(a,b);步骤四、根据上述两帧边方向数据对应的自关联匹配系数,分别搜索在目前的物体表面状况以及照明状况下可以进行匹配比较的最佳比较窗像素阵列:mx=m0‑step,nx=n0‑step,2h=M‑mx,2v=N‑nx和my=m0‑step,ny=n0‑step,2h=M‑my,2v=N‑ny,式中,下标x、y分别表示其值对应着沿X轴方向和Y轴方向;取此两组值中阵列规模大者为比较窗阵列的规模:m×n;步骤五、经过一段时间Δt,拍摄第二帧位图,作为取样帧;逐行、逐列确定该取样帧中像素沿X轴方向和Y轴方向的边方向数据,分别以3bit的二进制数值001,010和100表示其中的正边、负边以及第三类边,如此获得取样帧的两帧边方向数据{comparisonx(x,y)}和{comparisony(x,y)},保存这些数据;步骤六、沿X轴方向和Y轴方向,对应所述参考帧和所述取样帧各自的两帧边方向数据,分别把所述参考帧内比较窗里的像素阵列在所述取样帧范围里按照9×9关联匹配算子阵列进行交叉关联匹配计算,即参数变量a、b取为:a=‑4,‑3,‑2,‑1,0,+1,+2,+3,+4,b=‑4,‑3,‑2,‑1,0,+1,+2,+3,+4,因此获得两组交叉关联匹配系数;步骤七、对于获得的两组交叉关联匹配系数,分别取其中的值最大者所对应的参数变量a、b作为所述取样帧相对所述参考帧移动的方向以及移动的幅度:Δxx=a1,Δxy=b1;Δyx=a2,Δyy=b2;式中,Δx、Δy分别表示X轴方向和Y轴方向发生的位移,下标x、y分别表示发生的位移对应着边方向数据所沿的坐标轴方向,数字下标1、2用以区分两组结果;本次测量中,所述取样帧相对所述参考帧移动的方向以及移动的幅度是: <mrow> <mi>&Delta;x</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mrow> <msub> <mi>&Delta;</mi> <mi>x</mi> </msub> <mi>x</mi> <mo>+</mo> <msub> <mi>&Delta;</mi> <mi>y</mi> </msub> <mi>x</mi> </mrow> <mn>2</mn> </mfrac> <mo>=</mo> <mfrac> <mrow> <msub> <mi>a</mi> <mn>1</mn> </msub> <mo>+</mo> <msub> <mi>a</mi> <mn>2</mn> </msub> </mrow> <mn>2</mn> </mfrac> <mo>=</mo> <mi>c</mi> <mo>,</mo> </mrow> <mrow> <mi>&Delta;y</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mrow> <msub> <mi>&Delta;</mi> <mi>x</mi> </msub> <mi>y</mi> <mo>+</mo> <msub> <mi>&Delta;</mi> <mi>y</mi> </msub> <mi>y</mi> </mrow> <mn>2</mn> </mfrac> <mo>=</mo> <mfrac> <mrow> <msub> <mi>b</mi> <mn>1</mn> </msub> <mo>+</mo> <msub> <mi>b</mi> <mn>2</mn> </msub> </mrow> <mn>2</mn> </mfrac> <mo>=</mo> <mi>d</mi> </mrow>式中,i表示本次测量拍摄的顺序计数,j表示所取参考帧的顺序计数;测量过程中,物体总的相对位移矢量是:Δx0(i,j)=Δx0(i‑1,j)+Δx(i,j)=Δx0(i‑1,j)+c,Δy0(i,j)=Δy0(i‑1,j)+Δy(i,j)=Δy0(i‑1,j)+d式中,(Δx0(i‑1,j),Δy0(i‑1,j))表示本次测量之前累积的位移;步骤八、物体位移的速度矢量是:Δvx(i,j)=Δx(i,j)/Δt=c/Δt,Δvy(i,j)=Δy(i,j)/Δt=d/Δt;步骤九、如果|Δx0(i,j)‑Δx0(k,j‑1)|≥2m/5,或|Δy0(i,j)‑Δy0(k,j‑1)|≥2n/5,其中,k=max(i)|(j‑1)表示在参考帧顺序计数为j‑1的情况下最后一次拍摄的顺序计数值,即在所述参考帧没有发生变化的条件下,其中的比较窗发生的相对位移之累积已经超出该比较窗的幅度的2/5,这时,用最新的取样帧取代所述参考帧,其比较窗重新定位在新的参考帧的中央部位;如果|Δx0(i,j)‑Δx0(k,j‑1)|<2m/5且|Δy0(i,j)‑Δy0(k,j‑1)|<2n/5,不更新所述参考帧,而是把所述参考帧里的比较窗发生相对位移Δx=‑c,Δy=‑d;步骤十、如果更新了参考帧,获取对应该参考帧像素阵列的关于X轴方向和关于Y轴方向的两帧边方向数据{referencex(x,y)}和{referencey(x,y)},保存这些数据,其中,下标x或y表示所沿的坐标轴的方向,符号“{}”表示沿其中函数下标所标示的坐标轴方向比较窗内诸像素(x,y)处的边方向数据reference(x,y)的一个集合;按照步骤三列出的两个计算式计算所述新参考帧的两帧边方向数据对应的自关联匹配系数auto_correlationx(a,b)和auto_correlationy(a,b);据此分别搜索在目前的物体表面状况以及照明状况下可以进行匹配比较的最佳比较窗像素阵列:mx=m0‑step,nx=n0‑step,2h=M‑mx,2v=N‑nx和my=m0‑step,ny=n0‑step,2h=M‑my,2v=N‑ny,式中,下标x、y分别表示其值对应着沿X轴方向和Y轴方向;取此两组值中阵列规模大者为比较窗阵列的规模:m×n;如果没有更新参考帧,调整步骤六中所述用于交叉关联匹配计算的关联匹配算子阵列的大小:如果|c|<5且|d|<5,m,n∈正整数,改取7×7关联匹配算子阵列,即参数变量a、b取为:a=‑3,‑2,‑1,0,+1,+2,+3,b=‑3,‑2,‑1,0,+1,+2,+3,如果|c|<3且|d|<3,m,n∈正整数,改取5×5关联匹配算子阵列,即参数变量a、b取为:a=‑2,‑1,0,+1,+2,b=‑2,‑1,0,+1,+2,否则,仍然取为9×9关联匹配算子阵列;步骤十一、又经过一段时间Δt,拍摄新的一帧位图作为取样帧;逐像素行、逐像素列导出该新的取样帧沿X轴方向和Y轴方向的边方向数据,并以 3bit的二进制数值001,010和100分别表示其中的正边、负边以及第三类边,如此构成了对应所述新的取样帧像素阵列的关于X轴方向和关于Y轴方向的两帧边方向数据{comparisonx(x,y)}和{comparisony(x,y)},保存这些数据;步骤十二、按照步骤十中确定的用于交叉关联匹配计算的关联匹配算子阵列,对于步骤九确定的参考帧与步骤十一获得的取样帧的各自两帧边方向数据,分别沿X轴方向和Y轴方向,把所述参考帧内比较窗里的像素阵列在所述取样帧范围里进行交叉关联匹配计算;步骤十三、跳转到步骤七,继续测量;上述步骤二、步骤五、步骤十、步骤十一和步骤十二所述边方向数据的定义是:像素阵列中,沿着X轴或者沿着Y轴方向,如果一个像素的光强值比其后面的第二个像素相应的光强值还要小一个误差容限值error,即如果I(X,Y)<I(X+2,Y)‑error或I(X,Y)<I(X,Y+2)‑error则定义这两个像素之间存在一个沿该轴方向的正边;如果一个像素的光强值比其后面的第二个像素相应的光强值还要大一个误差容限值error,即如果I(X,Y)>I(X+2,Y)+error或I(X,Y)>I(X,Y+2)+error则定义这两个像素之间存在一个沿该轴方向的负边;如此获得的边位于该像素之后的第一个像素的位置,也即位于参与比较的两个像素的中间位置的那个像素上;如果一个像素的某种光强值与其后面的第二个像素相应的光强值接近,其值相差不超过一个误差容限值error,即如果I(X+2,Y)‑error<I(X,Y)<I(X+2,Y)+error或I(X,Y+2)‑error<I(X,Y)<I(X,Y+2)+error;则认为这两个像素之间沿该轴方向不存在对应的“边”,或称之为第三类边;沿着某一个坐标轴方向,对应的像素行或像素列所有的正边、负边以及第三类边组成该行或该列沿该坐标轴方向的边方向数据;根据具体的光照情况,预置上列式中的误差容限值error为一个小的数值;像素阵列中的四个边与角上的像素位置不存在边方向数据;上述步骤四与步骤十中所述最佳比较窗像素阵列的搜索方法包括:对于k×k关联匹配算子阵列,其中,k∈正整数,沿某个坐标轴方向会产生k×k个自关联匹配系数,按下列不等式比较这些自关联匹配系数:auto_correlation(a,b)≥auto_correlation(0,0)×similarity式中,similarity描述了比较窗与其邻近相同规模的像素阵列的相似程度,以百分数表示,预先设置,根据光照情况以及被测物表面的质地进行调试和选择;如果满足上述不等式的自关联匹配系数多于k×k×1/3个,需要扩大比较窗的范围各step行和step列:令m=m0+step,n=n0+step,重新计算新的比较窗的自关联匹配系数,并进行上述比较,直到满足上述不等式的自关联匹配系数不多于k×k×1/3个,这时,2h=M‑m,2v=N‑n,其中,step为步进参数,初始值为1,每次需要扩展比较窗的规模就增加1;如果超出帧内一个预定的范围,还没有找到合适的比较窗,则认为该物体这部分反射表面不适于本装置的测量工作,并给出提示警告;如果满足上述不等式的自关联匹配系数不多于k×k×1/3个,说明被拍摄物体的表面的结构特征足够精细,最邻近像素之间的值可以区分,进一步尝试缩小比较窗的范围各step行和step列,以减少计算工作量:令m=m0‑step,n=n0‑step,重新计算比较窗的自关联匹配系数,并进行上述比较,其中,步进参数step的初值为1,每次缩小比较窗的规模就增加1,直到所选比较窗区域满足上述不等式的自关联匹配系数的个数等于或近似等于k×k×1/3,认为这时搜索到了最佳比较窗像素阵列;上述步骤六和步骤十二中所述交叉关联匹配计算的方法是:对应沿X轴方向或者沿Y轴方向的一帧边方向数据,分别把所述参考帧内比较窗里的像素阵列在所述取样帧范围里进行下述运算: <mrow> <mi>cross</mi> <mo>_</mo> <mi>correlation</mi> <mrow> <mo>(</mo> <mi>a</mi> <mo>,</mo> <mi>b</mi> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mi>&Sigma;</mi> <mrow> <mi>y</mi> <mo>=</mo> <mi>v</mi> <mo>+</mo> <mn>1</mn> </mrow> <mrow> <mi>v</mi> <mo>+</mo> <mn>1</mn> <mo>+</mo> <mi>n</mi> </mrow> </munderover> <munderover> <mi>&Sigma;</mi> <mrow> <mi>x</mi> <mo>=</mo> <mi>h</mi> <mo>+</mo> <mn>1</mn> </mrow> <mrow> <mi>h</mi> <mo>+</mo> <mn>1</mn> <mo>+</mo> <mi>m</mi> </mrow> </munderover> <mo>[</mo> <mi>reference</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>,</mo> <mi>y</mi> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <mi>comparison</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>+</mo> <mi>a</mi> <mo>,</mo> <mi>y</mi> <mo>+</mo> <mi>b</mi> <mo>)</mo> </mrow> <mo>]</mo> </mrow>式中,reference(x,y)表示所述参考帧内比较窗中各个像素位置(x,y)处的边方向数据,comparison(x+a,y+b)表示所述取样帧内像素位置(x,y)处的边方向数据,这些数据均以3bit二进制值表示,运算符号·表示二进制逻辑与运算,其运算结果或为逻辑0或为逻辑1,运算符号“[]”表示取其中的逻辑运算函数所对应的数值,或为数值0,或为数值1,参数变量a、b的组合决定了关联匹配算子阵列的规模以及所产生的交叉关联匹配系数cross_correlation(a,b)的个数。
地址 400067 重庆市南岸区学府大道19号重庆工商大学科研处