skin_color_util.h
Go to the documentation of this file.
00001 
00002 using namespace std;
00003 
00004 double mean_skin[16][3] =
00005 {
00006     {73.53, 29.94, 17.76   }, 
00007     {249.71, 233.94, 217.49}, 
00008     {161.68, 116.25, 96.95 }, 
00009     {186.07, 136.62, 114.40}, 
00010     {189.26, 98.37, 51.18  }, 
00011     {247.00, 152.20, 90.84 }, 
00012     {150.10, 72.66, 37.76  }, 
00013     {206.85, 171.09, 156.34}, 
00014     {212.78, 152.82, 120.04}, 
00015     {234.87, 175.43, 138.94}, 
00016     {151.19, 97.74, 74.59  }, 
00017     {120.52, 77.55, 59.82  }, 
00018     {192.20, 119.62, 82.32 }, 
00019     {214.29, 136.08, 87.24 }, 
00020     {99.57, 54.33, 38.06   }, 
00021     {238.88, 203.08, 176.91}
00022 };
00023     
00024 double mean_nskin[16][3] =
00025 {
00026     {254.37, 254.41, 253.82}, 
00027     {9.39, 8.09, 8.52      }, 
00028     {96.57, 96.95, 91.53   }, 
00029     {160.44, 162.49, 159.06}, 
00030     {74.98, 63.23, 46.33   }, 
00031     {121.83, 60.88, 18.31  }, 
00032     {202.18, 154.88, 91.04 }, 
00033     {193.06, 201.93, 206.55}, 
00034     {51.88, 57.14, 61.55   }, 
00035     {30.88, 26.84, 25.32   }, 
00036     {44.97, 85.96, 131.95  }, 
00037     {236.02, 236.27, 230.70}, 
00038     {207.86, 191.20, 164.12}, 
00039     {99.83, 148.11, 188.17 }, 
00040     {135.06, 131.92, 123.10}, 
00041     {135.96, 103.89, 66.88 }
00042 };
00043 
00044 double covar_skin[16][3] = 
00045 {
00046 {   765.40, 121.44, 112.80},    
00047 {      39.94, 154.44, 396.05},  
00048 {     291.03, 60.48, 162.85},   
00049 {      274.95, 64.60, 198.27},  
00050 {    633.18, 222.40, 250.69},   
00051 {     65.23, 691.53, 609.92},   
00052 {    408.63, 200.77, 257.57},   
00053 {      530.08, 155.08, 572.79}, 
00054 {      160.57, 84.52, 243.90},  
00055 {      163.80, 121.57, 279.22}, 
00056 {    425.40, 73.56, 175.11},    
00057 {    330.45, 70.34, 151.82},    
00058 {     152.76, 92.14, 259.15},   
00059 {     204.90, 140.17, 270.19},  
00060 {   448.13, 90.18, 151.29},     
00061 {      178.38, 156.27, 404.99}
00062 };
00063 
00064 double covar_nskin[16][3] = 
00065 {
00066 {      2.77, 2.81, 5.46},       
00067 {46.84, 33.59, 32.48},          
00068 {   280.69, 156.79, 436.58},    
00069 {      355.98, 115.89, 591.24}, 
00070 {   414.84, 245.95, 361.27},    
00071 {    2502.24, 1383.53, 237.18}, 
00072 {     957.42, 1766.94, 1582.52},
00073 {      562.88, 190.23, 447.28}, 
00074 {   344.11, 191.77, 433.40},    
00075 {   222.07, 118.65, 182.41},    
00076 {    651.32, 840.52, 963.67},   
00077 {      225.03, 117.29, 331.95}, 
00078 {      494.04, 237.69, 533.52}, 
00079 {     955.88, 654.95, 916.70},  
00080 {      350.35, 130.30, 388.43}, 
00081 {     806.44, 642.20, 350.36}
00082 };
00083 
00084 double weights_skin[16] =
00085 {
00086         0.0294,
00087           0.0331,
00088          0.0654,
00089           0.0756,
00090          0.0554,
00091          0.0314,
00092          0.0454,
00093            0.0469,
00094           0.0956,
00095            0.0763,
00096         0.1100,
00097         0.0676,
00098          0.0755,
00099           0.0500,
00100        0.0667,
00101            0.0749
00102 };
00103        
00104 double weights_nskin[16] =
00105 {
00106      0.0637,
00107   0.0516,
00108         0.0864,
00109            0.0636,
00110         0.0747,
00111            0.0365,
00112             0.0349,
00113            0.0649,
00114         0.0656,
00115         0.1189,
00116          0.0362,
00117            0.0849,
00118            0.0368,
00119           0.0389,
00120            0.0943,
00121           0.0477
00122 };
00123 
00124 double gaussian_mix_skin(int r, int g, int b)
00125 {
00126     double sum = 0.0;
00127     for(int i=0;i<16;i++) {
00128         sum +=   weights_skin[i] 
00129                / sqrt(covar_skin[i][0] * covar_skin[i][1] * covar_skin[i][2])
00130                * exp(-0.5 * (  (r - mean_skin[i][0]) * (r - mean_skin[i][0]) / covar_skin[i][0]
00131                              + (g - mean_skin[i][1]) * (g - mean_skin[i][1]) / covar_skin[i][1]
00132                              + (b - mean_skin[i][2]) * (b - mean_skin[i][2]) / covar_skin[i][2]));
00133     }
00134     return sum;
00135 }
00136 
00137 double gaussian_mix_nskin(int r, int g, int b)
00138 {
00139     double sum = 0.0;
00140     for(int i=0;i<16;i++) {
00141         sum +=   weights_nskin[i] 
00142                / sqrt(covar_nskin[i][0] * covar_nskin[i][1] * covar_nskin[i][2])
00143                * exp(-0.5 * (  (r - mean_nskin[i][0]) * (r - mean_nskin[i][0]) / covar_nskin[i][0]
00144                              + (g - mean_nskin[i][1]) * (g - mean_nskin[i][1]) / covar_nskin[i][1]
00145                              + (b - mean_nskin[i][2]) * (b - mean_nskin[i][2]) / covar_nskin[i][2]));
00146     }
00147     return sum;
00148 }
00149 
00150 double skin_likelihood(int r, int g, int b)
00151 {
00152     return gaussian_mix_skin(r, g, b) /
00153            gaussian_mix_nskin(r, g, b);
00154 }


hrl_head_registration
Author(s): Kelsey Hawkins
autogenerated on Wed Nov 27 2013 11:45:27