#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 входных точек точно)?