Changeset 2278
- Timestamp:
- Apr 16, 2008, 12:09:44 AM (15 years ago)
- Location:
- research/2008-displacement
- Files:
-
- 1 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
research/2008-displacement/main.c
r2277 r2278 512 512 513 513 static void study(float const *src, float const *dest, 514 float sigma, float precision )514 float sigma, float precision, float fdx, float fdy) 515 515 { 516 516 # define Z 3 517 float mat[NN][NN] ;517 float mat[NN][NN], mat2[NN][NN]; 518 518 float *tmp, *tmp2; 519 float e, e0, best = 1., fx = -1., fy = -1., step = 2., bfx = 0., bfy = 0.; 519 float e, e0, e1; 520 float best = 1., fx = -1., fy = -1., step = 2., bfx = 0., bfy = 0.; 520 521 int dx, dy; 521 522 522 523 makegauss(mat, sigma, 0., 0.); 523 524 tmp = gauss(src, mat); 525 524 526 tmp2 = gauss(dest, mat); 525 526 527 e0 = dist(tmp, tmp2, 1.); 528 free(tmp2); 529 530 makegauss(mat2, sigma, fdx, fdy); 531 tmp2 = gauss(dest, mat2); 532 e1 = dist(tmp, tmp2, 1.); 527 533 free(tmp2); 528 534 … … 551 557 free(tmp); 552 558 553 printf("E = %g E_ min = %g dx = %g dy = %g\n",554 1000 * e0, 1000* best, fx, fy);559 printf("E = %g E_fast = %g E_min = %g dx = %g dy = %g\n", 560 1000. * e0, 1000. * e1, 1000. * best, fx, fy); 555 561 fflush(stdout); 556 562 } … … 576 582 fprintf(stderr, " -3 <src> quick (a,b,c,d) ED kernel analysis on src\n"); 577 583 fprintf(stderr, " -4 <src> exhaustive (a,b,c,d) ED kernel analysis on src\n"); 584 fprintf(stderr, " -5 <src> exhaustive displacement study on src\n"); 578 585 } 579 586 … … 601 608 return 2; 602 609 610 printf("### mode %i on `%s' ###\n", mode, argv[2]); 611 603 612 switch(mode) 604 613 { 605 614 case 1: 606 615 { 607 float *dest = ed(src, false, 7, 0, 1, 3, 5, 0, 0, 0, 0, 0, 0, 0); 608 study(src, dest, 1.2, 0.001); 616 float *dest = ed(src, false, 7, 0, 617 0, 3, 5, 1, 0, 618 0, 0, 0, 0, 0); 619 study(src, dest, 1.2, 0.001, .16, .28); 609 620 free(dest); 610 621 free(src); … … 625 636 { 626 637 tmp = merge(src, src2, (float)i / 100.); 627 dest = ed(tmp, false, 7, 0, 1, 3, 5, 0, 0, 0, 0, 0, 0, 0); 628 study(tmp, dest, 1.2, 0.001); 638 dest = ed(tmp, false, 7, 0, 639 0, 3, 5, 1, 0, 640 0, 0, 0, 0, 0); 641 study(tmp, dest, 1.2, 0.001, .16, .28); 629 642 free(dest); 630 643 free(tmp); … … 638 651 case 4: 639 652 { 640 float mat 0[NN][NN];653 float mat[NN][NN]; 641 654 float *dest, *tmp, *tmp2; 642 655 int a, b, c, d, e; 643 656 644 makegauss(mat0, 1.2, 0, 0); 645 for(a = 0; a <= 16; a++) 646 for(b = 0; b <= 16; b++) 647 for(c = 0; c <= 16; c++) 648 for(d = 0; d <= 16; d++) 649 for(e = 0; e <= 16; e++) 650 { 651 if(a + b + c + d + e != 16) 657 #define TOTAL 16 658 makegauss(mat, 1.2, 0, 0); 659 for(a = 0; a <= TOTAL; a++) 660 for(b = 0; b <= TOTAL; b++) 661 for(c = 0; c <= TOTAL; c++) 662 for(d = 0; d <= TOTAL; d++) 663 for(e = 0; e <= TOTAL; e++) 664 { 665 if(a + b + c + d + e != TOTAL) 652 666 continue; 653 667 … … 657 671 #define SHUFFLE(p,q,n) \ 658 672 if(p+q) { int tmp = p+q; p = (p+n) % (tmp+1); q = tmp-p; } 659 SHUFFLE(c2, d2, 7 ); SHUFFLE(b2, d2,5);660 SHUFFLE(a2, d2, 3 ); SHUFFLE(b2, c2,2);661 SHUFFLE(a2, e2, 3 ); SHUFFLE(b2, e2,2);662 SHUFFLE(a2, c2, 4 ); SHUFFLE(a2, b2,6);663 SHUFFLE(c2, e2, 9 ); SHUFFLE(d2, e2,7);664 SHUFFLE(a2, d2, 9 ); SHUFFLE(a2, b2,7);673 SHUFFLE(c2, d2, 777); SHUFFLE(b2, d2, 555); 674 SHUFFLE(a2, d2, 333); SHUFFLE(b2, c2, 222); 675 SHUFFLE(a2, e2, 333); SHUFFLE(b2, e2, 222); 676 SHUFFLE(a2, c2, 444); SHUFFLE(a2, b2, 666); 677 SHUFFLE(c2, e2, 999); SHUFFLE(d2, e2, 777); 678 SHUFFLE(a2, d2, 999); SHUFFLE(a2, b2, 777); 665 679 666 680 #if 0 … … 674 688 printf("K = %d,%d,%d,%d ", a2, c2, d2, e2); 675 689 676 dest = ed(src, false, a2, 0, b2, c2, d2, e2, 0, 0, 0, 0, 0, 0); 677 if(mode == 3) 678 { 679 tmp = gauss(src, mat0); 680 tmp2 = gauss(dest, mat0); 690 dest = ed(src, false, a2, 0, 691 b2, c2, d2, e2, 0, 692 0, 0, 0, 0, 0); 693 if(mode == 4) 694 { 695 study(src, dest, 1.2, 0.001, 0., 0.); 696 } 697 else 698 { 699 tmp = gauss(src, mat); 700 tmp2 = gauss(dest, mat); 681 701 printf("E = %.5g\n", 1000. * dist(tmp, tmp2, 1.)); 682 702 free(tmp); 683 703 free(tmp2); 684 704 } 685 else686 study(src, dest, 1.2, 0.001);687 705 fflush(stdout); 688 706 free(dest); … … 690 708 691 709 free(src); 710 } 711 break; 712 713 case 5: 714 { 715 float *dest; 716 717 dest = ed(src, false, 7, 0, 718 0, 3, 5, 1, 0, 719 0, 0, 0, 0, 0); 720 study(src, dest, 1.2, 0.001, .16, .28); 721 free(dest); 722 723 dest = ed(src, false, 7, 5, 724 3, 5, 7, 5, 3, 725 1, 3, 5, 3, 1); 726 study(src, dest, 1.2, 0.001, .26, .76); 727 free(dest); 728 729 dest = ostromoukhov(src); 730 study(src, dest, 1.2, 0.001, .0, .19); 731 free(dest); 732 733 dest = ed(src, true, 2911, 0, 734 0, 1373, 3457, 2258, 0, 735 0, 0, 0, 0, 0); 736 study(src, dest, 1.2, 0.001, .0, .34); 692 737 } 693 738 break; … … 768 813 769 814 #if 0 770 printf("%s: ", argv[1]);771 makegauss(mat0, 1.2, 0, 0);772 tmp = gauss(src, mat0);773 774 dest = ed(src, false, 7, 0, 0, 3, 5, 1, 0, 0, 0, 0, 0, 0);775 tmp2 = gauss(dest, mat0);776 printf("%.5g ", 1000. * dist(tmp, tmp2, 1.));777 free(tmp2);778 makegauss(mat, 1.2, 0.16, 0.28);779 tmp2 = gauss(dest, mat);780 printf("%.5g ", 1000. * dist(tmp, tmp2, 1.));781 free(tmp2);782 free(dest);783 784 dest = ed(src, false, 7, 5, 3, 5, 7, 5, 3, 1, 3, 5, 3, 1);785 tmp2 = gauss(dest, mat0);786 printf("%.5g ", 1000. * dist(tmp, tmp2, 1.));787 free(tmp2);788 makegauss(mat, 1.2, 0.26, 0.76);789 tmp2 = gauss(dest, mat);790 printf("%.5g ", 1000. * dist(tmp, tmp2, 1.));791 free(tmp2);792 free(dest);793 794 dest = ostromoukhov(src);795 tmp2 = gauss(dest, mat0);796 printf("%.5g ", 1000. * dist(tmp, tmp2, 1.));797 free(tmp2);798 makegauss(mat, 1.2, 0.0, 0.19);799 tmp2 = gauss(dest, mat);800 printf("%.5g ", 1000. * dist(tmp, tmp2, 1.));801 free(tmp2);802 free(dest);803 804 dest = ed(src, true, 2911, 0, 0, 1373, 3457, 2258, 0, 0, 0, 0, 0, 0);805 tmp2 = gauss(dest, mat0);806 printf("%.5g ", 1000. * dist(tmp, tmp2, 1.));807 free(tmp2);808 makegauss(mat, 1.2, 0.0, 0.34);809 tmp2 = gauss(dest, mat);810 printf("%.5g ", 1000. * dist(tmp, tmp2, 1.));811 free(tmp2);812 free(dest);813 814 printf("\n");815 #endif816 817 #if 0818 815 printf("%s\n", argv[1]); 819 816
Note: See TracChangeset
for help on using the changeset viewer.