您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 机器视觉之机器视觉算法之物体方位特征提取
深圳稻草人自动化培训联为智能教育机器视觉算法之物体方位特征提取在机器视觉处理中,我们经常要对检测到的物体的方位特征进行评估。比如说,我们要OCR识别一个字符串。那么这个字符串与x轴的夹角就很重要,我们需要这个信息把这个字符串转正,然后才方便识别。条形码识别也类似,尤其是当我们条形码不是很清晰时,首先将条形码转正,然后用各向异性的滤波器处理一下,可以让条形码变得更清晰易于读取。这里给出一种基于统计参数的特征提取方法。这个方法已经有几十年历史了,算是个老方法,但是效果很不错,所以值得写篇文章来介绍介绍。区域的矩一片区域R的矩定义为:mp,q=∑(r,c)∈Rrpcq当p和q都取0时,得到的就是这片区域的面积。也就是:a=m0,0矩还可以归一化,也就是用上面的定义再除以面积a。np,q=1a∑(r,c)∈Rrpcq(n1,0,n0,1)表示的是这片区域的重心。可以用它来描述区域的位置。归一化的矩回随区域在图像中的位置不同而变化,要去除这个影响,可以用中心矩,中心矩只反映区域本身的特征。μp,q=1a∑(r,c)∈R(r−n1,0)p(c−n0,1)q二阶中心距有三个,分别是μ2,0,μ1,1,μ0,2,用这三个参数再加上重心(n1,0,n0,1)就可以估算出区域的范围和方位。具体的方法是将这个区域当作一个椭圆区域,那么用上面5个参量就可以计算出椭圆的长短轴和旋转角度。具体公式如下:r1=2(μ2,0+μ0,2+(μ2,0−μ0,2)2+4μ21,1−−−−−−−−−−−−−−−−−√)−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√r1=2(μ2,0+μ0,2−(μ2,0−μ0,2)2+4μ21,1−−−−−−−−−深圳稻草人自动化培训联为智能教育−−−−−−−−√)−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√θ=−12arctan2μ1,1μ0,2−μ2,0椭圆的这几个参数的图形解释如下图:利用这几个参数就可以确定区域的方位和尺寸了。比如我们有下面的一幅测试图像。深圳稻草人自动化培训联为智能教育用上面方法计算出的椭圆如下:深圳稻草人自动化培训联为智能教育可以看出结果非常的好。尤其是旋转角度,计算的非常准确。下面是我的测试代码,供参考。用到了些Qt的功能。#includeQApplication#includeQImage#includeQDebug#includeQPainter#includepicturebox.h#includemath.hQImagethreshold(constQImage&image,quint8th){intheight=image.height();intwidth=image.width();QImageret(width,height,QImage::Format_Indexed8);ret.setColorCount(256);for(inti=0;i256;i++){ret.setColor(i,qRgb(i,i,i));}for(inti=0;iheight;i++){constuchar*pSrc=(uchar*)image.constScanLine(i);uchar*pDest=(uchar*)ret.scanLine(i);for(intj=0;jwidth;j++){pDest[j]=(pSrc[j]th)?255:0;深圳稻草人自动化培训联为智能教育}}returnret;}QImagetoGray(constQImage&image){intheight=image.height();intwidth=image.width();QImageret(width,height,QImage::Format_Indexed8);ret.setColorCount(256);for(inti=0;i256;i++){ret.setColor(i,qRgb(i,i,i));}qDebug()image.format();switch(image.format()){caseQImage::Format_Indexed8:caseQImage::Format_Grayscale8:for(inti=0;iheight;i++){constuchar*pSrc=(uchar*)image.constScanLine(i);uchar*pDest=(uchar*)ret.scanLine(i);memcpy(pDest,pSrc,width);}break;caseQImage::Format_RGB32:caseQImage::Format_ARGB32:caseQImage::Format_ARGB32_Premultiplied:for(inti=0;iheight;i++){constQRgb*pSrc=(QRgb*)image.constScanLine(i);uchar*pDest=(uchar*)ret.scanLine(i);for(intj=0;jwidth;j++){pDest[j]=qGray(pSrc[j]);}}break;}returnret;深圳稻草人自动化培训联为智能教育}QPointFcenter(constQImage&image,intvalue){if(image.isNull()||image.format()!=QImage::Format_Indexed8){returnQPointF(-1,-1);}intwidth=image.width();intheight=image.height();intx_mean=0;inty_mean=0;intcount=0;for(intj=0;jheight;j++){constuchar*p=image.constScanLine(j);for(inti=0;iwidth;i++){if(p[i]==value){x_mean+=i;y_mean+=j;count++;}}}returnQPointF((double)x_mean/count,(double)y_mean/count);}structELLIPSE_PARA{doublex_mean;//椭圆的中心坐标xdoubley_mean;//椭圆的中心坐标ydoubler1;//椭圆的长轴半径doubler2;//椭圆的短轴半径doubletheta;//椭圆的长轴与x轴的夹角(逆时针)};/***@briefellipseFit将一片区域当作椭圆来估计五个几何参数深圳稻草人自动化培训联为智能教育*@paramimage*@paramvalue*@parampara*/boolellipseFit(constQImage&image,intvalue,ELLIPSE_PARA*para){if(image.isNull()||image.format()!=QImage::Format_Indexed8){returnfalse;}QPointFc=center(image,value);intwidth=image.width();intheight=image.height();doublen01=c.x();doublen10=c.y();doublemu20=0.0;doublemu02=0.0;doublemu11=0.0;intcount=0;for(introw=0;rowheight;row++){constuchar*p=image.constScanLine(row);for(intcol=0;colwidth;col++){if(p[col]==value){mu02+=(col-n01)*(col-n01);mu20+=(row-n10)*(row-n10);mu11+=(col-n01)*(row-n10);count++;}}}if(count==0){returnfalse;}mu20/=count;mu02/=count;深圳稻草人自动化培训=count;doublet1=mu20+mu02;doublet2=mu20-mu02;doublet3=sqrt(t2*t2+4*mu11*mu11);doubler1=sqrt(2*(t1+t3));doubler2=sqrt(2*(t1-t3));doubletheta=-atan2(2*mu11,mu02-mu20)/2.0;para-r1=r1;para-r2=r2;para-theta=theta;para-x_mean=n01;para-y_mean=n10;returntrue;}intmain(intargc,char*argv[]){QApplicationa(argc,argv);QImageimage(D:/test55.png);QImageimageGray=toGray(image);//imageGray=threshold(imageGray,128);ELLIPSE_PARApara;ellipseFit(imageGray,0,¶);qDebug()para.r1;qDebug()para.r2;qDebug()para.theta*180/3.14159;QPointFc(para.x_mean,para.y_mean);qDebug()c;QPainterpainter(&image);painter.setPen(Qt::red);painter.translate(c);painter.rotate(-para.theta*180/3.14159);painter.drawEllipse(QPointF(0,0),para.r1,para.r2);PictureBoxbox;box.setImage(image);box.show();returna.exec();}
本文标题:机器视觉之机器视觉算法之物体方位特征提取
链接地址:https://www.777doc.com/doc-2325155 .html