2011-07-06 2 views
3

Я использую webcamera в C# (используя AForge). У меня также есть фон по умолчанию. Мне нужно извлечь разницу между текущим изображением и фоном и создать новое изображение, которое содержит только те объекты, которые отсутствуют на фоне по умолчанию. Например, если я двигаю рукой перед веб-камерой, мне нужно вывести только эту руку (с остальной белой задней частью). Если я просто сравниваю пиксель за пикселем, он становится уродливым, так как есть много шума. Я попытался использовать пороговое значение для разницы, но результат по-прежнему очень плохой. Я думаю, что, возможно, есть какой-то фильтр или известный алгоритм, как это сделать? Любая помощь будет очень высоко ценится.Извлечение разницы между 2 изображениями в C#

+0

Как раз мысль, вы не можете использовать Kinect SDK? http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/ Или, может быть, это поможет вам понять, как решить вашу проблему. –

+0

Разве это не SDK для устройства Kinect? По крайней мере, об этом говорится в описании SDK. Я использую только одну веб-камеру. На самом деле я нашел фильтр в AForge, называемый CustomFrameDifferenceDetector Class, но документации по его использованию недостаточно. По крайней мере, я не мог найти его. –

+0

Не знаю точно. Просто подумал об этом, когда вы хотели отслеживать движения рук .. :) –

ответ

0

Вы всегда можете попробовать сравнить полутоновые изображения двух. Предполагая, что ваша веб-камера является стационарной (потому что, если нет, то вам придется делать гораздо больше корректировки сдвигов пикселей), тогда вы можете преобразовать изображения в оттенки серого и иметь порог, по которому вы считаете, что изображения отличаются:

int threshold = 30; 
PixAvg1[i,j] = (Pix1.R + Pix1.G + Pix1.B)/3 
PixAvg2[i,j] = (Pix2.R + Pix2.G + Pix2.B)/3 
if (Math.Abs(PixAvg1[i,j] - PixAvg2[i,j+1])>threshold) 
    difPixel == true; 

Порог - это толерантность между пикселями, которые вы хотите получить. Это значение может быть обусловлено различием в яркости изображений.

С этим вы не получите самые хрустящие результаты, потому что некоторые пиксели, которые вы покрываете, будут совпадать, однако вы можете выполнить дополнительное сканирование (если хотите) и выполнить какую-либо область заполнения.

Смежные вопросы