2013-05-28 3 views
2

У меня есть концептуальное сомнение в оптическом потоке. Яркости Постоянство ограничение утверждает, что ∂I/∂x против х + ∂I/∂y против у + ∂I/∂t = 0Пример оптического потока

пример представляет собой 2 * 2 изображений [1 0; 0 0] в момент времени t. Предположим теперь, что в момент времени t + 1 он сдвигается на [a a] пиксели (предположим, что a дробно и меньше 1). Затем новым изображением является [(1-a) (1-a) a (1-a); (1-a) * a a * a].

Теперь, если мы подходим значения в исходном уравнении, я х = Я у = -1, и я т = -2 * а + а * а в точке (1,1). (Я использовал I х (х, у) = I (х + 1, Y) - I (х, у))

, что делает ∂i/∂xv х + ∂i/∂yv y + ∂I/∂t = a * a - 4 * a. Если а очень мало, то даже тогда оно может быть аппроксимировано 4 * а, которое не равно нулю. Выручи меня.

+0

Что относительно пограничных эффектов? – Shai

+0

Я не уверен в том, что вы имеете в виду. Меня очень недавно познакомили с этой темой. Можете ли вы дать некоторые подробности? –

ответ

0

Прежде всего, это не BCC, с которым вы имеете дело, а скорее его приближение первого порядка, которое часто называют оптическим ограничением потока (OFC) .

OFC не подходит для вашего примера, и причина в том, что вы используете соответствующие оценки производных.

Первый намек на то, что что-то не так, должно возникнуть, когда вы заметите, что у вас есть два изображения: одно для t = 0 и одно для t = 1. Какой из них следует использовать для оценки производных I_x и I_y? Вы выбрали t = 0, почему бы не t = 1? Подход мог бы принимать как и затем в среднем, а именно:

I_x = (I_x (т = 0) + I_y (т = 1))/2

Это приведет к производной фильтра, который является уже не 2-балльные, а 4-точки с ядром, растянувшимся в t-домен. Многие специалисты в области оптического потока используют оба типа I_x вместо усреднения и получают два вида оптического потока: один вперед и один назад, который затем они могут выполнять после обработки.

Как вы выбираете оценки ваших дериватов, критически влияет на поведение вашего алгоритма оптического потока!

При работе с числовыми оценками Diff-уравнений, это более распространено использование централизованных дифференциальных оценок, а именно:

I_x = (I (х + 1, у) - I (х-1, y))/2

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

Однако это все равно не будет работать так хорошо, как вы хотели бы, сделав фиксацию OFC.Если вы исследуете OFC, он может быть переписан как:

I_t = - I_x v_x - I_y I_y

I_t = - | v | (к град (I))

где v = (v_x, v_y) = | v | (cos (a), sin (a)) - вектор движения, а k = (cos (a), sin (a)), единичный вектор движения. Количество (k grad (I)) - это то, что называется производная направленности. Для этого вам не следует использовать двухточечные централизованные различия. Вам следует использовать оценки для I_t, I_x и I_y, которые используют один и тот же раздел ядра/поддержки. Это может быть, например, фильтры размером 3 на 3 на 2.

В Matlab код для этого может быть, например:

[dx, dy, dt] = grad3D(imNew,imPrev) 

gg = [0.2163, 0.5674, 0.2163]; 
f = imNew + imPrev; 
dx = f(:,[2:end end]) - f(:,[1 1:(end-1)]); 
dx = conv2(dx,gg','same'); 

dy = f([2:end end],:) - f([1 1:(end-1)],:); 
dy = conv2(dy,gg ,'same'); 

dt = 2*conv2(gg,gg,imNew - imPrev,'same'); 

Причина люди все еще используют меньшие дериваты фильтры иногда потому, что вы не теряете разрешение, которое является недостатком использования больших ядер. Обратите внимание, что приведенный выше алгоритм оценки производных не совпадает с выполнением двухточечных производных в более крупных масштабах. Многие так считают, но это неправда.

В interactive tutorial and toolbox on optical flow, что я написал, вы можете получить больше информации об этих проблемах. Запустите панель инструментов с опцией:

in.method = 'gradient'; 

и вы получите интерактивный вариант, который может помочь вам получить больше интуиции.

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