2013-11-27 2 views
2

Я использую Emgu с C#.Какое лучшее цветовое пространство для обнаружения движения

У меня есть поток jepgs, поступающий с подачи камеры. В настоящий момент я использую абспид между двумя изображениями, чтобы получить изменения движения.

Image<Bgr, byte> _diffBetweenCurrentAndPrevious = _currentFrame.Convert<Bgr, Byte>().AbsDiff(PreviousFrame.Convert<Bgr, Byte>()); 

Затем я перечисляю данные массива изображения, сохраняя все изменения, и искал движение над определенным порогом.

float diffCouner = 0; 
for (int y = 0; y < 576; y++) 
{ 
    for (int x = 0; x < 720; x++) 
    { 
     if (_diffBetweenCurrentAndPrevious.Data[y, x, 0] >= 10 
     || _diffBetweenCurrentAndPrevious.Data[y, x, 1] >= 10 || 
     _diffBetweenCurrentAndPrevious.Data[y, x, 2] >= 10) 
     { 
      BaseImage.Data[y, x, 0] = _currentFrame.Data[y, x, 0]; 
      BaseImage.Data[y, x, 1] = _currentFrame.Data[y, x, 1]; 
      BaseImage.Data[y, x, 2] = _currentFrame.Data[y, x, 2]; 
      diffCouner++; 
      } 
     } 
    } 

В настоящее время я использую BGR.

Лучше ли использовать HSV или YCC или ..?

Я заметил, что при использовании YCC мне приходилось использовать нижний порог, потому что движение не показалось ясным для автомобиля, проходящего ночью.

Меня интересует лучший подход.

Или использовать формат <Gray,Byte>?

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

Я мог и буду проходить тесты в течение нескольких дней, но я буду как красно-индийский, молящийся о том, чтобы времена года менялись.

Любые советы приветствуются.

Благодаря

Только в случае, если любой из них следующие мой вопрос с интересом обнаружили, что использование <Gray,Byte> не дает достаточно хорошие результаты для легких изменений.

Я теперь работает тесты с <HSV,Byte>

ответ

2

Раньше я имел точно такие же проблемы. Я не думаю, что есть какой-либо способ решить вашу проблему. Я предлагаю вам создать приложение, если вы можете изменить свои параметры h s v во время выполнения и проверить порог, если ваша комбинация достаточно хороша. Я использовал этот проект для этого. Я надеюсь, что это поможет http://www.osslab.com.tw/@api/deki/files/3550/=An_autonomous%252c_co-operative_telerobotic_agent_framework_for_WowWee_Rovio_-_Konstantinos_Tsimpoukas_1130191.pdf

+1

ах родственный дух! :) спасибо –

+1

Я счастлив, что смогу помочь. – Apostolos

2

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

+0

Привет, спасибо за ваши мысли и комментарии, очень ценится. На данный момент я не отслеживаю.Но если бы я был, я бы, вероятно, использовал Hue + Sat каналы для этого :) –

1

Если вам нужен более высокий уровень чувствительности, попробуйте следующее (оба переднего плана и фоновые изображения в формате BGR):

int diff0 = Math.Abs(image0.Data[j, i, 0] - image1.Data[j, i, 0]); 
int diff1 = Math.Abs(image0.Data[j, i, 1] - image1.Data[j, i, 1]); 
int diff2 = Math.Abs(image0.Data[j, i, 2] - image1.Data[j, i, 2]); 
int diff = Math.Max(diff0, diff1); 
diff = Math.Max(diff, diff2); 

Результирующее значение «diff» является самой большой разницей в 3-х каналах. Этот подход всегда хорошо работал для моих различных задач вычитания фона.

+0

большое спасибо за сообщение –

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