平台与相机的标定1:相机固定,而平台移动在平台上找到需要的点(这个点作为工具的点)当前马达的坐标Pmotor(x,y),在CCD视野里的坐标为PCCD(x,y)由以上的坐标可以得到关系式:Pmotor.X=PCCD.x*XRadioX+PCCD.y*YRadiox+offsetxPmotor.y=PCCD.x*XRadioY+PCCD.y*YRadioy+offset以上未知数为:XRadiox,YRadiox,offsetxXRadioy,YRadioy,offsety如果知道以上6个未知数,即可以得到当相机的坐标知道则马达的坐标亦可以知道达到平台与相机标定的目的:以上六个未知数可以通过(多元线性回归分析)最小二乘法得到,矩阵如下:CCDx1,CCDy1,Motorx1CCDx2,CCDy2,Motorx2CCDx3,CCDy3,Motorx3CCDx4,CCDy4,Motorx4CCDx5,CCDy5,Motorx5CCDxi,CCDyi,Motorxi2:方法的验证(待做)3:多元线性回归分析publicstaticvoidsqt2(double[][]x,double[]y,intm,intn,double[]a,double[]dt,double[]v){inti,j,k,mm;doubleq,e,u,p,yy,s,r,pp;double[]b=newdouble[(m+1)*(m+1)];mm=m+1;b[mm*mm-1]=n;for(j=0;j=m-1;j++){p=0.0;for(i=0;i=n-1;i++)p=p+x[j][i];b[m*mm+j]=p;b[j*mm+m]=p;}for(i=0;i=m-1;i++)for(j=i;j=m-1;j++){p=0.0;for(k=0;k=n-1;k++)p=p+x[i][k]*x[j][k];b[j*mm+i]=p;b[i*mm+j]=p;}a[m]=0.0;for(i=0;i=n-1;i++)a[m]=a[m]+y[i];for(i=0;i=m-1;i++){a[i]=0.0;for(j=0;j=n-1;j++)a[i]=a[i]+x[i][j]*y[j];}chlk(b,mm,1,a);yy=0.0;for(i=0;i=n-1;i++)yy=yy+y[i]/n;q=0.0;e=0.0;u=0.0;for(i=0;i=n-1;i++){p=a[m];for(j=0;j=m-1;j++)p=p+a[j]*x[j][i];q=q+(y[i]-p)*(y[i]-p);e=e+(y[i]-yy)*(y[i]-yy);u=u+(yy-p)*(yy-p);}s=Math.Sqrt(q/n);r=Math.Sqrt(1.0-q/e);for(j=0;j=m-1;j++){p=0.0;for(i=0;i=n-1;i++){pp=a[m];for(k=0;k=m-1;k++)if(k!=j)pp=pp+a[k]*x[k][i];p=p+(y[i]-pp)*(y[i]-pp);}v[j]=Math.Sqrt(1.0-q/p);}dt[0]=q;dt[1]=s;dt[2]=r;dt[3]=u;}privatestaticintchlk(double[]a,intn,intm,double[]d){inti,j,k,u,v;if((a[0]+1.0==1.0)||(a[0]0.0)){//MessageBox.Show(fail1);//System.out.println(fail\n);return(-2);}a[0]=Math.Sqrt(a[0]);for(j=1;j=n-1;j++)a[j]=a[j]/a[0];for(i=1;i=n-1;i++){u=i*n+i;for(j=1;j=i;j++){v=(j-1)*n+i;a[u]=a[u]-a[v]*a[v];}if((a[u]+1.0==1.0)||(a[u]0.0)){//MessageBox.Show(fail2);//System.out.println(fail\n);return(-2);}a[u]=Math.Sqrt(a[u]);if(i!=(n-1)){for(j=i+1;j=n-1;j++){v=i*n+j;for(k=1;k=i;k++)a[v]=a[v]-a[(k-1)*n+i]*a[(k-1)*n+j];a[v]=a[v]/a[u];}}}for(j=0;j=m-1;j++){d[j]=d[j]/a[0];for(i=1;i=n-1;i++){u=i*n+i;v=i*m+j;for(k=1;k=i;k++)d[v]=d[v]-a[(k-1)*n+i]*d[(k-1)*m+j];d[v]=d[v]/a[u];}}for(j=0;j=m-1;j++){u=(n-1)*m+j;d[u]=d[u]/a[n*n-1];for(k=n-1;k=1;k--){u=(k-1)*m+j;for(i=k;i=n-1;i++){v=(k-1)*n+i;d[u]=d[u]-a[v]*d[i*m+j];}v=(k-1)*n+k-1;d[u]=d[u]/a[v];}}return(2);}