2012-08-15 50 views

回答

4

您需要首先设计某种标准化技术,其中两个帧(低光照和其他光源较多)将被标准化,并应包含非常接近的值。

不幸的是我有同样的问题,我不能完全解决它,但解决这个问题的一种方法是执行histogram equalization

完成均衡后,您可以继续简单的背景减法技术。

+0

亲爱的Masad和Astor,非常感谢您的回答和建议。问候。 – 2012-08-15 21:51:44

0

我知道这已经老了。但我得到了几乎相同的问题。我所做的是减少所有图像(帧)的RGB分量的强度。对于我在街上检测汽车的情况,几乎可以消除阳光照射的突然变化。然后将修改后的RGB帧提供给BackgroundSubtractorMOG2等后台减法。

这里是代码。可变的位移需要调整可能2或4取决于条件。

void makeIlluminationInvariantRGB(const cv::Mat& frame, cv::Mat& result) { 
    frame.copyTo(result); 
    uint8_t* pixelPtr = (uint8_t*)result.data; 
    int cn = result.channels(); 
    int bitshift = 3; 

    for(int row = 0; row < result.rows; row++) 
    { 
     for(int col = 0; col < result.cols; col++) 
     { 
      pixelPtr[row*result.cols*cn + col*cn + 0] = pixelPtr[row*result.cols*cn + col*cn + 0] >> bitshift; 

      pixelPtr[row*result.cols*cn + col*cn + 1] = pixelPtr[row*result.cols*cn + col*cn + 1] >> bitshift; 

      pixelPtr[row*result.cols*cn + col*cn + 2] = pixelPtr[row*result.cols*cn + col*cn + 2] >> bitshift; 
     } 
    } 
} 

希望它能帮助别人。

0

我解决这个问题的方法是对减法模型使用meanStdDev公式。如果偏差很高,我会触发背景模型的重置。