00001 #include <Segmentation.h>
00002 #include <SegmentationModule/RegularizationModule.h>
00003 #include <SegmentationModule/LocalGaussianRegionModule.h>
00004 #include <SegmentationModule/GaussianRegionModule.h>
00005
00006 #include <SegmentationModule/SoftShapeModule.h>
00007 #include <SegmentationModule/BalloonModule.h>
00008
00009 #include <cmath>
00010 #include <dirent.h>
00011 #include <DericheFilter.h>
00012
00013
00014
00015 template <class _Modules, class _LevelSet, class _Index>
00016 float meancurv_depending_on_localstats(_Modules & modules, const _LevelSet & phi, const _Index & ind, int& indice)
00017 {
00018 float value_regul = modules[0]->value(phi, ind);
00019 float weight_regul = modules[0]->weight(ind);
00020
00021 float value = modules[1]->value(phi, ind);
00022 float weight = modules[1]->weight(ind);
00023
00024 float result;
00025 if (fabs(value) < 0.05) result = value_regul*weight_regul*3 + value*weight;
00026 else result = value_regul*weight_regul + value*weight;
00027
00028 indice = 1;
00029 return result;
00030 }
00031
00034 int main(int argc, char* argv[])
00035 {
00036 using namespace Images;
00037 using namespace levelset;
00038 using namespace segmentation;
00039
00040 #if 1 // 2D
00041
00042 BaseImage<2, float> image;
00043
00044 std::ifstream f("image/last.inr");
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 f >> format("inrimage") >> image;
00060
00061 Globals::normalize(image, 0.0f, 250.0f);
00062
00063
00064 FastMarchingInitializer<2,float> init;
00065 LevelSet<2,float> phi(image.shape(), (double) 2.0);
00066 Segmentation<2,float> segm(&phi, &init, &image);
00067 Segmentation<2,float> segm_global(&phi, &init, &image);
00068
00069
00070
00071
00072 phi.init_small_spheres(10, 30,init);
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 RegularizationModule<2,float> regul(0.8f);
00087 LocalGaussianRegionModule<2,float,float> local_gaussian( &image, 1.f, 2);
00088 GaussianRegionModule<2,float,float> gaussian( &image, 1.f);
00089
00090
00091 gaussian.use_variance(true);
00092
00093 segm.add_module(regul);
00094
00095
00096 segm_global.add_module(regul);
00097 segm_global.add_module(gaussian);
00098
00099
00100
00101
00102
00103
00104 Segmentation<2,float>::RGBPixel neg(215,152,0);
00105 Segmentation<2,float>::RGBPixel pos(255,252,0);
00106
00107 timeval _time;
00108 Globals::initChrono(_time);
00109 std::ostringstream name;
00110
00111 name.str("");
00112 name << "mkdir CVPR/";
00113 system (name.str().c_str());
00114
00115 #if 1
00116
00117 name.str("");
00118 name << "mkdir CVPR/solution_coherence";
00119 system (name.str().c_str());
00120
00121 for(int sigma = 2 ; sigma <= 64 ; sigma*=2 ){
00122 sigma = 16;
00123
00124 name.str("");
00125 name << "mkdir CVPR/solution_coherence/" << sigma << "/";
00126 system (name.str().c_str());
00127 name.str("");
00128 name << "CVPR/solution_coherence/" << sigma << "/";
00129 phi = 0;
00130
00131 phi.init_small_spheres(10, 30,init);
00132 LocalGaussianRegionModule<2,float,float> local_gaussian( &image, 0.4f , sigma, false);
00133 segm.add_module(local_gaussian);
00134 segm.segment(300, name.str().c_str() , neg, pos);
00135 segm.remove_module(local_gaussian);
00136 name.str("");
00137 name << "convert_cimg.sh png CVPR/solution_coherence/" << sigma << "/var/*ppm";
00138 system (name.str().c_str());
00139
00140 return 0;
00141 }
00142
00143 name.str("");
00144 name << "mkdir CVPR/drawback_16/global/";
00145 system (name.str().c_str());
00146 name.str("");
00147 name << "CVPR/drawback_16/global/";
00148 phi = 0;
00149
00150 GaussianRegionModule<2,float,float> gaussian1( &image, 2.f, true);
00151 segm.add_module(gaussian1);
00152 segm.segment(8000, name.str().c_str() , neg, pos);
00153 segm.remove_module(gaussian1);
00154 name.str("");
00155 name << "convert_cimg.sh png CVPR/drawback_16/global/var/*ppm";
00156 system (name.str().c_str());
00157 #endif
00158
00159 #if 0 // 2eme image
00160
00161 BaseImage<2, float> image2;
00162 std::ifstream f2("image/blur_gaussian.inr");
00163 f2 >> format("inrimage") >> image2;
00164 Globals::normalize(image2, 0.0f, 250.0f);
00165 segm.set_data_term(image2);
00166
00167 name.str("");
00168 name << "mkdir CVPR/blur_gaussian";
00169 system (name.str().c_str());
00170
00171 for(int sigma = 2 ; sigma <= 64 ; sigma*=2 ){
00172
00173 name.str("");
00174 name << "mkdir CVPR/blur_gaussian/" << sigma << "/";
00175 system (name.str().c_str());
00176 name.str("");
00177 name << "CVPR/blur_gaussian/" << sigma << "/";
00178 phi = 0;
00179 phi.init_rectangle(tl, br, init);phi.init_rectangle(tl2, br2, init);
00180 LocalGaussianRegionModule<2,float,float> local_gaussian( &image2, 1.f, sigma, false);
00181 segm.add_module(local_gaussian);
00182 segm.segment(8000, name.str().c_str() , neg, pos);
00183 segm.remove_module(local_gaussian);
00184 name.str("");
00185 name << "convert_cimg.sh png CVPR/blur_gaussian/" << sigma << "/var/*ppm";
00186 system (name.str().c_str());
00187
00188 }
00189 {
00190 name.str("");
00191 name << "mkdir CVPR/blur_gaussian/global/";
00192 system (name.str().c_str());
00193 name.str("");
00194 name << "CVPR/blur_gaussian/global/";
00195 phi = 0;
00196 phi.init_rectangle(tl, br, init);phi.init_rectangle(tl2, br2, init);
00197 GaussianRegionModule<2,float,float> gaussian1( &image2, 2.f, true);
00198 segm.add_module(gaussian1);
00199 segm.segment(8000, name.str().c_str() , neg, pos);
00200 segm.remove_module(gaussian1);
00201 name.str("");
00202 name << "convert_cimg.sh png CVPR/blur_gaussian/global/var/*ppm";
00203 system (name.str().c_str());
00204 }
00205 #endif
00206
00207 #if 0 // 3eme image
00208
00209 BaseImage<2, float> image3;
00210 std::ifstream f3("image/mix_gaussian.inr");
00211 f3 >> format("inrimage") >> image3;
00212 Globals::normalize(image3, 0.0f, 250.0f);
00213 segm.set_data_term(image3);
00214
00215 name.str("");
00216 name << "mkdir CVPR/mix_gaussian";
00217 system (name.str().c_str());
00218
00219 for(int sigma = 2 ; sigma <= 64 ; sigma*=2 ){
00220
00221 name.str("");
00222 name << "mkdir CVPR/mix_gaussian/" << sigma << "/";
00223 system (name.str().c_str());
00224 name.str("");
00225 name << "CVPR/mix_gaussian/" << sigma << "/";
00226 phi = 0;
00227 phi.init_rectangle(tl, br, init);phi.init_rectangle(tl2, br2, init);
00228 LocalGaussianRegionModule<2,float,float> local_gaussian( &image3, 1.f, sigma, false);
00229 segm.add_module(local_gaussian);
00230 segm.segment(8000, name.str().c_str() , neg, pos);
00231 segm.remove_module(local_gaussian);
00232 name.str("");
00233 name << "convert_cimg.sh png CVPR/mix_gaussian/" << sigma << "/var/*ppm";
00234 system (name.str().c_str());
00235 }
00236 {
00237 name.str("");
00238 name << "mkdir CVPR/mix_gaussian/global/";
00239 system (name.str().c_str());
00240 name.str("");
00241 name << "CVPR/mix_gaussian/global/";
00242 phi = 0;
00243 phi.init_rectangle(tl, br, init);phi.init_rectangle(tl2, br2, init);
00244 GaussianRegionModule<2,float,float> gaussian1( &image3, 1.f, true);
00245 segm.add_module(gaussian1);
00246 segm.segment(8000, name.str().c_str() , neg, pos);
00247 segm.remove_module(gaussian1);
00248 name.str("");
00249 name << "convert_cimg.sh png CVPR/mix_gaussian/global/var/*ppm";
00250 system (name.str().c_str());
00251 }
00252 #endif
00253
00254
00255 Globals::printChrono("\n => LocalStats : ", _time);
00256 Globals::initChrono(_time);
00257
00258 #if 0 // + tests sigmas successifs init small sphere
00259
00260 phi.init_small_spheres(10, 25);
00261 local_gaussian.set_sigma(5);
00262 segm.segment(500, "result_synth_variant_blur/noise_var/var/5/localstats_", neg, pos);
00263 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/var/5/localstats_*ppm");
00264
00265 phi.init_small_spheres(10, 25);
00266 local_gaussian.set_sigma(10);
00267 segm.segment(500, "result_synth_variant_blur/noise_var/var/10/localstats_", neg, pos);
00268 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/var/10/localstats_*ppm");
00269
00270 phi.init_small_spheres(10, 25);
00271 local_gaussian.set_sigma(20);
00272 segm.segment(500, "result_synth_variant_blur/noise_var/var/20/localstats_", neg, pos);
00273 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/var/20/localstats_*ppm");
00274
00275 phi.init_small_spheres(10, 25);
00276 local_gaussian.set_sigma(40);
00277 segm.segment(500, "result_synth_variant_blur/noise_var/var/40/localstats_", neg, pos);
00278 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/var/40/localstats_*ppm");
00279
00280 phi.init_small_spheres(10, 25);
00281 local_gaussian.set_sigma(80);
00282 segm.segment(500, "result_synth_variant_blur/noise_var/var/80/localstats_", neg, pos);
00283 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/var/80/localstats_*ppm");
00284
00285 phi.init_small_spheres(10, 25);
00286 segm_global.segment(500, "result_synth_variant_blur/noise_var/var/global/localstats_", neg, pos);
00287 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/var/global/localstats_*ppm");
00288
00289 #endif
00290
00291 #if 0 // + tests sigmas successifs init sphere
00292
00293 LevelSet<2,float>::Index c(100, 100);
00294
00295 phi.init_sphere(c, 90);
00296 local_gaussian.set_sigma(5);
00297 segm.segment(500, "test_variant_contour/var05_", neg, pos);
00298 system("./convert_cimg.sh png test_variant_contour/var05_*ppm");
00299
00300 phi.init_sphere(c, 90);
00301 local_gaussian.set_sigma(10);
00302 segm.segment(500, "test_variant_contour/var10_", neg, pos);
00303 system("./convert_cimg.sh png test_variant_contour/var10_*ppm");
00304
00305 phi.init_sphere(c, 90);
00306 local_gaussian.set_sigma(20);
00307 segm.segment(500, "test_variant_contour/var20_", neg, pos);
00308 system("./convert_cimg.sh png test_variant_contour/var20_*ppm");
00309
00310 phi.init_sphere(c, 90);
00311 local_gaussian.set_sigma(40);
00312 segm.segment(500, "test_variant_contour/var40_", neg, pos);
00313 system("./convert_cimg.sh png test_variant_contour/var40_*ppm");
00314
00315 phi.init_sphere(c, 90);
00316 local_gaussian.set_sigma(80);
00317 segm.segment(500, "test_variant_contour/var80_", neg, pos);
00318 system("./convert_cimg.sh png test_variant_contour/var80_*ppm");
00319
00320 phi.init_sphere(c, 90);
00321 segm_global.segment(500, "test_variant_contour/global_", neg, pos);
00322 system("./convert_cimg.sh png test_variant_contour/global_*ppm");
00323
00324 #endif
00325
00326 #if 0 // second test autre image 2D
00327
00328 BaseImage<2, float> image2;
00329 std::ifstream f2("image/head4.inr");
00330 f2 >> format("inrimage") >> image2;
00331
00332 phi.resize(image2.shape());
00333 segm.set_data_term(image2);
00334 segm_global.set_data_term(image2);
00335 local_gaussian.set_data_term(image2);
00336 gaussian.set_data_term(image2);
00337
00338 local_gaussian.use_variance(false);
00339 gaussian.use_variance(false);
00340
00341 phi.init_small_spheres(10, 25);
00342 local_gaussian.set_sigma(2);
00343 segm_global.segment(2000, "result_synth_variant_blur/noise_var/no_var/2/localstats_", neg, pos);
00344 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/no_var/2/localstats_*ppm");
00345
00346 phi.init_small_spheres(10, 25);
00347 local_gaussian.set_sigma(5);
00348 segm.segment(2000, "result_synth_variant_blur/noise_var/no_var/5/localstats_", neg, pos);
00349 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/no_var/5/localstats_*ppm");
00350
00351 phi.init_small_spheres(10, 25);
00352 local_gaussian.set_sigma(10);
00353 segm.segment(2000, "result_synth_variant_blur/noise_var/no_var/10/localstats_", neg, pos);
00354 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/no_var/10/localstats_*ppm");
00355
00356 phi.init_small_spheres(10, 25);
00357 local_gaussian.set_sigma(20);
00358 segm.segment(2000, "result_synth_variant_blur/noise_var/no_var/20/localstats_", neg, pos);
00359 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/no_var/20/localstats_*ppm");
00360
00361 phi.init_small_spheres(10, 25);
00362 local_gaussian.set_sigma(40);
00363 segm.segment(2000, "result_synth_variant_blur/noise_var/no_var/40/localstats_", neg, pos);
00364 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/no_var/40/localstats_*ppm");
00365
00366 phi.init_small_spheres(10, 25);
00367 local_gaussian.set_sigma(80);
00368 segm.segment(2000, "result_synth_variant_blur/noise_var/no_var/80/localstats_", neg, pos);
00369 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/no_var/80/localstats_*ppm");
00370
00371 phi.init_small_spheres(10, 25);
00372 segm_global.segment(2000, "result_synth_variant_blur/noise_var/no_var/global/localstats_", neg, pos);
00373 system("./convert_cimg.sh png result_synth_variant_blur/noise_var/no_var/global/localstats_*ppm");
00374
00375 #endif
00376 std::cout << "OK" << std::endl;
00377 #endif
00378
00379 #if 0 // 3D
00380
00381
00382
00383
00384 BaseImage<3, unsigned short> image;
00385
00386
00387
00388 std::ifstream f("image/mt_diff_7_marche.inr");
00389
00390 f >> format("inrimage") >> image;
00391
00392 std::cout << image.shape() << std::endl;
00393
00394
00395 FastMarchingInitializer<3, float> init;
00396 LevelSet<3,float> phi(image.shape(), (double) 2.0);
00397 Segmentation<3, unsigned short> segm(&phi, &init, &image);
00398
00399
00400 phi.init_small_spheres(10, 25);
00401
00402 RegularizationModule<3,float> regul(0.75f);
00403 LocalGaussianRegionModule<3,float, float> local_gaussian( &image, 0.75f, 2);
00404 SoftShapeModule<3,float> soft_shape(0.75f);
00405 BalloonModule<3,float> balloon(0.5f);
00406
00407 local_gaussian.use_variance(false);
00408
00409
00410 segm.add_module(regul);
00411 segm.add_module(local_gaussian);
00412 segm.add_module(balloon);
00413
00414
00415 Segmentation<3,float>::RGBPixel neg(215,152,0);
00416 Segmentation<3,float>::RGBPixel pos(255,252,0);
00417
00418 timeval _time;
00419 Globals::initChrono(_time);
00420
00421 segm.segment(1000, "result_3D/full_head_2/localstats_", neg, pos);
00422
00423
00424 Globals::printChrono("\n => LocalStats : ", _time);
00425 Globals::initChrono(_time);
00426
00427
00428
00429 #if 0 // test autre image variant sccessifs
00430
00431 BaseImage<3, unsigned char> image2;
00432 std::ifstream f2("image/T1_512_msp.inr");
00433 f2 >> format("inrimage") >> image2;
00434 phi.resize(image2.shape());
00435 segm.set_data_term(image2);
00436 local_gaussian.set_data_term(image2);
00437 phi.init_small_spheres(10, 30);
00438 segm.segment(1000, "result_good_init/T1_512_msp_10/localstats_", neg, pos);
00439 system("./convert_cimg.sh vti result_good_init/lT1_512_msp_10/localstats_phi*");
00440
00441 phi.init_small_spheres(10, 25);
00442 local_gaussian.set_sigma(20);
00443 segm.segment(1000, "result_good_init/localstats_20/localstats_", neg, pos);
00444 system("./convert_cimg.sh png result_good_init/localstats_20/localstats_*ppm");
00445
00446 phi.init_small_spheres(10, 25);
00447 local_gaussian.set_sigma(40);
00448 segm.segment(1000, "result_good_init/localstats_40/localstats_", neg, pos);
00449 system("./convert_cimg.sh png result_good_init/localstats_40/localstats_*ppm");
00450
00451 phi.init_small_spheres(10, 25);
00452 local_gaussian.set_sigma(80);
00453 segm.segment(1000, "result_good_init/localstats_80/localstats_", neg, pos);
00454 system("./convert_cimg.sh png result_good_init/localstats_80/localstats_*ppm");
00455 #endif
00456 std::cout << "OK" << std::endl;
00457 #endif
00458 }