Все примеры открытых CV, которые я могу найти, похоже, относятся к 2D-ядру поверх 2D-изображения.
У меня есть 1d-ядро, и я ищу операцию, которая вернет для каждой строки значение и смещение что приводит к максимальной корреляции.
Прямой C ++, мой код будет выглядеть так:
vector<int> offset(img.rows);
vector<int> amp(img.rows);
std::vector<double> corrs(MAX_SEARCH);
for(int row = 0; row< img.rows; row++){
row_data = img.row(row)
for (int i = 0; i < MAX_SEARCH; i++) {
double correlation = 0;
for (int j = 0; j < wfm.size(); j++) {
correlation += (wfm[j] * row_data[i+j]);
}
corrs[i] = correlation;
}
amp[row] = *std::max_element(corrs.begin(), corrs.end());
offest[row] = std::max_element(corrs.begin(), corrs.end()) - corrs.begin();
}
Ключевое, что я ищу, - это возможность воспользоваться какой-то отдельной инструкцией Множественные оптимизации данных, которые, я думаю, должен уметь OpenCV, или, если OpenCV этого не добьется, как этот код можно переписать для этого.