Я попробовал свой собственный код, чтобы подогнать двумерную квадратичную функцию c к значениям 3x3, используя устойчивый алгоритм решения наименьших квадратов, а также нашел максимум за пределами области. Патч данных 3x3 не соответствует квадратичной функции c, и поэтому подгонка бесполезна.
Подгонка двумерного квадратичного c к окрестности 3x3 требует некоторой степени плавности в данных, которые вы Похоже, в вашем выводе FAST нет.
Есть много других способов найти субпиксельное положение максимума. Один из тех, что мне нравятся, потому что он более стабилен и менее требователен к вычислениям, это подгонка «отделимой» квадратичной c функции. Короче говоря, вы подгоняете квадратичную функцию c к трем значениям вокруг локального максимума в одном измерении, а затем - в другом измерении. Вместо того, чтобы решать 6 параметров с 9 значениями, это решает 3 параметра с 3 значениями, дважды. Решение гарантированно стабильно до тех пор, пока центральный пиксель больше или равен всем пикселям в окрестности с 4 подключениями.
z1 = [f(-1,0), f(0,0), f(1,0)]^T
[1,-1,0]
X = [0,0,0]
[1,1,0]
solve: X b1 = z1
и
z2 = [f(0,-1), f(0,0), f(0,1)]^T
[1,-1,0]
X = [0,0,0]
[1,1,0]
solve: X b2 = z2
Теперь вы получите x координата центроида от b1
и координата y от b2
.