Я пытался реализовать оптический поток Лукаса Канаде. Поэтому я посмотрел на реализацию 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 ядром.