发明名称 一种环状编码标记点的检测与识别方法
摘要 本发明属于近景摄影测量领域,涉及一种环状编码标记点的检测与识别方法。本发明首先对采集的图像进行canny边缘检测,通过一系列限制条件和计算封闭轮廓质心来过滤噪声和非编码标记点;然后采用最小二乘椭圆拟合,进行编码标记点定位,结合椭圆拟合误差判断分割编码标记点轮廓并填充;最后提出一种将局部同心椭圆变换为平行直线的ALPC变换,对分割出的编码标记点进行此变换,利用变换后的图像特征进行解码。本发明对于编码标记点的定位可以达到亚像素级别,将同心椭圆这一局部形状特征转化为平行直线这种容易检测和计算的形状特征,提高了编码标记点识别的速率,且能够降低相机光轴与编码标记点法线夹角对编码标记点识别准确率的影响。
申请公布号 CN103310215A 申请公布日期 2013.09.18
申请号 CN201310275296.3 申请日期 2013.07.03
申请人 天津工业大学 发明人 宋丽梅;陈昌曼;陈卓;覃名;李大鹏;唐欢
分类号 G06K9/46(2006.01)I 主分类号 G06K9/46(2006.01)I
代理机构 代理人
主权项 1.一种环状编码标记点的检测与识别方法,所述的环状编码标记点的特征是由内部标记圆和外部编码环构成,所述的内部标记圆的圆心坐标即为所述的环状编码标记点的位置所在,所述的外部编码环是一个与所述的内部标记圆同心的圆环被均等分成L(所述的L可以为10,12,15,18等)个编码块,每个所述的编码块可以是白色(所述的白色码值为1),也可以是黑色(所述的黑色码值为0),以任意一个所述的编码块作为起始位顺时针编码,能够得到L个L位的二进制数,这L个所述的二进制数中对应的十进制最小值即是所述的外部编码环所具有的编码值,所述的环状编码标记点的检测与识别方法,其特征是,包括下列步骤:步骤1:将具有不同编码值的环状编码标记点粘贴在被测物体上,使用摄像机拍摄被测物体,采集图像,将采集的图像传输到计算机中;步骤2:采用Canny算子对采集的图像进行边缘提取,对边缘提取获得的轮廓计算轮廓的周长l、面积s,设置合适的轮廓面积和周长阈值,删除不满足阈值条件的轮廓,对于满足阈值条件的轮廓计算其质心坐标,含有N个像素点的轮廓,其质心(cx,cy)为:<maths num="0001"><![CDATA[<math><mrow><mi>cx</mi><mo>=</mo><mfrac><mrow><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><msub><mi>x</mi><mi>i</mi></msub></mrow><mi>N</mi></mfrac><mo>,</mo><mi>cy</mi><mo>=</mo><mfrac><mrow><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><msub><mi>y</mi><mi>i</mi></msub></mrow><mi>N</mi></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow></math>]]></maths>(x<sub>i</sub>,y<sub>i</sub>)为轮廓上第i个像素点的坐标,当任意两个轮廓的质心距离δ<δ<sub>0</sub>时,δ<sub>0</sub>可以取1,同时过滤掉这两个轮廓,这样就可以将非编码标记点去除,从而初步达到将编码标志点分离出来的目的;步骤3:所述的环状编码标记点在实际测量中,由于拍摄的角度问题,内部标记圆绝大多数成像为椭圆,为了得到所述的内部标记圆的圆心坐标以及对所述的外部编码环解码,需要对所述的椭圆进行最小二乘椭圆拟合,对于任意位置的椭圆,其方程记为:f(x,y)=x<sup>2</sup>+Axy+By<sup>2</sup>+Cx+Dy+E=0    (2)假设轮廓上点的个数为N(N≥6),对于这些点进行最小二乘椭圆拟合,则目标函数<maths num="0002"><![CDATA[<math><mrow><mi>F</mi><mrow><mo>(</mo><mi>A</mi><mo>,</mo><mi>B</mi><mo>,</mo><mi>C</mi><mo>,</mo><mi>D</mi><mo>,</mo><mi>E</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><msup><mi>f</mi><mn>2</mn></msup><mrow><mo>(</mo><msub><mi>x</mi><mi>i</mi></msub><mo>,</mo><msub><mi>y</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow></math>]]></maths>由极值原理,要使得F最小,则必有<img file="FSA0000091964300000013.GIF" wi="588" he="110" />,通过此式可解算出参数A、B、C、D、E,则拟合完的椭圆方程可以被确定;假设所述的椭圆的中心坐标为(x<sub>c</sub>,y<sub>c</sub>),长短轴半径分别为a、b,长轴与x轴的夹角即椭圆的偏角θ,由计算出的A、B、C、D、E得到椭圆的五个基本参数<maths num="0003"><![CDATA[<math><mrow><msub><mi>x</mi><mi>c</mi></msub><mo>=</mo><mfrac><mrow><mi>AD</mi><mo>-</mo><mn>2</mn><mi>BC</mi></mrow><mrow><mn>4</mn><mi>B</mi><mo>-</mo><msup><mi>A</mi><mn>2</mn></msup></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow></math>]]></maths><maths num="0004"><![CDATA[<math><mrow><msub><mi>y</mi><mi>c</mi></msub><mo>=</mo><mfrac><mrow><mi>AC</mi><mo>-</mo><mn>2</mn><mi>D</mi></mrow><mrow><mn>4</mn><mi>B</mi><mo>-</mo><msup><mi>A</mi><mn>2</mn></msup></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mrow></math>]]></maths><maths num="0005"><![CDATA[<math><mrow><mi>&theta;</mi><mo>=</mo><mi>arctan</mi><msqrt><mfrac><mrow><msup><mi>Bb</mi><mn>2</mn></msup><mo>-</mo><msup><mi>a</mi><mn>2</mn></msup></mrow><mrow><msup><mi>b</mi><mn>2</mn></msup><mo>-</mo><msup><mi>Ba</mi><mn>2</mn></msup></mrow></mfrac></msqrt><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>6</mn><mo>)</mo></mrow></mrow></math>]]></maths><maths num="0006"><![CDATA[<math><mrow><mi>a</mi><mo>=</mo><msqrt><mfrac><mrow><mn>2</mn><mrow><mo>(</mo><msup><mi>BC</mi><mn>2</mn></msup><mo>+</mo><msup><mi>D</mi><mn>2</mn></msup><mo>-</mo><mi>ACD</mi><mo>-</mo><mn>4</mn><mi>BE</mi><mo>+</mo><msup><mi>A</mi><mn>2</mn></msup><mi>E</mi><mo>)</mo></mrow></mrow><mrow><mrow><mo>(</mo><mn>4</mn><mi>B</mi><mo>-</mo><msup><mi>A</mi><mn>2</mn></msup><mo>)</mo></mrow><mrow><mo>(</mo><mi>B</mi><mo>+</mo><mn>1</mn><mo>-</mo><msqrt><msup><mi>A</mi><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><mi>B</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mo>)</mo></mrow></mrow></mfrac></msqrt><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>7</mn><mo>)</mo></mrow></mrow></math>]]></maths><maths num="0007"><![CDATA[<math><mrow><mi>b</mi><mo>=</mo><msqrt><mfrac><mrow><mn>2</mn><mrow><mo>(</mo><msup><mi>BC</mi><mn>2</mn></msup><mo>+</mo><msup><mi>D</mi><mn>2</mn></msup><mo>-</mo><mi>ACD</mi><mo>-</mo><mn>4</mn><mi>BE</mi><mo>+</mo><msup><mi>A</mi><mn>2</mn></msup><mi>E</mi><mo>)</mo></mrow></mrow><mrow><mrow><mo>(</mo><mn>4</mn><mi>B</mi><mo>-</mo><msup><mi>A</mi><mn>2</mn></msup><mo>)</mo></mrow><mrow><mo>(</mo><mi>B</mi><mo>+</mo><mn>1</mn><mo>+</mo><msqrt><msup><mi>A</mi><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><mi>B</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mo>)</mo></mrow></mrow></mfrac></msqrt><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>8</mn><mo>)</mo></mrow></mrow></math>]]></maths>几何距离表示某点到曲线最近点的距离,即法向距离,见式(15),<maths num="0008"><![CDATA[<math><mrow><msub><msup><mi>d</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow></msup><mi>min</mi></msub><mo>=</mo><msqrt><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>i</mi></msub><mo>-</mo><mi>x</mi><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>i</mi></msub><mo>-</mo><mi>y</mi><mo>)</mo></mrow><mn>2</mn></msup></msqrt><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>9</mn><mo>)</mo></mrow></mrow></math>]]></maths>本发明使用点到椭圆的几何距离作为评价该点拟合误差的标准,遍历所有轮廓点求取各个点的拟合误差,如果大于某阈值,将其视为非匹配点,当非匹配点个数与轮廓点总个数的比例达到阈值α%,则认为此轮廓的椭圆拟合不符合要求,进行下一个轮廓椭圆拟合,当达到椭圆拟合要求时,则此轮廓即为所述的内部标记圆,以此椭圆的中心为中心,分割出一个矩形形,此矩形中将包含此环状编码标记点的所有轮廓信息,并且填充封闭轮廓;步骤4:本发明将仿射变换与对数极坐标变换结合,对于原图像(x,y),如果变换中心为(x<sub>0</sub>,y<sub>0</sub>),经过ALPC变换得到变换后的图像(x′,y′),则变换关系如式(10)(11)所示,<maths num="0009"><![CDATA[<math><mrow><mi>x</mi><mo>&prime;</mo><mo>=</mo><mi>M</mi><mi>log</mi><mrow><mo>(</mo><msqrt><mfenced open='' close=''><mtable><mtr><mtd><msup><mrow><mo>(</mo><mrow><mo>(</mo><mi>x</mi><mo>-</mo><msub><mi>x</mi><mn>0</mn></msub><mo>)</mo></mrow><mi>cos</mi><mi>&theta;</mi><mo>+</mo><mrow><mo>(</mo><mi>y</mi><mo>-</mo><msub><mi>y</mi><mn>0</mn></msub><mo>)</mo></mrow><mi>sin</mi><mi>&theta;</mi><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo></mtd></mtr><mtr><mtd><mfrac><msup><mi>a</mi><mn>2</mn></msup><msup><mi>b</mi><mn>2</mn></msup></mfrac><msup><mrow><mo>(</mo><mrow><mo>(</mo><mo>-</mo><mi>x</mi><mo>+</mo><msub><mi>x</mi><mn>0</mn></msub><mo>)</mo></mrow><mi>sin</mi><mi>&theta;</mi><mo>+</mo><mrow><mo>(</mo><mi>y</mi><mo>-</mo><msub><mi>y</mi><mn>0</mn></msub><mo>)</mo></mrow><mi>cos</mi><mi>&theta;</mi><mo>)</mo></mrow><mn>2</mn></msup></mtd></mtr></mtable></mfenced></msqrt><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>10</mn><mo>)</mo></mrow></mrow></math>]]></maths><maths num="0010"><![CDATA[<math><mrow><mi>y</mi><mo>&prime;</mo><mo>=</mo><mi>arctan</mi><mrow><mo>(</mo><mfrac><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mrow><mo>(</mo><mrow><mo>(</mo><mo>-</mo><mi>x</mi><mo>+</mo><msub><mi>x</mi><mn>0</mn></msub><mo>)</mo></mrow><mi>sin</mi><mi>&theta;</mi><mo>+</mo><mrow><mo>(</mo><mi>y</mi><mo>-</mo><msub><mi>y</mi><mn>0</mn></msub><mo>)</mo></mrow><mi>cos</mi><mi>&theta;</mi><mo>)</mo></mrow></mrow><mrow><mrow><mo>(</mo><mi>x</mi><mo>-</mo><msub><mi>x</mi><mn>0</mn></msub><mo>)</mo></mrow><mi>cos</mi><mi>&theta;</mi><mo>+</mo><mrow><mo>(</mo><mi>y</mi><mo>-</mo><msub><mi>y</mi><mn>0</mn></msub><mo>)</mo></mrow><mi>sin</mi><mi>&theta;</mi></mrow></mfrac><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>11</mn><mo>)</mo></mrow></mrow></math>]]></maths>为了使原图像沿变换中心径向的图像特征能够很好地展现出来,在变换后的图像横向特征中进行了放大,其中M是一个缩放比例,所述的变换中心为步骤3中拟合所得的椭圆中心,a/b为同心椭圆的长短轴比,θ为同心椭圆的偏角;步骤5:将步骤3中分割出的环状编码标记点经过步骤4中的ALPC变换处理,其结果呈现的是黑白块状整齐地排列在变换后的图像上,我们称其为编码图,此编码图中的编码块从上到下的顺序对应着编码环顺时针排列的顺序,在编码图中检测出编码环带所在区域,通过扫描区域中垂直方向直线,获得各段黑白像素的个数,假设有M块,每段含有的像素个数存放在数组P[M]中,同时与之对应的含有编码块黑白信息的数组Flag[M],其中Flag[i]=0,表示第i段为黑色,Flag[i]=1表示第i段为白色,P[i]为第i段像素的个数,因为编码为循环编码,所以如果Flag[M-1]=Flag[0],则将头尾的像素个数合并,P[0]=P[M-1]+P[0],调整后的数组P[M],第i段的码值由n<sub>i</sub>个0或者1组成,当Flag[i]=1时则由1组成,Flag[i]=0时则由0组成,<img file="FSA0000091964300000025.GIF" wi="453" he="119" />,其中height为变换后图像的纵向像素个数,最终计算出每块的0和1的个数,顺序组成一个L位二进制数,根据编码原则,循环排序获得L个L位的二进制数,计算出这L个二进制数中对应的十进制最小值即为此环状编码标记点的编码值;步骤6:回到步骤3中进行下一个轮廓的椭圆拟合,直到下一个轮廓为空。
地址 300160 天津市河东区成林道63号