Определение оптического потока Лукаса Канаде из «Бумага против Матлаба» - PullRequest
0 голосов
/ 01 мая 2020

Я пытался реализовать оптический поток Лукаса Канаде. Поэтому я посмотрел на реализацию Matlab и использованную ими ссылку:

Я заметил, что существует неправильное представление либо со стороны, либо с их, и я разместил здесь . Речь идет о сглаживании с ядром isotropi c в качестве предварительной обработки перед вычислением A-элементов (версия Matlab). По сравнению с применением ядра изотропии c в окне W² при вычислении A-элементов (версия для бумаги).

Вот что я реализовал из бумаги:

const int half_window = window / 2;
const int window_squared = window * window;

// Lucas Kanade optical flow algorithm
for(int i = half_window; i < h - half_window; ++i) {
    for(int j = half_window; j < w - half_window; ++j) {
        float Atb[2] = {0};
        float a = 0, b = 0, c = 0;
        for(int m = 0; m < window_squared; ++m) {
            const int i_window = m / window - half_window;
            const int j_window = m % window - half_window;
            const unsigned index = (j + j_window) + (i + i_window) * w;
            const float Ix = fx[index];
            const float Iy = fy[index];
            const float It = ft[index];
            a += Ix * Ix * WKernel[m]; //or pow(Wkernel[m], 2)
            c += Iy * Iy * WKernel[m]; 
            b += Ix * Iy * WKernel[m];
            Atb[0] += - Ix * It * WKernel[m];
            Atb[1] += - Iy * It * WKernel[m];
        }
        // ... more computation ...
    }
}

версия Matlab было бы удалить Wkernel[m] и сделать conv(I{x,y,t}, Wkernel) раньше.

Я хочу знать, если я что-то неверно истолковал? возможно в статье неявно они делают свертку с изотропным c ядром.

...