几种车牌图像倾斜角度矫正算法_第1页
几种车牌图像倾斜角度矫正算法_第2页
几种车牌图像倾斜角度矫正算法_第3页
几种车牌图像倾斜角度矫正算法_第4页
几种车牌图像倾斜角度矫正算法_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汽车牌照图像倾角矫正方法研究 首先我们对汽车牌照图像进行边缘检测,找出图像与背景的交线,然后就可以通过一定算法确定图像的倾斜角度了。这里采用了Sobel水平方向算子对图像中的水平边缘直线进行检测2。检测出图像中的直线后,我们要对其倾角进行计算,这里选用了Hough变换法、Radon变换法、最小二乘法和两点法四种方法来计算直线的倾角,下面将具体研究这四种方法并对其优缺点做出比较。1 Hough变换法利用Hough变换法提取直线是一种变换域提取直线的方法,它把直线上的坐标变换到过点的直线的系数域,巧妙的利用了共线和直线相交的关系。它的原理很简单:假设有一条与原点距离为s,方向角为的一条直线,如图3.1所示:图1 一条与原点距离为s,方向角为的直线直线上的每一点都满足方程: (3.1)证明过程如下:图2 坐标变换原理图如图3.2所示: (3.2) (3.3)所以 : (3.4)m为直线l上任意一点 (3.5)因为: (3.6) (3.7)所以: (3.8)所以: (3.9)所以直线上任意一点都满足 (3.10)图3 x-y平面一点可以对应多个 s,值由图3.3可以看出点(x1,y1)即属于直线L1又属于直线L2,且满足: (3.11) (3.12)所以,x-o-y平面上的一点(x1,y1)对应于s-o-平面上的一条曲线。由于一条直线上的点都满足,所以x-o-y平面上处在一条直线上的点经过变换在S-O-平面上所得的曲线相交于一点。如下图所示:图4 Hough变换前后对比图因此可以把x-o-y平面内直线的问题转化为S-O-平面内点的问题3。用Hough变换检测汽车牌照图像中直线的具体步骤为:(1)对图像进行边缘检测,这里选用了Sobel算子检测图像中水平方向的直线。图5 网格图(2)假设图像对应于x-o-y空间,定义一个S-o-(角的范围为1-180)空间,对图像中象素为1的每一个点进行计算(应用公式(3.10),做出每一个象素为1的点的曲线,同时把S-平面分成等间隔(11)的小网格,这个小网格对应一个记数矩阵。如图3.5所示,凡是曲线所经过的网格,对应的记数矩阵元素值加1,所以对原图像中的每一点进行计算以后记数矩阵元素的值等于共线的点数。我们可以认为记数矩阵中元素的最大值对应原始图像中最长的直线。(3)检测出记数矩阵的最大的元素所对应的列坐标,即为这条直线的法线与X轴的夹角。因此我们可以通过角来确定直线的倾斜角度,进而对图像进行矫正。图6 倾角矫正前图像Hough变换法矫正图像程序实现如下:bw=edge(l,sobel,horizontal);%检测图像边缘直线m,n=size(bw);%计算图像大小S=round(sqrt(m2+n2);%S可以取到的最大值ma=180;%角最大值r=zeros(md,ma);%产生初值为零的计数矩阵for i=1:m for j=1:n if bw(i,j)=1 for k=1:ma ru=round(abs(i*cos(k*3.14/180)+j*sin(k*3.14/180); r(ru+1,k)=r(ru+1,k)+1;%对矩阵记数 end end endendm,n=size(r);for i=1:m for j=1:n if r(i,j)r(1,1)r(1,1)=r(i,j); c=j;%把矩阵元素最大值所对应的列坐标送给c。 end endendif c=90rot=-c; %确定旋转角度else rot=180-c;endpic=imrotate(l,rot,crop); %对图片进行旋转,矫正图像下面给出了Hough变换法对倾斜图像进行矫正后的图像:图7 Hough变换法对图3.6矫正后图像2 Radon变换法我们知道,一条直线沿它的法线方向投影所得的投影最长,而沿与其平行方向投影则所得的投影最短。Radon变换理论就是这样一种投影理论。用这种方法可以检测图像中的直线。Radon变换的定义:二元函数f(x,y)的投影是在某一方向上的线积分,例如f(x,y)在垂直方向上的线积分是f(x,y)在x方向上的投影,在水平方向上的线积分是在y方向上的投影,沿y方向的线积分是沿x方向上的投影。投影可沿任意角度进行,通常f(x,y)的Radon变换是f(x,y)平行于y轴的线积分,格式如下: (3.13)其中 (3.14)图8 矩形函数在水平垂直方向和沿角方向的投影Radon 变换与计算机视觉中的Hough变换很相似,我们可以利用Radon变换来检测图像中的直线的倾斜角度4。利用Radon变换检测直线倾斜角度的具体步骤为:(1)用edge函数计算图像的边缘二值图像,检测出原始图像中的直线。图9 边缘图(2)计算边缘图像的Radon变换,对每一个象素为1的点进行运算(0-179度方向上分别做投影)其命令格式如下:theta=0:179;r,xp=radon(bw1,theta);%计算边缘图像的Radon变换figure,image(theta,xp,r);%显示变换效果图(3)检测出Radon变换矩阵中的峰值,这些峰值对应原始图像中的直线(上图中的四个亮点对应图3.9中的四条直线)。Radon变换矩阵中的这些峰值的列坐标就是与原始图像中的直线垂直的直线的倾斜角度,所以图像中直线的倾角为90-。图像倾角矫正具体程序实现如下:bw1=edge(l1,sobel, horizontal);%用Sobel水平算子对图像边缘化bw1=imcrop(bw1,0 0 500 100);%对图像进行剪切,保留图像中的一条直线,减小运算量theta=0:179;%定义theta角度范围r=radon(bw1,theta);%对图像进行Radon变换m,n=size(r);c=1;for i=1:m for j=1:n if r(1,1)r(i,j) r(1,1)=r(i,j); c=j; end endend %检测Radon变换矩阵中的峰值所对应的列坐标rot=90-c;%确定旋转角度pic=imrotate(l1,rot,crop);%对图像进行旋转矫正图10 矫正后所得图像3 线性回归法如果我们有一系列相互独立的点,其近似分布在一条直线附近,我们就可以通过一元线性回归法拟合这条直线。图11 最小二乘原理图这条直线的一元线性回归模型为: (3.15)设上图中点的坐标分别是(x1,y1) , (x2,y2) , , (xn,yn) 。用最小二乘算法来估计和。则有: I = 1 , 2 , 3 , ,n , (3.16)用最小二乘算法来计算,找到准则函数,记为 (3.17)求Q的最小值: (3.18) (3.19)由上式可得: (3.20) (3.21)其中: (3.22) (3.23)估计出了直线的斜率和截距,我们就可以估计出这条直线的方程了5。将汽车牌照图像进行二值化,就可以得到其与背景的明显的交线,对于汽车牌照图像二值化的阈值完全可以取的高一点。执行bw=im2bw(pic,0.3)我们可以得到下面的图像:图12 二值化后的汽车牌照图像从上图可以看出如果我们能够检测到图像上边缘的一系列的边界点,我们就可以通过最小二乘法拟合这条边界直线,从而确定图像的倾角。具体方法如下:(1)找出边界直线上的点(每列第一次由黑变白的点,且这一列的下两点还是白的话就可以判为边界点6),将其行坐标存入数组a即,列坐标存入数组b。(2)通过最小二乘法拟和这条边界直线,计算出其斜率L。(3)通过rot=atan(L),计算直线的倾斜角度,然后对其矫正。最小二乘法程序实现如下:m,n=size(l);bw=im2bw(l,0.3);%将图像二值化t=1;s=1;for j=144:1: n-144 for i=1:fix(m/4)if bw(i,j)=0&bw(i+1,j)=1&bw(i+2,j)=1&bw(i+3,j)=1%检测边缘点 c(t)=i;%边缘横坐标存入数组C b1(s)=j;边缘纵坐标存入数组b1 break; end end t=t+1;s=s+1;endx=0;y=0;x1=0;for i=1:length(c)x=x+c(i); x1=x1+c(i)2; end for i=1:length(b1) y=y+b1(i); end y=y/length(b1); x=x/length(c); c1=x; x=length(c)*x*x; lxy=x1-x; lxx=0;for i=1:length(b1) lxx=lxx+(c(i)-c1)*(b1(i)-y);endr=lxy/lxx;%以上为计算直线参数rot=atan(r);%取余切theta=rot*180/3.142;%将弧度转换为角度pic=imrotate(l,theta,crop);图13 用最小二乘法对图6矫正后图像4 两点法这种方法理论上非常简单,就是:如果我们知道直线上不同两点的坐标,我们就可以求得到这条直线的斜率,进而确定直线倾角。在使用最小二乘法时,我们已经检测到图像与背景交线的一系列坐标点,这些点近似分布在一条直线上。图14 两点法原理图如图14所示:a,b,c,a,b,c点近似分布在一条直线L上,直线L的斜率与直线aa,bb,cc的斜率近似,如果我们求出直线aa,bb,cc的斜率,再求平均值,平均值就可以近似认为是直线L的斜率。我们就可以确定L的倾角了。这里选取了汽车牌照图像上边缘的两百个坐标点做出一百条直线(做出直线的两点的距离尽量大),然后计算这一百条直线的斜率,而后确定一百个倾斜角度并求出其平均值作为直线L的斜率。下面是对图13计算所得数据的一部分:Columns 1 through 16 -13.2785 -13.2785 -13.2785 -13.2785 -13.2785 -13.2785 -13.2785 -12.9409 -13.2785 -13.2785 -13.2785 -12.9409 -13.2785 -13.2785 -13.2785 -13.2785Columns 17 through 32 -12.9409 -13.2785 -13.2785 -13.2785 -12.9409 -13.2785 -13.2785 -13.2785 -12.9409 -13.2785 -13.2785 -13.2785 -12.9409 -12.9409 -13.2785 -13.2785rot1 =-13.0692两点法具体程序实现如下:m,n=size(l);t=1;s=1;for j=144 : n-144 for i=1:fix(m/4) if bw(i,j)=0&bw(i+1,j)=1&bw(i+2,j)=1&bw(i+3,j)=1&bw(i+4,j)=1 c(t)=i; b(s)=j; break; elseif bw(i,j)=1&bw(i+1,j)=1&bw(i+2,j)=1&bw(i+3,j)=1 c(t)=0; b(s)=j; break; end end t=t+1;s=s+1;end%以上把边缘点的坐标存入数组c,b中。v=1;for i=1:100rot(v)= (c(262-i)-c(101-i)/ (b(262-i)-b(101-i); %计算每条直线的斜率v=v+1;endrot=atan(rot);%取余切rot=rot*180/3.142;%把弧度转换为角度sum=0;for i=1:100 sum=sum+rot(i);endrot1=sum/100;pic=imrotate(l,rot1,crop);figure(4),imshow(pic); 图15 用两点法矫正的图像上述四种方法对图像进行倾角矫正都非常有效。Hough变换和Radon相似,其抗干扰能力比较强,但是运算量大,程序执行慢,其改进方法为:我们可以不对整幅图像进行操作,可以在图像中选取一块(必须含有一条与倾角有关的直线)进行操作,从而减小运算量。这里Hough

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论