2 * \file lib_lniv_common.c
3 * \brief routines pour la gestion des lignes de niveaux
12 #include "lib_lniv_common.h"
17 * \brief calcul du PSNR entre deux images int
20 * \param[in] im1 image d'entree
21 * \param[in] im2 image d'entree
24 * \param[in] range dynamique de l'image
27 double psnr_image_int(int **im1, int **im2, int idim, int jdim, int range)
31 double err, eq = 0.0 ;
32 for (n=0; n<idim*jdim; n++)
34 err = im1[0][n]-im2[0][n] ;
37 eqm = eq / (idim*jdim) ;
39 return 10.0*log10((double)range*range/eqm) ;
48 * \brief Filtrage d'une image par moyenne
51 * \param[out] result image de sortie
52 * \param[in] matrix image d'entree
55 * \param[in] dim_wind largeur du noyau carre
58 void mean2ds(int **result, int **matrix, int dim_wind,
61 int dim_wind2 = (int)floor(dim_wind/2);
62 double sqr_dim_wind = dim_wind*dim_wind;
64 int i, j, iw, jw, iiw ;
66 // On calcul les bords en version lente
67 for (i=0;i<i_dim; i++)
68 for (j=0;j<j_dim; j++)
70 if ((i>dim_wind2+1)&&(i<(i_dim-dim_wind2-1)))
75 for (iw=i-dim_wind2;iw<i+dim_wind2+1;iw++)
76 for (jw=j-dim_wind2;jw<j+dim_wind2+1;jw++)
77 if ((iw>=0)&&(jw>=0)&&(iw<i_dim)&&(jw<j_dim))
78 result[i][j] += matrix[iw][jw] ;
81 // On calcul le centre en version rapide
82 for (i=dim_wind2+1;i<i_dim-dim_wind2; i++)
84 for (j=dim_wind2+1;j<j_dim-dim_wind2; j++)
87 for (iiw=i-dim_wind2;iiw<=i+dim_wind2;iiw++)
88 tmp_diff += matrix[iiw][j+dim_wind2] - matrix[iiw][j-dim_wind2-1] ;
90 result[i][j] = result[i][j-1] + tmp_diff ;
94 // On divise pour la moyenne
95 // pb sur les bords !!!
98 result[i][j] /= sqr_dim_wind;