Jafar
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
correlation.tcl
00001 package require image
00002 package require model3d
00003 #package require stereo
00004 
00005 
00006 # image left and right must be rectified and reduced 
00007 # this macro doesn't do the rectification step
00008 # it only does the calculation of the correlation 
00009 # and the calculation of the disparity image
00010 # it doesn't do the reconstruction 3D 
00011 #
00012 #    proc do_correlation_only { {image_dir "/home/ayman/sawtooth/"}
00013 #                               {image_name_left  "im0_gray.ras"}
00014 #                               {image_name_right "im2_gray.ras"}
00015 
00016 namespace eval stereo {
00017     proc do_correlation_only { {image_dir "/home/ayman/images/dala/indoor/serie05/"}
00018                                {image_name_left  "image.037.g_rec.jpg"}
00019                                {image_name_right "image.037.d_rec.jpg"}
00020                                {type_correlation 1}
00021                                {type_interpolation 1}
00022                                {window_size 11}
00023                                {i_min 0.0}
00024                                {i_max 1.0}
00025                                {j_min 0.0}
00026                                {j_max 1.0}
00027                                {do_display true}
00028                            } {
00029 
00030         #  type_correlation: 0 = ZNCC
00031         #                    1 = ZNCC_Sigma
00032         #                    2 = Census
00033         #                    3 = Census_sigma 
00034         #
00035         #    i_min, i_max, j_min, j_max : precise the zone of images to be 
00036         #                                 rectified
00037         #                                 (reel value between 0.0 and 1.0)
00038         #                                 i for lines
00039         #                                 j for columns.
00040         #
00041         
00042         
00043         # save old path
00044         set oldPath [pwd]
00045         cd $image_dir
00046         
00047         set file_name_left  "${image_dir}/${image_name_left}"
00048         set file_name_right "${image_dir}/${image_name_right}"
00049         
00050         if { [file exists $file_name_left] } then {
00051             puts "opening file $file_name_left"
00052         } else {
00053             puts "file ${file_name_left} not found"
00054             return
00055         }
00056         if { [file exists $file_name_right]} then {
00057             puts "opening file $file_name_right"
00058         } else {
00059             puts "file ${file_name_right} not found"
00060             return
00061         }
00062         
00063         set source_image_left [image::Image_loadImage \
00064                                    ${file_name_left}]
00065         
00066         set source_image_right [image::Image_loadImage \
00067                                     ${file_name_right}]
00068 
00069         
00070         set disp_min -100;
00071         set disp_max 0;
00072   
00073         # enum CENSUS_TYPE {CENSUS_NIL, 
00074         #               CENSUS_8BITS_SQUARE,
00075         #                   CENSUS_8BITS_DIAMOND,
00076         #                   CENSUS_MEAN_8BITS_SQUARE,
00077         #                   CENSUS_MEAN_8BITS_DIAMOND,
00078         #                   CENSUS_MEAN_MEAN_8BITS_SQUARE,
00079         #                   CENSUS_MEAN_MEAN_8BITS_DIAMOND};
00080         set type_census 4;
00081         
00082         # filter the disparity image with a blob_filter
00083         #        0 : no filter
00084         #        1 : yes do the blob filter
00085         set do_blob_filtre 1;   
00086         
00087         set th_filter_disparity1 500
00088         set th_filter_disparity2 1.0
00089         
00090         set th_sigma  1.0;  # Seuil sur l'cart type des pixels
00091         set th_score  0.5;  # Seuil sur la valeur du score max
00092         set th_delta  0.05; # Seuil sur (score max - 2nd score)
00093         set th_voisins  0.0;  # Seuil sur la forme du pic de corrlation
00094         set espilon_inverse 1;  # Seuil sur la diff entre corrlation
00095         #   directe et inverse
00096         
00097         # affichage de l'image gauche
00098         if { $do_display } {
00099             ::display::show $source_image_left "image source gauche"
00100             #::display::show $source_image_right "image source droite"
00101         }
00102         
00103         
00104         # nblig :  nombre de lignes dans l'image (height)
00105         # nbcol :  nombre de colonnes dans l'image (width)
00106         set nbcol [::image::CvImage_width $source_image_left]
00107         set nblig [::image::CvImage_height $source_image_left]
00108         
00109         
00110         
00111         # Les tailles des images
00112         set images_sizes [::stereo::new_ImagesSizes]
00113         ::stereo::ImagesSizes_initialize $images_sizes \
00114             $nblig $nbcol 1 1  \
00115             $i_min $i_max $j_min $j_max
00116         
00117         ::stereo::ImagesSizes_info $images_sizes
00118         
00119         
00120         set nRectifiedImageWidth \
00121       [::stereo::ImagesSizes_getRectifiedImageWidth $images_sizes]
00122         set nRectifiedImageHeight \
00123             [::stereo::ImagesSizes_getRectifiedImageHeight $images_sizes]
00124   #        set nRectifiedImageWidth  $nbcol
00125   #        set nRectifiedImageHeight $nblig
00126 
00127   set img_depth $::image::IPL_DEPTH_8U
00128   set color_space  $::image::JfrImage_CS_GRAY
00129   set img_depth_2 [image::CvImage_depth $source_image_left]        
00130   puts "img_depth  == $img_depth   img_depth_2  $img_depth_2"
00131   puts "====================================="
00132   puts "width = $nRectifiedImageWidth  height= $nRectifiedImageHeight"
00133   puts "====================================="
00134   puts "====================================="
00135   puts "====================================="
00136 
00137         
00138         # Les paramtres de corrlation
00139         set correlation_params [::stereo::new_CorrelationParams]
00140         ::stereo::CorrelationParams_initialize $correlation_params \
00141             $type_correlation  $type_interpolation  \
00142             $window_size $window_size $disp_min  $disp_max  \
00143             $th_sigma  $th_score  $th_delta  $th_voisins \
00144             $espilon_inverse
00145         
00146                 
00147         ::stereo::CorrelationParams_info $correlation_params
00148 
00149   puts " "
00150         puts "nblig = $nblig" 
00151         set ddd [stereo::ImagesSizes_nb_lig_final_get $images_sizes]
00152         puts "nblig ImagesSizes.nblig_rect $ddd" 
00153         
00154 
00155         
00156         # La structure qui contient les rsultats de la corrlation
00157         set correlation_results [::stereo::new_CorrelationResults]
00158         ::stereo::CorrelationResults_initialize $correlation_results \
00159             $images_sizes  $correlation_params
00160         
00161         ::stereo::CorrelationResults_info $correlation_results
00162         
00163         
00164         # Les images intermdiaires
00165         set images_tmp_g [::stereo::new_ImagesTemporary]
00166         ::stereo::ImagesTemporary_initialize $images_tmp_g $images_sizes
00167         
00168         set images_tmp_d [::stereo::new_ImagesTemporary]
00169         ::stereo::ImagesTemporary_initialize $images_tmp_d $images_sizes
00170         
00171         
00172         
00173         
00174         ##################################################################
00175         # Pre-traitements avant correlation
00176         if { [expr {$type_correlation == 0} || {$type_correlation == 1}] } {
00177             # ZNCC: calcul des moyennes et sigmas
00178             ::stereo::jfrMoyennesSigmas $source_image_left \
00179                 $images_tmp_g $correlation_params
00180             ::stereo::jfrMoyennesSigmas $source_image_right \
00181                 $images_tmp_d $correlation_params
00182 
00183       puts "ImagesTemporary information "
00184       puts "=============================================== "
00185       ::stereo::ImagesTemporary_info $images_tmp_g
00186       ::stereo::ImagesTemporary_info $images_tmp_d
00187       puts "=============================================== "
00188             
00189         } else { #  Census
00190             if {[expr {$type_census == 3} || \
00191                      {$type_census == 4} || \
00192                      {$type_census == 5} || \
00193                      {$type_census == 6}]} {
00194                 # Il faut calculer l'images des moyennes
00195                 ::stereo::jfrMoyennes $source_image_left 3 3 $images_tmp_g
00196                 ::stereo::jfrMoyennes $source_image_right 3 3 $images_tmp_d
00197             }
00198             
00199             
00200             
00201             # Creation des images de Census
00202             set im_census_gauche [::image::new_Image \
00203                                       $nRectifiedImageWidth \
00204                                       $nRectifiedImageHeight\
00205                                       $img_depth \
00206                                       $color_space]
00207             
00208             set im_census_droite [::image::new_Image \
00209                                       $nRectifiedImageWidth \
00210                                       $nRectifiedImageHeight\
00211                                       $img_depth \
00212                                       $color_space]
00213             
00214             ::stereo::jfrTransform_census_8bits  \
00215                 $source_image_left $images_tmp_g \
00216                 $type_census $im_census_gauche
00217             
00218             ::stereo::jfrTransform_census_8bits  \
00219                 $source_image_right $images_tmp_d \
00220                 $type_census  $im_census_droite
00221 
00222       display::show $im_census_gauche "census gauche"
00223 
00224         }
00225   
00226   
00227   
00228   
00229         ###################################################################
00230         # Corrlation
00231         
00232         if {[expr {$type_correlation == 0} || {$type_correlation == 1}]} {
00233             # ZNCC
00234             ::stereo::jfrCorrelationZncc \
00235                 $source_image_left $source_image_right \
00236                 $images_tmp_g $images_tmp_d \
00237                 $correlation_params $correlation_results
00238         } else {
00239             # Census
00240             ::stereo::jfrCorrelationCensus \
00241                 $im_census_gauche $im_census_droite \
00242                 $images_sizes $correlation_params $correlation_results
00243         }
00244         
00245         
00246         # Affichage des disparits non filtres
00247         set im_disparity \
00248             [::stereo::CorrelationResults_getImageForDisparity \
00249                  $correlation_results]
00250         
00251         if { $do_display } {
00252             ::display::show $im_disparity "image of non filtered disparity "
00253         }
00254         
00255         ###################################################################
00256         # Filtrage
00257         if {$do_blob_filtre != 0} {
00258             ::stereo::jfrBlobFilterDisparites $correlation_results \
00259                 $th_filter_disparity1 $th_filter_disparity2
00260         }
00261         
00262         ####  "Disparites filtrees"
00263         # Affichage des disparits filtres
00264         set im_disparity_fltr \
00265             [::stereo::CorrelationResults_getImageForDisparity \
00266                  $correlation_results]
00267         
00268         if { $do_display } {
00269             ::display::show $im_disparity_fltr "image of filtered disparity "
00270         }
00271         
00272         # Affichage ventuel des pixels corrls
00273         set im_correlated_pixels \
00274             [::stereo::CorrelationResults_getImageOfCorrelatedPixels \
00275                  $correlation_results $source_image_left]
00276         if { $do_display } {
00277             ::display::show $im_correlated_pixels "image of correlated pixels"
00278         }
00279         
00280         # display of regions
00281         set im_regions \
00282             [::stereo::CorrelationResults_getImageForRegions \
00283                  $correlation_results]
00284         if { $do_display } {
00285             # ::display::show $im_regions "image of regions"
00286         }
00287         
00288         
00289         # clean intermediaire variables
00290         ::stereo::delete_ImagesSizes $images_sizes
00291         ::stereo::delete_CorrelationParams $correlation_params
00292         ::stereo::delete_CorrelationResults $correlation_results
00293         ::stereo::delete_ImagesTemporary $images_tmp_g
00294         ::stereo::delete_ImagesTemporary $images_tmp_d
00295         
00296         ::image::delete_Image $im_correlated_pixels
00297         ::image::delete_Image $im_disparity
00298         
00299         ::image::delete_Image $source_image_left
00300         ::image::delete_Image $source_image_right
00301         
00302         # Restauration des chemins d'accs aux donnes image et vecteurs 
00303         cd $oldPath
00304         
00305     }
00306 }
00307 
00308 package provide stereo 0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on Wed Oct 15 2014 00:37:28 for Jafar by doxygen 1.7.6.1
LAAS-CNRS