+/**
+ *
+ * \brief determine la valeur de NG de la ligne de niveau demarrant de i,j
+ * \author NB - PhyTI
+ *
+ * \param[in] image image d'entree
+ * \param[in] i coord i du point de depart
+ * \param[in] j coord j du point de depart
+ *
+ * \return la valeur de la ligne
+ *
+ * la ligne de niveau ne va que d'un cote
+ * on cherche le segment de r pixels ou les valeurs
+ * de l'image ont une variance minimale
+ * il y a 24 segments possibles (4 par quadrants)
+ * la direction 0 va vers le haut, les directions tournent
+ * dans le sens horaire, dans l'ordre croissant
+ *
+ * pas de test de bord : pas d'utilisation a moins de r pixels du bords
+ *
+ *
+ * EN TEST
+ */
+int lniv4_value(unsigned int *image, int2 *path, int i, int j, int idim, int jdim, int *dout, unsigned int r )
+{
+ int value_c ;
+ int value2_c ;
+ int d, v, p, d_min, eq_min, eq, sum, sum2 ;
+ int sum_eq_min ;
+ int it, jt ;
+
+
+ /* mem */
+ value_c = image[i*jdim + j] ;
+ value2_c = value_c*value_c ;
+
+ // direction d=0
+ sum = value_c ;
+ sum2 = value2_c ;
+ it = i ;
+ jt = j ;
+ for (p=0; p<r-1; p++)
+ {
+ it += path[p].x ; // Di_Q1[0][p] ;
+ jt += path[p].y ; // Dj_Q1[0][p] ;
+ v = image[it*jdim + jt] ;
+ sum += v ;
+ sum2 += v*v ;
+ }
+ eq_min = sum2 - sum*sum/r ; /* *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<r-1; p++)
+ {
+ it += path[d*jdim + p].x ; // Di_Q1[d][p] ;
+ jt += path[d*jdim + p].y ; // Dj_Q1[d][p] ;
+ v = image[it*jdim + jt] ;
+ sum += v ;
+ sum2 += v*v ;
+ }
+ eq = sum2 - sum*sum/r ; /* *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<r-1; p++)
+ {
+ it += path[d*jdim + p].y ; // Dj_Q1[d][p] ;
+ jt -= path[d*jdim + p].x ; // ]Di_Q1[d][p] ;
+ v = image[it*jdim + jt] ;
+ sum += v ;
+ sum2 += v*v ;
+ }
+ eq = sum2 - sum*sum/r ; /* *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<r-1; p++)
+ {
+ it -= path[d*jdim + p].x ; // Di_Q1[d][p] ;
+ jt -= path[d*jdim + p].y ; // Dj_Q1[d][p] ;
+ v = image[it*jdim + jt] ;
+ sum += v ;
+ sum2 += v*v ;
+ }
+ eq = sum2 - sum*sum/r ; /* *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<r-1; p++)
+ {
+ it -= path[d*jdim + p].y ; // Dj_Q1[d][p] ;
+ jt += path[d*jdim + p].x ; // Di_Q1[d][p] ;
+ v = image[it*jdim + jt] ;
+ sum += v ;
+ sum2 += v*v ;
+ }
+ eq = sum2 - sum*sum/r ; /* *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/r ;
+}
+