]> AND Private Git Repository - lniv_gpu.git/blob - levelines_common.c
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
generation de chemins de taille parametrable
[lniv_gpu.git] / levelines_common.c
1 #include "levelines_common.h"
2
3 unsigned int lniv4_value(unsigned int **image, int i, int j, int idim, int jdim, int *dout)
4 {
5   unsigned int value_c ;
6   unsigned int value2_c ;
7   unsigned int d, v, p, d_min, eq_min, eq, sum, sum2 ;
8   unsigned int sum_eq_min ;
9   unsigned int it, jt ;
10
11
12   /* mem */
13   value_c = image[ i*l + j ] ;
14   value2_c = value_c*value_c ;
15
16   // direction d=0
17   sum = value_c ;
18   sum2 = value2_c ;
19   it = i ;
20   jt = j ;
21   for (p=0; p<3; p++)
22     {
23       it += Di_Q1[0][p] ;
24       jt += Dj_Q1[0][p] ;
25       v = image[ it*l + jt ] ;
26       sum += v ;
27       sum2 += v*v ;
28     }
29   eq_min = sum2 - sum*sum/4 ; /* *4 */
30   sum_eq_min = sum ;
31   d_min = 0 ;
32
33   /* direction 1 a 5 */
34   for (d=1; d<6; d++)
35     {
36       sum = value_c ;
37       sum2 = value2_c ;
38       it = i ;
39       jt = j ;
40       for (p=0; p<3; p++)
41         {
42           it += Di_Q1[d][p] ;
43           jt += Dj_Q1[d][p] ;
44           v = image[it*l + jt] ;
45           sum += v ;
46           sum2 += v*v ;
47         }
48       eq = sum2 - sum*sum/4 ; /* *4 */
49       if (eq < eq_min)
50         {
51           eq_min = eq ;
52           sum_eq_min = sum ;
53           d_min = d ; /* pour info */    
54         }
55     }
56
57   /* direction 6 a 11 */
58   for (d=0; d<6; d++)
59     {
60       sum = value_c ;
61       sum2 = value2_c ;
62       it = i ;
63       jt = j ;
64       for (p=0; p<3; p++)
65         {
66           it += Dj_Q1[d][p] ;
67           jt -= Di_Q1[d][p] ;
68           v = image[it*l + jt] ;
69           sum += v ;
70           sum2 += v*v ;
71         }
72       eq = sum2 - sum*sum/4 ; /* *4 */
73       if (eq < eq_min)
74         {
75           eq_min = eq ;
76           sum_eq_min = sum ;
77           d_min = d+6 ; /* pour info */  
78         }
79     }
80
81   /* direction 12 a 17 */
82   for (d=0; d<6; d++)
83     {
84       sum = value_c ;
85       sum2 = value2_c ;
86       it = i ;
87       jt = j ;
88       for (p=0; p<3; p++)
89         {
90           it -= Di_Q1[d][p] ;
91           jt -= Dj_Q1[d][p] ;
92           v = image[it*l + jt] ;
93           sum += v ;
94           sum2 += v*v ;
95         }
96       eq = sum2 - sum*sum/4 ; /* *4 */
97       if (eq < eq_min)
98         {
99           eq_min = eq ;
100           sum_eq_min = sum ;
101           d_min = d+12 ; /* pour info */         
102         }
103     }
104   
105   /* direction 18 a 23 */
106   for (d=0; d<6; d++)
107     {
108       sum = value_c ;
109       sum2 = value2_c ;
110       it = i ;
111       jt = j ;
112       for (p=0; p<3; p++)
113         {
114           it -= Dj_Q1[d][p] ;
115           jt += Di_Q1[d][p] ;
116           v = image[it*l + jt] ;
117           sum += v ;
118           sum2 += v*v ;
119         }
120       eq = sum2 - sum*sum/4 ; /* *4 */
121       if (eq < eq_min)
122         {
123              eq_min = eq ;
124              sum_eq_min = sum ;
125              d_min = d+18 ; /* pour info */      
126         }
127     }
128   
129   *dout = d_min ;
130   return sum_eq_min/4 ;
131 }