From 55dee9d1e793d84b1408aceb60e267cc501a2319 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?llu=C3=ADs=20g=C3=B3mez=20i=20bigord=C3=A0?= Date: Mon, 21 Feb 2011 22:56:18 +0000 Subject: object simplification. cvCreateFGDStatModel default params are more accurate and make segmentation easy to undestand svn path=/trunk/externals/pix_opencv/; revision=14940 --- pix_opencv_bgstats-help.pd | 120 +++++++++++++++++++-------------------------- pix_opencv_bgstats.cc | 57 ++++----------------- 2 files changed, 60 insertions(+), 117 deletions(-) diff --git a/pix_opencv_bgstats-help.pd b/pix_opencv_bgstats-help.pd index 71d549b..16a5ca9 100644 --- a/pix_opencv_bgstats-help.pd +++ b/pix_opencv_bgstats-help.pd @@ -1,7 +1,7 @@ -#N canvas 84 123 1069 675 10; +#N canvas 286 25 997 639 10; #X obj 365 487 pix_texture; #X obj 365 515 square 2; -#X obj 716 155 cnv 15 220 70 empty empty empty 20 12 0 14 -195568 -66577 +#X obj 28 -124 cnv 15 220 70 empty empty empty 20 12 0 14 -195568 -66577 0; #N canvas 0 22 454 304 gemwin 0; #X obj 67 89 outlet; @@ -33,39 +33,16 @@ #X connect 9 0 6 0; #X connect 10 0 7 0; #X connect 10 2 9 0; -#X restore 728 201 pd gemwin; -#X msg 728 177 destroy; -#X text 724 157 Create window and render; +#X restore 40 -78 pd gemwin; +#X msg 40 -102 destroy; +#X text 36 -122 Create window and render; #X obj 213 486 pix_texture; #X obj 213 514 square 2; #X obj 346 281 cnv 15 550 200 empty empty empty 20 12 0 14 -24198 -66577 0; -#X obj 363 452 pix_opencv_bgstats; -#X obj 467 300 / 100; -#X floatatom 508 302 5 0 0 0 - - -; -#X floatatom 472 336 5 0 0 0 - - -; -#X msg 411 335 erode \$1; -#X floatatom 495 373 5 0 0 0 - - -; -#X msg 425 371 minarea \$1; -#X text 539 378 ( default : 10x10 ); -#X msg 447 405 reset; -#X text 549 294 amount of time after which an object is deleted from -the foreground ( default : 0.1 seconds ); -#X text 511 327 number of iterations of the erode-dilate filter; -#X text 512 337 to eliminate small forms and noise; -#X text 542 367 minimum size of foreground objects; -#X text 491 406 resetting the background; -#X text 512 348 ( default : 2 ); -#X text 26 69 Comments and support @ ydegoyon.gmail.com; -#X text 25 -20 Objects disappear from the background after a certain -amount of time of presence ( alpha ) \, they are then considered as -background.; -#X text 27 20 This object does noise filtering using erosion and dilation -steps ( erode paramater ). It also eliminates from the foreground object -that are less than a minumum size ( minarea parameter ).; +#X obj 361 388 pix_opencv_bgstats; #X text 27 -47 pix_opencv_bgstats : background and foreground extraction using a statitical method.; -#X msg 406 300 alpha \$1; #X obj 677 -113 gemhead; #X obj 361 212 separator; #X obj 689 -86 bng 25 250 50 0 load empty empty 0 -6 0 8 -262144 -1 @@ -77,7 +54,7 @@ using a statitical method.; #X msg 689 -37 open \$1; #X obj 677 72 pix_film; #X msg 695 6 auto \$1; -#X obj 695 -12 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +#X obj 695 -12 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X msg 790 -11 colorspace RGBA; #X msg 895 -11 colorspace RGB; @@ -125,48 +102,53 @@ using a statitical method.; #X msg 488 26 driver 1; #X msg 465 -59 dialog; #X msg 470 -29 device /dev/dv1394-0; +#X obj 335 101 pix_resize 160 120; +#X text 28 -10 Objects disappear from the background after a certain +amount of time of presence \, they are then considered as background. +; +#X text 29 19; +#X text 28 55 Comments and support @ ydegoyon.gmail.com; +#X msg 704 546 set; +#X text 740 546 set the background; +#X msg 714 556 set; +#X text 750 556 set the background; +#X msg 415 339 reset; +#X text 455 341 reset the background; #X connect 0 0 1 0; #X connect 3 0 4 0; #X connect 4 0 3 0; #X connect 6 0 7 0; #X connect 9 0 0 0; -#X connect 10 0 28 0; -#X connect 11 0 10 0; -#X connect 11 0 10 1; -#X connect 12 0 13 0; -#X connect 13 0 9 0; +#X connect 11 0 18 0; +#X connect 12 0 29 0; +#X connect 13 0 16 0; #X connect 14 0 15 0; -#X connect 15 0 9 0; -#X connect 17 0 9 0; -#X connect 28 0 9 0; -#X connect 29 0 36 0; -#X connect 30 0 47 0; -#X connect 31 0 34 0; -#X connect 32 0 33 0; -#X connect 33 0 36 1; -#X connect 34 0 35 0; -#X connect 35 0 36 0; -#X connect 36 0 48 1; -#X connect 36 2 32 0; -#X connect 37 0 36 0; -#X connect 38 0 37 0; -#X connect 39 0 36 0; -#X connect 39 0 50 0; -#X connect 40 0 36 0; -#X connect 41 0 36 0; -#X connect 42 0 39 0; -#X connect 42 0 38 0; -#X connect 43 0 30 0; -#X connect 44 0 46 0; -#X connect 45 0 44 0; -#X connect 46 0 6 0; -#X connect 47 0 9 0; -#X connect 48 0 43 0; -#X connect 48 0 45 0; -#X connect 49 0 48 2; -#X connect 50 0 48 0; -#X connect 51 0 50 0; -#X connect 52 0 50 0; -#X connect 53 0 50 0; -#X connect 54 0 50 0; -#X connect 55 0 50 0; +#X connect 15 0 18 1; +#X connect 16 0 17 0; +#X connect 17 0 18 0; +#X connect 18 0 30 1; +#X connect 18 2 14 0; +#X connect 19 0 18 0; +#X connect 20 0 19 0; +#X connect 21 0 18 0; +#X connect 21 0 32 0; +#X connect 22 0 18 0; +#X connect 23 0 18 0; +#X connect 24 0 21 0; +#X connect 24 0 20 0; +#X connect 25 0 12 0; +#X connect 26 0 28 0; +#X connect 27 0 26 0; +#X connect 28 0 6 0; +#X connect 29 0 9 0; +#X connect 30 0 25 0; +#X connect 30 0 27 0; +#X connect 31 0 30 2; +#X connect 32 0 38 0; +#X connect 33 0 32 0; +#X connect 34 0 32 0; +#X connect 35 0 32 0; +#X connect 36 0 32 0; +#X connect 37 0 32 0; +#X connect 38 0 30 0; +#X connect 46 0 9 0; diff --git a/pix_opencv_bgstats.cc b/pix_opencv_bgstats.cc index 155ca8e..c1fe298 100644 --- a/pix_opencv_bgstats.cc +++ b/pix_opencv_bgstats.cc @@ -32,9 +32,9 @@ pix_opencv_bgstats :: pix_opencv_bgstats() comp_xsize=320; comp_ysize=240; - x_erode = 2; - x_minarea = 10*10; - x_alpha = 0.1; // 0.1 seconds + x_erode = 1; + x_minarea = CV_BGFG_FGD_MINAREA; + x_alpha = CV_BGFG_FGD_ALPHA_1; x_frames = 0; foreground = cvCreateImage(cvSize(comp_xsize,comp_ysize), IPL_DEPTH_8U, 3); @@ -97,27 +97,13 @@ void pix_opencv_bgstats :: processRGBAImage(imageStruct &image) if ( x_model == NULL ) { - x_modelparams.Lc = CV_BGFG_FGD_LC; - x_modelparams.N1c = CV_BGFG_FGD_N1C; - x_modelparams.N2c = CV_BGFG_FGD_N2C; - x_modelparams.Lcc = CV_BGFG_FGD_LCC; - x_modelparams.N1cc = CV_BGFG_FGD_N1CC; - x_modelparams.N2cc = CV_BGFG_FGD_N2CC; - x_modelparams.is_obj_without_holes = 1; - x_modelparams.alpha2 = CV_BGFG_FGD_ALPHA_2; - x_modelparams.alpha3 = CV_BGFG_FGD_ALPHA_3; - x_modelparams.T = CV_BGFG_FGD_T; - x_modelparams.perform_morphing = x_erode; - x_modelparams.minArea = x_minarea; - x_modelparams.alpha1 = x_alpha; - x_modelparams.delta = CV_BGFG_FGD_DELTA; - x_model = cvCreateFGDStatModel( incoming, &x_modelparams ); + x_model = cvCreateFGDStatModel( incoming ); } else if ( x_frames == 5 ) { // strange model stabilize after a few frames - cvReleaseBGStatModel( &x_model ); - x_model = cvCreateFGDStatModel( incoming, &x_modelparams ); + //cvReleaseBGStatModel( &x_model ); + //x_model = cvCreateFGDStatModel( incoming, &x_modelparams ); } else { @@ -162,27 +148,13 @@ void pix_opencv_bgstats :: processRGBImage(imageStruct &image) if ( x_model == NULL ) { - x_modelparams.Lc = CV_BGFG_FGD_LC; - x_modelparams.N1c = CV_BGFG_FGD_N1C; - x_modelparams.N2c = CV_BGFG_FGD_N2C; - x_modelparams.Lcc = CV_BGFG_FGD_LCC; - x_modelparams.N1cc = CV_BGFG_FGD_N1CC; - x_modelparams.N2cc = CV_BGFG_FGD_N2CC; - x_modelparams.is_obj_without_holes = 1; - x_modelparams.alpha2 = CV_BGFG_FGD_ALPHA_2; - x_modelparams.alpha3 = CV_BGFG_FGD_ALPHA_3; - x_modelparams.T = CV_BGFG_FGD_T; - x_modelparams.perform_morphing = x_erode; - x_modelparams.minArea = x_minarea; - x_modelparams.alpha1 = x_alpha; - x_modelparams.delta = CV_BGFG_FGD_DELTA; - x_model = cvCreateFGDStatModel( incoming, &x_modelparams ); + x_model = cvCreateFGDStatModel( incoming ); } else if ( x_frames == 5 ) { // strange model stabilize after a few frames - cvReleaseBGStatModel( &x_model ); - x_model = cvCreateFGDStatModel( incoming, &x_modelparams ); + //cvReleaseBGStatModel( &x_model ); + //x_model = cvCreateFGDStatModel( incoming, &x_modelparams ); } else { @@ -215,9 +187,6 @@ void pix_opencv_bgstats :: floatMinAreaMess (float minarea) if ( ( (int)minarea>0 ) && ( x_model != NULL ) ) { x_minarea = minarea; - x_modelparams.minArea = minarea; - cvReleaseBGStatModel( &x_model ); - x_model = cvCreateFGDStatModel( incoming, &x_modelparams ); } } @@ -226,9 +195,6 @@ void pix_opencv_bgstats :: floatErodeMess(float erode) if ( ( (int)erode>0 ) && ( x_model != NULL ) ) { x_erode = (int)erode; - x_modelparams.perform_morphing = (int)erode; - cvReleaseBGStatModel( &x_model ); - x_model = cvCreateFGDStatModel( incoming, &x_modelparams ); } } @@ -237,9 +203,6 @@ void pix_opencv_bgstats :: floatAlphaMess(float alpha) if ( ( alpha>0.0 ) && ( x_model != NULL ) ) { x_alpha = alpha; - x_modelparams.alpha1 = alpha; - cvReleaseBGStatModel( &x_model ); - x_model = cvCreateFGDStatModel( incoming, &x_modelparams ); } } @@ -247,8 +210,6 @@ void pix_opencv_bgstats :: resetMess () { if ( x_model != NULL ) { - cvReleaseBGStatModel( &x_model ); - x_model = cvCreateFGDStatModel( incoming, &x_modelparams ); } } -- cgit v1.2.1