фотометрическая нормализация AAM

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

  Eigen::VectorXd getMeanTexture(std::vector<Eigen::VectorXd> &gi)
{
//gi array of texture vector                                                                                              //n => number of texture vectors
//nelt => number element into a texture vector

int n = gi.size(), nelt = gi[0].size();
Eigen::VectorXd mean = gi[0];

double dst = 1.;

//start algorithm
while(dst > 0.0001)
{
//normalized mean
mean = mean.array() - mean.mean(); //centred mean texture
double s = mean.array().pow(2).sum() / nelt;
mean = (mean.array())/sqrt(s); //normalized mean texture

Eigen::VectorXd tmp = VectorXd::Zero(nelt); //tempory mean texture

//match each texture vector at the mean
for(int i = 0; i < n; ++i)
{
double beta = gi[i].mean();
double alpha = gi[i].dot(mean);

gi[i] = (gi[i].array() - beta)/alpha;

tmp += gi[i];
}

//estimate the new mean vector
tmp /= n;

//compute distance between tmp and mean to know when to stop algorithm
dst = (mean - tmp).norm();

mean = tmp;

cout << dst << endl;
}

return mean;
}

Вот вывод моего алгоритма:

    421.868
421.868
421.868
421.868
....
421.868
421.868
421.868
421.868

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector