Оптический поток Лукаса-Канаде — расчет градиентаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Оптический поток Лукаса-Канаде — расчет градиента

Сообщение Anonymous »

Я реализовал метод Лукаса-Канаде (версия для каждого пикселя, а не для функций, которые есть в OpenCV). Однако у меня есть вопрос относительно расчета градиентов (dx, dy, dt). В нескольких реализациях я видел это:

Код: Выделить всё

for (int y = 0; y < src.GetHeight() - 1; y++) {
for (int x = 0; x < src.GetWidth() - 1; x++) {
float src00 = src.GetPixelStart(x, y)[0];
float src10 = src.GetPixelStart(x + 1, y)[0];
float src01 = src.GetPixelStart(x, y + 1)[0];
float src11 = src.GetPixelStart(x + 1, y + 1)[0];

float dst00 = dst.GetPixelStart(x, y)[0];
float dst10 = dst.GetPixelStart(x + 1, y)[0];
float dst01 = dst.GetPixelStart(x, y + 1)[0];
float dst11 = dst.GetPixelStart(x + 1, y + 1)[0];

float srcVal = src10 - src00 + src11 - src01;
float dstVal = dst10 - dst00 + dst11 - dst01;

dFx.SetValue(0.25 * (srcVal + dstVal), 0, x, y);

//------

srcVal = src01 - src00 + src11 - src10;
dstVal = dst01 - dst00 + dst11 - dst10;

dFy.SetValue(0.25 * (srcVal + dstVal), 0, x, y);

//------

dFt.SetValue(0.25 * (dst00 + dst10 + dst01 + dst11 - src00 - src10 - src01 - src11), 0, x, y);
}
}
Все работает вполне нормально.
Однако я пытался использовать оператор Собеля в X (

Код: Выделить всё

ConvolutionFilterSeparable({ -1, 0, 1 }, { 1, 2, 1 }) и Y (ConvolutionFilterSeparable({ 1, 2, 1 }, { -1, 0, 1 })
) направление для вычисления сначала производных, а затем

Код: Выделить всё

 Image2d dFx = (derivatorA.dx + derivatorB.dx);
Image2d dFy = (derivatorA.dy + derivatorB.dy);
Image2d dFt = (dst - src);
Проблема в том, что если я использую это, конечный оптический поток будет очень мал и не будет соответствовать движениям изображения.
Почему упрощенный расчет работает лучше?

Подробнее здесь: https://stackoverflow.com/questions/786 ... alculation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема с иерархическим методом Лукаса-Канаде для оптического потока
    Anonymous » » в форуме Python
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Оптический поток от Nerf [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Алгоритм преобразования 1-D-градиента в специальную форму 2-D-градиента
    Anonymous » » в форуме Python
    0 Ответы
    60 Просмотры
    Последнее сообщение Anonymous
  • Почему расчет Python с числами с плавающей точкой выполняется быстрее, чем расчет с целыми числами
    Anonymous » » в форуме Python
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Расчет Bazel Digest расчет больших разреженных файлов медленно
    Anonymous » » в форуме Linux
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»