Найти (x, y) подпиксельные координаты максимума с использованием дискретной квадратичной интерполяции

#c #interpolation #discrete-mathematics

#c #интерполяция #дискретная математика

Вопрос:

Я должен найти подпиксельные (x,y) координаты максимального значения, заданного набором дискретных точек.
В моем случае я запускаю cv::matchTemplate функцию, которая скользит по окну модели вдоль изображения и возвращает значение оценки для каждой позиции пикселя.
Результатом является изображение с оценкой для каждой позиции и местоположением (x0, y0) с максимальным значением, например, эти значения вокруг найденного максимального значения:

       x_1    x0     x1
y_1 |0.91 | 0.89 | 0.90|
y0  |0.92 | 0.99 | 0.89|
y1  |0.95 | 0.95 | 0.90|
  

Я хотел бы использовать квадратичную интерполяцию, чтобы найти, где находятся координаты точки подпикселя интерполированного максимального значения, используя только ближайших соседей.
В одномерном случае я использую эту формулу (предполагая x0 , что это начало координат):

 interpolated_x = (x_1-x1)/(2.*(x_1-2.*x0 x1));
  

Например:

   x_1    x0     x1
|0.92 | 0.99 | 0.89|
  

вы получаете interpolated_x = -0.08823 , что правильно немного слева от x0.

Есть ли какой-нибудь код на C для случая 2d?

Комментарии:

1. github.com/tenomoto/libeno/blob/master/biquadratic.c <- это более или менее похоже на интерполяцию, которую вы хотите, не уверен, как вы найдете точку с максимумом, кроме некоторого итеративного поиска

2. @jakub_d: С такой квартичной функцией это может быть сложно, да. Вместо этого мы ищем квадратичную подгонку (которая обычно не воспроизводит 9 входных точек точно)?