CV - Extrae diferencias entre dos imágenes

Actualmente estoy trabajando en un sistema de intrusión basado en video vigilancia. Para completar esta tarea, tomo una instantánea del fondo de mi escena (supongo que está totalmente limpio, sin personas ni objetos en movimiento). Luego, comparo el cuadro que obtengo de la cámara de video (estática) y busco las diferencias. Tengo que poder verificaralguna diferencias, no solo la forma humana o lo que sea, por lo que no puedo extraer características específicas.

Por lo general, tengo:

Estoy usando OpenCV, así que para comparar básicamente hago:

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)));

Aquí está el resultado:

Como puede ver, el brazo está despojado (supongo que debido al conflicto de diferencia de color) y lamentablemente esto no es lo que quiero.

Pensé en agregar el uso decv::Canny() Para detectar los bordes y llenar la parte faltante del brazo, pero lamentablemente (una vez más), solo resuelve el problema en pocas situaciones, no en la mayoría de ellos.

¿Hay algún algoritmo o técnica que pueda usar para obtener unpreciso informe de diferencia?

PD: Perdón por las imágenes. Debido a mi nueva suscripción, no tengo suficiente reputación.

EDITAR Aquí uso una imagen en escala de grises, pero estoy abierto a cualquier solución.

Respuestas a la pregunta(2)

Su respuesta a la pregunta