CV - Extrair diferenças entre duas imagens

Atualmente, estou trabalhando em um sistema de intrusão baseado em vigilância por vídeo. Para concluir esta tarefa, tiro um instantâneo do plano de fundo da minha cena (suponha que ela esteja totalmente limpa, sem pessoas ou objetos em movimento). Depois, comparo o quadro que recebo da câmera de vídeo (estática) e procuro as diferenças. Eu tenho que poder checarqualquer diferenças, não apenas a forma humana ou o que seja, por isso não posso extrair características específicas.

Normalmente, eu tenho:

Estou usando o OpenCV, então, para comparar, basicamente:

cv::Mat bg_frame;
cv::Mat cam_frame;
cv::Mat motion;

cv::absdiff(bg_frame, cam_frame, motion);
cv::threshold(motion, motion, 80, 255, cv::THRESH_BINARY);
cv::erode(motion, motion, cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3)));

Aqui está o resultado:

Como você pode ver, o braço está despojado (devido ao conflito de diferenças de cores, eu acho) e, infelizmente, não é o que eu quero.

Pensei em adicionar o uso decv::Canny() a fim de detectar as bordas e preencher a parte que falta do braço, mas infelizmente (mais uma vez), apenas resolve o problema em poucas situações, na maioria delas.

Existe algum algoritmo ou técnica que eu possa usar para obter umpreciso relatório de diferença?

PS: Desculpe pelas imagens. Devido à minha nova assinatura, não tenho reputação suficiente.

EDITAR Eu uso a imagem em escala de cinza aqui, mas estou aberto a qualquer solução.

questionAnswers(2)

yourAnswerToTheQuestion