Home | History | Annotate | Download | only in src

Lines Matching refs:state

121                             CvEMDState * state, float *lower_bound,
131 static void icvRussel( CvEMDState * state );
134 static CvStatus icvNewSolution( CvEMDState * state );
135 static int icvFindLoop( CvEMDState * state );
137 static void icvAddBasicVariable( CvEMDState * state,
160 CvEMDState state;
165 memset( &state, 0, sizeof(state));
259 &state, lower_bound, local_buffer_ptr,
268 eps = CV_EMD_EPS * state.max_cost;
271 if( state.ssize > 1 && state.dsize > 1 )
278 result = icvFindBasicVariables( state.cost, state.is_x,
279 state.u, state.v, state.ssize, state.dsize );
284 min_delta = icvIsOptimal( state.cost, state.is_x,
285 state.u, state.v,
286 state.ssize, state.dsize, state.enter_x );
298 IPPI_CALL( icvNewSolution( &state ));
303 for( xp = state._x; xp < state.end_x; xp++ )
308 int ci = state.idx1[i];
309 int cj = state.idx2[j];
311 if( xp != state.enter_x && ci >= 0 && cj >= 0 )
313 total_cost += (double)val * state.cost[i][j];
319 emd = (float) (total_cost / state.weight);
323 if( state.buffer && state.buffer != local_buffer_ptr )
324 cvFree( &state.buffer );
338 CvEMDState* state, float* lower_bound,
349 memset( state, 0, sizeof( *state ));
382 state->buffer = buffer;
385 state->idx1 = (int*) buffer;
388 state->idx2 = (int*) buffer;
391 state->s = (float *) buffer;
394 state->d = (float *) buffer;
405 state->s[ssize] = weight;
406 state->idx1[ssize++] = i;
420 state->d[dsize] = weight;
421 state->idx2[dsize++] = i;
437 state->s[ssize] = -diff;
438 state->idx1[ssize++] = -1;
442 state->d[dsize] = diff;
443 state->idx2[dsize++] = -1;
447 state->ssize = ssize;
448 state->dsize = dsize;
449 state->weight = s_sum > d_sum ? s_sum : d_sum;
476 lb = dist_func( xs, xd, user_param ) / state->weight;
484 state->is_used = (char *) buffer;
486 state->delta = (float **) buffer;
491 state->delta[i] = (float *) buffer;
495 state->loop = (CvNode2D **) buffer;
498 state->_x = state->end_x = (CvNode2D *) buffer;
502 state->cost = (float **) buffer;
508 int ci = state->idx1[i];
510 state->cost[i] = (float *) buffer;
517 int cj = state->idx2[j];
519 state->cost[i][j] = 0;
534 state->cost[i][j] = val;
543 state->cost[i][j] = 0;
547 state->max_cost = max_cost;
551 state->rows_x = (CvNode2D **) buffer;
554 state->cols_x = (CvNode2D **) buffer;
557 state->u = (CvNode1D *) buffer;
560 state->v = (CvNode1D *) buffer;
564 state->is_x = (char **) buffer;
569 state->is_x[i] = buffer;
575 icvRussel( state );
577 state->enter_x = (state->end_x)++;
749 icvNewSolution( CvEMDState * state )
755 CvNode2D *enter_x = state->enter_x;
756 CvNode2D **loop = state->loop;
761 state->is_x[i][j] = 1;
762 enter_x->next[0] = state->rows_x[i];
763 enter_x->next[1] = state->cols_x[j];
765 state->rows_x[i] = enter_x;
766 state->cols_x[j] = enter_x;
769 steps = icvFindLoop( state );
799 state->is_x[i][j] = 0;
801 head.next[0] = state->rows_x[i];
809 state->rows_x[i] = head.next[0];
811 head.next[1] = state->cols_x[j];
819 state->cols_x[j] = head.next[1];
822 state->enter_x = leave_x;
833 icvFindLoop( CvEMDState * state )
837 CvNode2D **loop = state->loop;
838 CvNode2D *enter_x = state->enter_x, *_x = state->_x;
839 char *is_used = state->is_used;
841 memset( is_used, 0, state->ssize + state->dsize );
852 new_x = state->rows_x[new_x->i];
859 new_x = state->cols_x[new_x->j];
908 icvRussel( CvEMDState * state )
915 CvNode1D *u = state->u, *v = state->v;
916 int ssize = state->ssize, dsize = state->dsize;
917 float eps = CV_EMD_EPS * state->max_cost;
918 float **cost = state->cost;
919 float **delta = state->delta;
1002 icvAddBasicVariable( state, min_i, min_j, prev_u_min_i, prev_v_min_j, &u_head );
1074 icvAddBasicVariable( CvEMDState * state,
1079 CvNode2D *end_x = state->end_x;
1081 if( state->s[min_i] < state->d[min_j] + state->weight * CV_EMD_EPS )
1083 temp = state->s[min_i];
1084 state->s[min_i] = 0;
1085 state->d[min_j] -= temp;
1089 temp = state->d[min_j];
1090 state->d[min_j] = 0;
1091 state->s[min_i] -= temp;
1095 state->is_x[min_i][min_j] = 1;
1100 end_x->next[0] = state->rows_x[min_i];
1101 end_x->next[1] = state->cols_x[min_j];
1102 state->rows_x[min_i] = end_x;
1103 state->cols_x[min_j] = end_x;
1104 state->end_x = end_x + 1;
1107 if( state->s[min_i] == 0 && u_head->next->next != 0 )