3 #ifndef LEVELINES_COMMON_H
4 #define LEVELINES_COMMON_H
8 #include <cuda_runtime.h>
13 ////////////////////////////////////////////////////////////////////////////////
14 // Reference CPU functions
15 ////////////////////////////////////////////////////////////////////////////////
16 //extern "C" void fonc(...);
19 * \brief determine la valeur de NG de la ligne de niveau demarrant de i,j
22 * \param[in] image image d'entree
23 * \param[in] i coord i du point de depart
24 * \param[in] j coord j du point de depart
26 * \return la valeur de la ligne
28 * la ligne de niveau ne va que d'un cote
29 * on cherche le segment de r pixels ou les valeurs
30 * de l'image ont une variance minimale
31 * il y a 24 segments possibles (4 par quadrants)
32 * la direction 0 va vers le haut, les directions tournent
33 * dans le sens horaire, dans l'ordre croissant
35 * pas de test de bord : pas d'utilisation a moins de r pixels du bords
40 int lniv4_value(unsigned int *image, int2 *path, int i, int j, int idim, int jdim, int *dout, unsigned int r )
44 int d, v, p, d_min, eq_min, eq, sum, sum2 ;
50 value_c = image[i*jdim + j] ;
51 value2_c = value_c*value_c ;
60 it += path[p].x ; // Di_Q1[0][p] ;
61 jt += path[p].y ; // Dj_Q1[0][p] ;
62 v = image[it*jdim + jt] ;
66 eq_min = sum2 - sum*sum/r ; /* *4 */
79 it += path[d*jdim + p].x ; // Di_Q1[d][p] ;
80 jt += path[d*jdim + p].y ; // Dj_Q1[d][p] ;
81 v = image[it*jdim + jt] ;
85 eq = sum2 - sum*sum/r ; /* *4 */
90 d_min = d ; /* pour info */
94 /* direction 6 a 11 */
101 for (p=0; p<r-1; p++)
103 it += path[d*jdim + p].y ; // Dj_Q1[d][p] ;
104 jt -= path[d*jdim + p].x ; // ]Di_Q1[d][p] ;
105 v = image[it*jdim + jt] ;
109 eq = sum2 - sum*sum/r ; /* *4 */
114 d_min = d+6 ; /* pour info */
118 /* direction 12 a 17 */
125 for (p=0; p<r-1; p++)
127 it -= path[d*jdim + p].x ; // Di_Q1[d][p] ;
128 jt -= path[d*jdim + p].y ; // Dj_Q1[d][p] ;
129 v = image[it*jdim + jt] ;
133 eq = sum2 - sum*sum/r ; /* *4 */
138 d_min = d+12 ; /* pour info */
142 /* direction 18 a 23 */
149 for (p=0; p<r-1; p++)
151 it -= path[d*jdim + p].y ; // Dj_Q1[d][p] ;
152 jt += path[d*jdim + p].x ; // Di_Q1[d][p] ;
153 v = image[it*jdim + jt] ;
157 eq = sum2 - sum*sum/r ; /* *4 */
162 d_min = d+18 ; /* pour info */
167 return sum_eq_min/r ;
171 ////////////////////////////////////////////////////////////////////////////////
172 // GPU functions (in file.cu)
173 ////////////////////////////////////////////////////////////////////////////////
174 //extern "C" void fonc(float *h_Kernel);