2014-09-10 4 views
0

Я использую BackgroundSubtractorMOG2 как код нижеBackgroundSubtractorMOG2 очень шумный?

BackgroundSubtractorMOG2 bgr; 
double learningRate = 0.05; 
(bgr)(img_input, img_mask, learningRate); 

Но результат не хорошо, есть много шума на переднем плане пикселей здесь (рисунок ниже) enter image description here

Когда я использую BackgroundSubtractorMOG как код ниже

BackgroundSubtractorMOG bgr(81, 3, 0.1); 
double learningRate = 0.05; 
(bgr)(img_input, img_mask, learningRate); 

в результате лучше, но этот метод медленнее (рисунок ниже) enter image description here

Я хочу использовать BackgroundSubtractorMOG2, потому что это быстрее, но результат очень шумный.

Кто-нибудь может показать мне правильный способ использования BackgroundSubtractorMOG2?

Спасибо!

T & T

+1

Вы называете это «очень» шумным? Если вы хотите скорость + качество, попробуйте ViBe. Существует демо-приложение (где вы можете узнать, подходит ли вам качество). Метод очень прост в применении, но запатентован. – Micka

+0

@Micka: Спасибо, я попытался использовать алгоритм Vibe, реализованный BgsLibrary, его качество хорошее, но его скорость медленнее, чем BackgroundSubtractorMOG. – TTGroup

ответ

4

Почему бы вам не использовать морфологический операцию на выходе?

vector<vector<Point >> contours; 
Mat kernel=getStructuringElement(MORPH_ELLIPSE,Size(5,5)); 
Mat kernel2=getStructuringElement(MORPH_ELLIPSE,Size(10,10)); 
morphologyEx(img_mask,img_mask,CV_MOP_ERODE,kernel); 
morphologyEx(img_mask,img_mask,CV_MOP_DILATE,kernel2); 

findContours(img_mask,contours,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE); 
drawContours(img_input,contours,-1,cv::Scalar(255,255,255),2); 
output=img_input.clone(); 
Смежные вопросы