Exemple #1
0
void main (int argc, char *argv[])
{
    int maxdeg;

    // setbuf (stdout, (char *) NULL);

    if (argc != 3)
        usage ();
    maxdeg = atoi (argv[2]);
    if (maxdeg < 1 || maxdeg > 25)
        usage ();

    leastsq (argv[1], maxdeg);

    exit (0);
}
Exemple #2
0
void update_distort(void) {
  int N = 9;
  float src1[9][3], src2[9][3], *src[9], dst1[9], dst2[9];
  
  if (current_window) {
    int i;
    cal_priv_t *p = (cal_priv_t *)(current_window->appdata);
    /* build vectors of data */
    /* 4 corners, center and midway along each line */
    for(i = 0; i < 4; i++) {
      src1[i][0] = def_cal_pts[i][0];
      src1[i][1] = def_cal_pts[i][1];
      src1[i][2] = 1.0;
      dst1[i] = p->pt[i][0];
      dst2[i] = p->pt[i][1];
    }
    for(i = 0; i < 4; i++) {
      src1[i+4][0] = (def_cal_pts[i][0]+def_cal_pts[(i+1)%4][0])/2.0;
      src1[i+4][1] = (def_cal_pts[i][1]+def_cal_pts[(i+1)%4][1])/2.0;
      src1[i+4][2] = 1.0;
      dst1[i+4] = (p->pt[i][0]+p->pt[(i+1)%4][0])/2.0;
      dst2[i+4] = (p->pt[i][1]+p->pt[(i+1)%4][1])/2.0;
    }
    dst1[8] = src1[8][0] = 0;
    dst2[8] = src1[8][1] = 0;
    src1[8][2] = 1.0;

    for(i = 0; i < 4; i++) {
      dst1[8] += p->pt[i][0];
      dst2[8] += p->pt[i][1];
    }
    dst1[8] /= 4.0;
    dst2[8] /= 4.0;

    for(i = 0; i < N; i++) {
      src[i] = src2[i];
    }

    /* solve for d1..d3 */
    memcpy(src2,src1,sizeof(src1));
    leastsq(src,N,3,dst1);
    /* solve for d2..d3 */
    memcpy(src2,src1,sizeof(src1));
    leastsq(src,N,3,dst2);

    /* set values in res in distortion matrix */
    veMatrixIdentity(&(current_window->distort));
    for(i = 0; i < 3; i++) {
      current_window->distort.data[0][i] = dst1[i];
      current_window->distort.data[1][i] = dst2[i];
    }
    printf("disort = \n[ %2.4f %2.4f %2.4f ]\n[ %2.4f %2.4f %2.4f ]\n[ %2.4f %2.4f %2.4f ]\n",
	   current_window->distort.data[0][0],
	   current_window->distort.data[0][1],
	   current_window->distort.data[0][2],
	   current_window->distort.data[1][0],
	   current_window->distort.data[1][1],
	   current_window->distort.data[1][2],
	   current_window->distort.data[2][0],
	   current_window->distort.data[2][1],
	   current_window->distort.data[2][2]);
  }
}