MCPcopy Create free account
hub / github.com/creatale/node-dv / icvRussel

Function icvRussel

deps/opencv/modules/imgproc/src/emd.cpp:884–1043  ·  view source on GitHub ↗

\ * icvRussel * \****************************************************************************************/

Source from the content-addressed store, hash-verified

882* icvRussel *
883\****************************************************************************************/
884static void
885icvRussel( CvEMDState * state )
886{
887 int i, j, min_i = -1, min_j = -1;
888 float min_delta, diff;
889 CvNode1D u_head, *cur_u, *prev_u;
890 CvNode1D v_head, *cur_v, *prev_v;
891 CvNode1D *prev_u_min_i = 0, *prev_v_min_j = 0, *remember;
892 CvNode1D *u = state->u, *v = state->v;
893 int ssize = state->ssize, dsize = state->dsize;
894 float eps = CV_EMD_EPS * state->max_cost;
895 float **cost = state->cost;
896 float **delta = state->delta;
897
898 /* initialize the rows list (ur), and the columns list (vr) */
899 u_head.next = u;
900 for( i = 0; i < ssize; i++ )
901 {
902 u[i].next = u + i + 1;
903 }
904 u[ssize - 1].next = 0;
905
906 v_head.next = v;
907 for( i = 0; i < dsize; i++ )
908 {
909 v[i].val = -CV_EMD_INF;
910 v[i].next = v + i + 1;
911 }
912 v[dsize - 1].next = 0;
913
914 /* find the maximum row and column values (ur[i] and vr[j]) */
915 for( i = 0; i < ssize; i++ )
916 {
917 float u_val = -CV_EMD_INF;
918 float *cost_row = cost[i];
919
920 for( j = 0; j < dsize; j++ )
921 {
922 float temp = cost_row[j];
923
924 if( u_val < temp )
925 u_val = temp;
926 if( v[j].val < temp )
927 v[j].val = temp;
928 }
929 u[i].val = u_val;
930 }
931
932 /* compute the delta matrix */
933 for( i = 0; i < ssize; i++ )
934 {
935 float u_val = u[i].val;
936 float *delta_row = delta[i];
937 float *cost_row = cost[i];
938
939 for( j = 0; j < dsize; j++ )
940 {
941 delta_row[j] = cost_row[j] - u_val - v[j].val;

Callers 1

icvInitEMDFunction · 0.85

Calls 1

icvAddBasicVariableFunction · 0.85

Tested by

no test coverage detected