shadow detection in opencv code
来源:互联网 发布:囚徒健身软件 编辑:程序博客网 时间:2024/05/29 18:15
//shadow detection performed per pixel// should work for rgb data, could be usefull for gray scale and depth data as well// See: Prati,Mikic,Trivedi,Cucchiarra,"Detecting Moving Shadows...",IEEE PAMI,2003.CV_INLINE int _icvRemoveShadowGMM(float* data, int nD, unsigned char nModes, CvPBGMMGaussian* pGMM, float m_fTb, float m_fTB, float m_fTau){ float tWeight = 0; float numerator, denominator; // check all the components marked as background: for (int iModes=0;iModes<nModes;iModes++) { CvPBGMMGaussian g=pGMM[iModes]; numerator = 0.0f; denominator = 0.0f; for (int iD=0;iD<nD;iD++) { numerator += data[iD] * g.mean[iD]; denominator += g.mean[iD]* g.mean[iD]; } // no division by zero allowed if (denominator == 0) { return 0; }; float a = numerator / denominator; // if tau < a < 1 then also check the color distortion if ((a <= 1) && (a >= m_fTau)) { float dist2a=0.0f; for (int iD=0;iD<nD;iD++) { float dD= a*g.mean[iD] - data[iD]; dist2a += (dD*dD); } if (dist2a<m_fTb*g.variance*a*a) { return 2; } }; tWeight += g.weight; if (tWeight > m_fTB) { return 0; }; }; return 0;}