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

Private GIT Repository
version operationnelle avec chemins parametrables
[lniv_gpu.git] / lniv.c
1 /**
2  * \file nliv.c
3  * \brief test de reduction par MV et contriante de ligne de niveaux
4  * \author NB - PhyTI 
5  * \version x.x
6  * \date 6 mai 2011
7  *
8  */
9
10 // protection
11 #ifdef __PROTECT
12 #include <sys/ptrace.h>
13 #endif
14
15
16 #include <stdio.h>
17 #ifdef __MULTI_THREAD
18 #include <pthread.h>
19 #endif
20
21 #include "lib_alloc.h"
22 #include "lib_images.h"
23 #include "lib_math.h"
24 #include "lib_pretraitement.h"
25
26 #include "lib_lniv.h"
27
28
29 int main(int argc, char **argv)
30 {
31 // protection light
32 #ifdef __PROTECT
33   if (ptrace(PTRACE_TRACEME, 0, 1, 0) < 0) return(0) ;
34 #endif
35
36   /* declaration des variables */
37   int ret ;
38   int Bin_file = 0 ;
39   int Prof ;        /* profondeur en octets */
40   int I_dim ;       /* hauteur de l'image */
41   int J_dim ;       /* largeur de l'image */
42   int Nb_level ;    /* dynamique de l'image */
43   char *File_name ;
44   char *PARAM = NULL ;
45  
46   /* images */
47   int **Image_in1, **Image_out1 ;
48   int **Image_in2=NULL, **Image_in3=NULL ;
49   int **Image_out2=NULL, **Image_out3=NULL ;
50
51
52   /* variables de calculs */
53   struct timeval chrono ;
54
55   /* debug : affichage snake */
56   int Verbose = 1 ;
57   int Display = 1 ;
58  
59
60   /* lecture argument entree (basique!) */
61   if (argc == 1)
62     {
63       fprintf(stderr, "USAGE : LNIV pgm_file <params>\n") ;
64       fprintf(stderr, 
65               "\n"
66               "\n"
67               "\n"
68               "\n") ;
69       return(0) ;
70     }
71   File_name = argv[1] ;
72
73   /* verif type image (pgm 8/16) */
74   ret = type_image_ppm(&Prof, &I_dim, &J_dim, &Nb_level, File_name) ;
75   Nb_level++ ;
76   
77   if (ret == 0)
78     {
79       /* tentative image bin */
80       ret = load_dim_image_bin(&I_dim, &J_dim, File_name) ;
81       if (ret != 1)
82         {
83           printf("format non pris en charge ... exit\n") ;
84           return(0) ;
85         }
86       Nb_level = 65536 ; // quantif 16 bits pour les bin
87       Bin_file = 1 ;
88       Prof = 1 ;
89     }
90
91   /* infos */
92   if (Verbose)
93     {
94       printf("Image : %s\n", File_name) ;
95       printf("lecture OK : %d\n", ret) ;
96       printf("Image (%d x %d) pixels\n", I_dim, J_dim) ;
97       printf("Dynamique : %d\n", Nb_level) ;
98       printf("Canaux : %d\n", Prof) ;
99     } ;
100
101   /* Allocation */
102   Image_in1  = new_matrix_int(I_dim, J_dim) ;
103   Image_out1 = new_matrix_int(I_dim, J_dim) ;
104   if (Prof == 3)
105     {
106       Image_in2 = new_matrix_int(I_dim, J_dim) ;
107       Image_out2 = new_matrix_int(I_dim, J_dim) ;
108       Image_in3 = new_matrix_int(I_dim, J_dim) ;
109       Image_out3 = new_matrix_int(I_dim, J_dim) ;
110      }
111
112   /* chargement image d'entree */  
113   tic(&chrono, NULL) ;
114   if (Bin_file)
115     load_bin2int(Image_in1, I_dim, J_dim, Nb_level, File_name) ;
116   else
117     if (Prof == 1)
118       load_pgm2int(Image_in1, I_dim, J_dim, Nb_level, File_name) ;
119     else /* (Prof == 3) */
120       {
121         load_ppm2int(Image_in1, Image_in2, Image_in3, I_dim, J_dim, File_name ) ;
122         //RGB2YUV(Image_in1[0], Image_in2[0], Image_in3[0], I_dim*J_dim) ;
123       }
124
125   toc(chrono, "temps chargement image") ;
126   if (Display) image16(Image_in1, I_dim, J_dim) ; 
127   if ((Display)&&(Prof == 3)) image16(Image_in2, I_dim, J_dim) ; 
128   if ((Display)&&(Prof == 3)) image16(Image_in3, I_dim, J_dim) ; 
129  
130  /* sequence de parametre */
131   if (argc >= 3) PARAM = argv[2] ;
132
133   double poids = 15.0 ;
134   int nb_iter = 15 ;
135   if (Prof == 1)
136     {
137       if (Verbose)
138         {
139           printf("poids contrainte : %.3f\n", poids) ;
140           printf("nombre d'iteration GN : %d\n", nb_iter) ;
141         }
142       tic(&chrono, NULL) ;
143       mv_gaussien_lniv(Image_in1, Image_out1, I_dim, J_dim, poids, nb_iter) ;
144       toc(chrono, "temps lniv_image") ;
145       
146       wimage16(Image_out1, I_dim, J_dim, "output.pgm") ;
147       
148     }
149   else
150     {
151       if (Verbose)
152         {
153           printf("image couleur (YUV)\n") ;
154           printf("poids contrainte : %.3f\n", poids) ;
155           printf("nombre d'iteration GN : %d\n", nb_iter) ;
156         }
157       tic(&chrono, NULL) ;
158       
159       mv_gaussien_lniv(Image_in1, Image_out1, I_dim, J_dim, poids, nb_iter) ;
160       mv_gaussien_lniv(Image_in2, Image_out2, I_dim, J_dim, poids, nb_iter) ;
161       mv_gaussien_lniv(Image_in3, Image_out3, I_dim, J_dim, poids, nb_iter) ;
162
163       toc(chrono, "temps lniv_image") ;
164       
165       image16(Image_out1, I_dim, J_dim) ;
166       image16(Image_out2, I_dim, J_dim) ;
167       image16(Image_out3, I_dim, J_dim) ;
168       write_intRGB2ppm8(Image_out1, Image_out2, Image_out3, I_dim, J_dim, "output.ppm") ;
169      
170     }
171
172
173   /* Delete */
174   del_matrix_int(Image_in1, I_dim) ;
175   del_matrix_int(Image_out1, I_dim) ;
176   if (Prof == 3)
177     {
178       del_matrix_int(Image_in2, I_dim) ;
179       del_matrix_int(Image_out2, I_dim) ;
180       del_matrix_int(Image_in3, I_dim) ;
181       del_matrix_int(Image_out3, I_dim) ;
182     }
183
184
185   return 1 ;
186 }