Я пытаюсь понять шаги нормализации и «ненормализации» в алгоритме прямого эллипсового метода наименьших квадратов, разработанном Фицгиббоном, Пилу и Фишером (улучшенный Галиром и Флюссером).Ненормализация коэффициентов эллипса после прямого выравнивания эллипса
EDITED: Более подробная информация о теории добавлена. Является ли проблема с собственными значениями, из-за которой возникает путаница?
Краткая теория:
Эллипс представлен неявным полином второго порядка (общая коническая уравнения):
где:
Чтобы ограничить это общую конику к эллипсу, коэффициенты должны удовлетворять квадратичное ограничение:
, которое эквивалентно:
где С представляет собой матрицу нулей, за исключением :
Конструкция матрица D состоит из всех точек данных х юга я.
Минимизация расстояния между коническим и точки данных могут быть выражены с помощью задачи собственных значений обобщенной (некоторая теория была опущена):
Обозначая:
Теперь у нас есть система:
Если мы решим эту систему, собственный вектор, соответствующий собственному значению одного положительного является правильным ответом.
Код:
фрагментов кода здесь непосредственно из кода MATLAB, представленной авторами: http://research.microsoft.com/en-us/um/people/awf/ellipse/fitellipse.html
ввода данных представляет собой ряд (х, у) точек. Точки нормируются путем вычитания среднего значения и деления на стандартное отклонение (в этом случае вычисляется как половина диапазона). Я предполагаю, что эта нормализация позволяет лучше подогнать данные.
% normalize data
% X and Y are the vectors of data points, not normalized
mx = mean(X);
my = mean(Y);
sx = (max(X)-min(X))/2;
sy = (max(Y)-min(Y))/2;
x = (X-mx)/sx;
y = (Y-my)/sy;
% Build design matrix
D = [ x.*x x.*y y.*y x y ones(size(x)) ];
% Build scatter matrix
S = D'*D; %'
% Build 6x6 constraint matrix
C(6,6) = 0; C(1,3) = -2; C(2,2) = 1; C(3,1) = -2;
[gevec, geval] = eig(S,C);
% Find the negative eigenvalue
I = find(real(diag(geval)) < 1e-8 & ~isinf(diag(geval)));
% Extract eigenvector corresponding to negative eigenvalue
A = real(gevec(:,I));
После этого, нормализация восстанавливается на коэффициенты:
par = [
A(1)*sy*sy, ...
A(2)*sx*sy, ...
A(3)*sx*sx, ...
-2*A(1)*sy*sy*mx - A(2)*sx*sy*my + A(4)*sx*sy*sy, ...
-A(2)*sx*sy*mx - 2*A(3)*sx*sx*my + A(5)*sx*sx*sy, ...
A(1)*sy*sy*mx*mx + A(2)*sx*sy*mx*my + A(3)*sx*sx*my*my ...
- A(4)*sx*sy*sy*mx - A(5)*sx*sx*sy*my ...
+ A(6)*sx*sx*sy*sy ...
]';
На данный момент, я не знаю, что случилось. Почему ненормализация последних трех коэффициентов A (d, e, f) зависит от первых трех коэффициентов? Как вы математически показываете, откуда берутся эти уравнения ненормализации?
2 и 1 коэффициенты в ненормализации приводят меня к тому, что матрица ограничений должна каким-то образом участвовать.
Пожалуйста, дайте мне знать, требуется ли более подробная информация о методе ... Кажется, мне не хватает того, как нормализация распространялась через матрицы и проблему с собственными значениями.
Любая помощь приветствуется. Благодаря!
выглядит как очень хорошее объяснение – Leo
@ Leo спасибо! –