#include #include #include "filters.h" void hideBackRGBDiff(unsigned char* img, unsigned char* bmask, unsigned char usePrevMask, unsigned char* avg, int width, int height) { int size = width*height*3; int i; int diff; unsigned char img_r, img_g, img_b; unsigned char avg_r, avg_g, avg_b; for(i=0; i 0) ? (img_r-avg_r) : (avg_r-img_r); diff += ((img_g-avg_g) > 0) ? (img_g-avg_g) : (avg_g-img_g); diff += ((img_b-avg_b) > 0) ? (img_b-avg_b) : (avg_b-img_b); if(diff < 0.06) { bmask[i ] = 0; bmask[i+1] = 0; bmask[i+2] = 0; } else { if(!usePrevMask) { bmask[i ] = 255; bmask[i+1] = 255; bmask[i+2] = 255; } } } } void hideBackElgammalsrg(unsigned char* img, unsigned char* bmask, unsigned char usePrevMask, unsigned char* avg, double* avg_norm, double* std_dev_norm, int width, int height) { int size = width*height*3; int i, count; double diff; double img_s, img_r, img_g; double avg_s, avg_r, avg_g; double alpha = 0.5; double beta = 1.0/alpha; double factor = 4.5; for(i=0; i 0) ? (img_r-avg_r) : (avg_r-img_r); // if(diff > factor*std_dev_norm[i]) count++; // diff = ((img_g-avg_g) > 0) ? (img_g-avg_g) : (avg_g-img_g); // if(diff > factor*std_dev_norm[i+1]) count++; diff = (img_r-avg_r)*(img_r-avg_r) + (img_g-avg_g)*(img_g-avg_g); // if((count < 1)&&(img_s/avg_s > alpha)&&(img_s/avg_s < beta)) if((diff < 0.0008)&&(img_s/avg_s > alpha)&&(img_s/avg_s < beta)) { bmask[i ] = 0; bmask[i+1] = 0; bmask[i+2] = 0; } else { if(!usePrevMask) { bmask[i ] = 255; bmask[i+1] = 255; bmask[i+2] = 255; } } } } void hideImgBackground2(unsigned char* img, unsigned char* avg, int width, int height) { int size = width*height*3; int i, j, index; int diff, iaux; unsigned char img_r, img_g, img_b; unsigned char avg_r, avg_g, avg_b; for(i=0; i0) { avg_r = avg[index-3]; avg_g = avg[index-2]; avg_b = avg[index-1]; iaux = img_r + img_g + img_b; iaux -= avg_r + avg_g + avg_b; if(diff>abs(iaux)) diff = abs(iaux); } if(i<(width-1)) { avg_r = avg[index+3]; avg_g = avg[index+4]; avg_b = avg[index+5]; iaux = img_r + img_g + img_b; iaux -= avg_r + avg_g + avg_b; if(diff>abs(iaux)) diff = abs(iaux); } if(j>0) { avg_r = avg[index-width ]; avg_g = avg[index-width+1]; avg_b = avg[index-width+2]; iaux = img_r + img_g + img_b; iaux -= avg_r + avg_g + avg_b; if(diff>abs(iaux)) diff = abs(iaux); } if(j<(height-1)) { avg_r = avg[index+width ]; avg_g = avg[index+width+1]; avg_b = avg[index+width+2]; iaux = img_r + img_g + img_b; iaux -= avg_r + avg_g + avg_b; if(diff>abs(iaux)) diff = abs(iaux); } if(abs(diff) < 30) { img[index ] = 255; img[index+1] = 255; img[index+2] = 255; } } } } /* * r X * M * g = Y * b Z * * 0.41 0.36 0.18 * 0.21 0.71 0.07 * 0.02 0.12 0.95 */ void hideImgBackground3(unsigned char* img, unsigned char* avg, int width, int height) { int size = width*height*3; int i; double diff; unsigned char img_r, img_g, img_b; unsigned char avg_r, avg_g, avg_b; double x1, y1, X1, Y1, Z1, XYZ1; double x2, y2, X2, Y2, Z2, XYZ2; for(i=0; i -50)) { img[i ] = 255; img[i+1] = 255; img[i+2] = 255; } } } /* * Y = 0.257*R + 0.504*G + 0.098*B + 16 * Cr = 0.439*R - 0.368*G + 0.071*B + 128 * Cb = -0.148*R - 0.291*G + 0.439*B + 128 * */ void hideBackHueDiff(unsigned char* img, unsigned char* bmask, unsigned char usePrevMask, unsigned char* avg, int width, int height) { int size = width*height*3; int i; double diff; unsigned char img_r, img_g, img_b; unsigned char avg_r, avg_g, avg_b; double Cr1, Cb1; double Cr2, Cb2; for(i=0; i= c1) { bmask[i ] = 0; bmask[i+1] = 0; bmask[i+2] = 0; } else { if(!usePrevMask) { bmask[i ] = 255; bmask[i+1] = 255; bmask[i+2] = 255; } } } } void hideBackHongrgb(unsigned char* img, unsigned char* bmask, unsigned char usePrevMask, double* avg_norm, double* std_dev_norm, int width, int height) { int size = width*height*3; int i, count; double img_r, img_g, img_b, rgb; double avg_r, avg_g, avg_b; double diff_r, diff_g, diff_b; for(i=0; i 0) ? (img_r-avg_r) : (avg_r-img_r); diff_g = ((img_g-avg_g) > 0) ? (img_g-avg_g) : (avg_g-img_g); diff_b = ((img_b-avg_b) > 0) ? (img_b-avg_b) : (avg_b-img_b); if(diff_r < beta*std_dev_norm[i+2]) count++; if(diff_g < beta*std_dev_norm[i+1]) count++; if(diff_b < beta*std_dev_norm[i ]) count++; if(count >= c2) { bmask[i ] = 0; bmask[i+1] = 0; bmask[i+2] = 0; } else { if(!usePrevMask) { bmask[i ] = 255; bmask[i+1] = 255; bmask[i+2] = 255; } } } }