+extern "C" unsigned int lniv_cpu(unsigned int *image, int i, int j, int idim, int l, int *dout){
+
+ unsigned int value_c ;
+ unsigned int value2_c ;
+ unsigned int d, v, p, d_min, eq_min, eq, sum, sum2 ;
+ unsigned int sum_eq_min ;
+ unsigned int it, jt ;
+
+
+ /* mem */
+ value_c = image[ i*l + j ] ;
+ value2_c = value_c*value_c ;
+
+ // direction d=0
+ sum = value_c ;
+ sum2 = value2_c ;
+ it = i ;
+ jt = j ;
+ for (p=0; p<3; p++)
+ {
+ it += Di_Q1[0][p] ;
+ jt += Dj_Q1[0][p] ;
+ v = image[ it*l + jt ] ;
+ sum += v ;
+ sum2 += v*v ;
+ }
+ eq_min = sum2 - sum*sum/4 ; /* *4 */
+ sum_eq_min = sum ;
+ d_min = 0 ;
+
+ /* direction 1 a 5 */
+ for (d=1; d<6; d++)
+ {
+ sum = value_c ;
+ sum2 = value2_c ;
+ it = i ;
+ jt = j ;
+ for (p=0; p<3; p++)
+ {
+ it += Di_Q1[d][p] ;
+ jt += Dj_Q1[d][p] ;
+ v = image[it*l + jt] ;
+ sum += v ;
+ sum2 += v*v ;
+ }
+ eq = sum2 - sum*sum/4 ; /* *4 */
+ if (eq < eq_min)
+ {
+ eq_min = eq ;
+ sum_eq_min = sum ;
+ d_min = d ; /* pour info */
+ }
+ }
+
+ /* direction 6 a 11 */
+ for (d=0; d<6; d++)
+ {
+ sum = value_c ;
+ sum2 = value2_c ;
+ it = i ;
+ jt = j ;
+ for (p=0; p<3; p++)
+ {
+ it += Dj_Q1[d][p] ;
+ jt -= Di_Q1[d][p] ;
+ v = image[it*l + jt] ;
+ sum += v ;
+ sum2 += v*v ;
+ }
+ eq = sum2 - sum*sum/4 ; /* *4 */
+ if (eq < eq_min)
+ {
+ eq_min = eq ;
+ sum_eq_min = sum ;
+ d_min = d+6 ; /* pour info */
+ }
+ }
+
+ /* direction 12 a 17 */
+ for (d=0; d<6; d++)
+ {
+ sum = value_c ;
+ sum2 = value2_c ;
+ it = i ;
+ jt = j ;
+ for (p=0; p<3; p++)
+ {
+ it -= Di_Q1[d][p] ;
+ jt -= Dj_Q1[d][p] ;
+ v = image[it*l + jt] ;
+ sum += v ;
+ sum2 += v*v ;
+ }
+ eq = sum2 - sum*sum/4 ; /* *4 */
+ if (eq < eq_min)
+ {
+ eq_min = eq ;
+ sum_eq_min = sum ;
+ d_min = d+12 ; /* pour info */
+ }
+ }
+
+ /* direction 18 a 23 */
+ for (d=0; d<6; d++)
+ {
+ sum = value_c ;
+ sum2 = value2_c ;
+ it = i ;
+ jt = j ;
+ for (p=0; p<3; p++)
+ {
+ it -= Dj_Q1[d][p] ;
+ jt += Di_Q1[d][p] ;
+ v = image[it*l + jt] ;
+ sum += v ;
+ sum2 += v*v ;
+ }
+ eq = sum2 - sum*sum/4 ; /* *4 */
+ if (eq < eq_min)
+ {
+ eq_min = eq ;
+ sum_eq_min = sum ;
+ d_min = d+18 ; /* pour info */
+ }
+ }
+
+ *dout = d_min ;
+ return sum_eq_min/4 ;
+ };
+