Извлечение разницы между 2 изображениями в C # - PullRequest
3 голосов
/ 06 июля 2011

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

1 Ответ

0 голосов
/ 26 июня 2013

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

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;

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

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

...