\ * icvIsOptimal * \****************************************************************************************/
| 685 | * icvIsOptimal * |
| 686 | \****************************************************************************************/ |
| 687 | static float |
| 688 | icvIsOptimal( float **cost, char **is_x, |
| 689 | CvNode1D * u, CvNode1D * v, int ssize, int dsize, CvNode2D * enter_x ) |
| 690 | { |
| 691 | float delta, min_delta = CV_EMD_INF; |
| 692 | int i, j, min_i = 0, min_j = 0; |
| 693 | |
| 694 | /* find the minimal cij-ui-vj over all i,j */ |
| 695 | for( i = 0; i < ssize; i++ ) |
| 696 | { |
| 697 | float u_val = u[i].val; |
| 698 | float *_cost = cost[i]; |
| 699 | char *_is_x = is_x[i]; |
| 700 | |
| 701 | for( j = 0; j < dsize; j++ ) |
| 702 | { |
| 703 | if( !_is_x[j] ) |
| 704 | { |
| 705 | delta = _cost[j] - u_val - v[j].val; |
| 706 | if( min_delta > delta ) |
| 707 | { |
| 708 | min_delta = delta; |
| 709 | min_i = i; |
| 710 | min_j = j; |
| 711 | } |
| 712 | } |
| 713 | } |
| 714 | } |
| 715 | |
| 716 | enter_x->i = min_i; |
| 717 | enter_x->j = min_j; |
| 718 | |
| 719 | return min_delta; |
| 720 | } |
| 721 | |
| 722 | /****************************************************************************************\ |
| 723 | * icvNewSolution * |