Совсем недавно я взялся написать подобный алгоритм. Использую Си, но есть и вариант в html java-script (canvas-tag). Там какрас я использовал собственный простейщий фильтр удаление фона. Просто в 32-битном изображении биты Альфа-канала удалял(0x00) или устанавливал(0xFF), а RGB оставались как есть. При оптимизации в MMX получился очень быстрый фильтр. Дальше работаешь только с Альфа.
Задался я дальше проблемой поисков пальцев ладони и зашёл в тупик. Не смог ничего придумать.
Но вот с подавлением мелких-паразитных объектов могу помочь.
Просто пишешь алгоритм заливки по Альфа-каналу.
В цикле ищешь каждый Альфа-пиксел с битами 0xFF и начинаешь заливку (Flood Fill) индексом от 1 до 254. Т.е. первый встретившийся объект перезаливаешь в Альфе из 0xFF в 0x01, второй - в 0x02 и т.д.
При этом подсчитываешь количество всех заливаемых пикселей в объекте. Если их меньше указанного порога, скажем 1/250 от количества пикселей всего изображения, то все залитые Альфа с текущим индексом обнуляем.
Иначе заносим подсчитанное число залитых пикселей в таблицу и переходим в следующему индексу (до 254-го), и ищем следующий пиксел с 0xFF-Альфой.
Так мы удалим все ненужные мелкие объекты своеобразной фильтрацией. А в таблице будем иметь список всех объектов и можно с ними работать по-отдельности, ориентируясь по индексу Альфа-канала.
Таким образом у меня получилось при съёмках на фоне комнаты не только отделить себя от заднего плана, но и перемещать, дублировать или скрывать все остальные объекты. В режиме реального времени.
К сожалению, с пальцами ничем помочь не могу.
Вот к примеру видео с этим алгоритмом:
Разделение объектов и
Замена фона