boost — Реализация многомерного нормального PDF в C ++ для классификации изображений

Я ищу, чтобы реализовать многомерный нормальный PDF [ 1 ] в C ++, чтобы назначить каждый пиксель в членстве изображения класса, т.е.

    for each pixel
for each class
compute multivariate normal PDF using the pixel's feature vector and the class' mean vector and covariance matrix
end
end

Есть ли библиотека, которая может сделать это эффективным способом (то есть аналогично функции mvnpdf в Matlab [2])? Если бы не идеи, какие библиотеки или подходы были бы лучше (я думал об использовании Eigen).

1

Решение

Я не знаю о готовом одношаговом решении. Для двухэтапного подхода смешивания и сопоставления вы можете ознакомиться с Boost.Math который имеет расширенный пример для одномерный нормальное нарушение в разделе статистического распределения:

// [...] many headers and namespaces inclusions

int main()
{
// Construct a standard normal distribution s
normal s; // (default mean = zero, and standard deviation = unity)
cout << "Standard normal distribution, mean = "<< s.mean()
<< ", standard deviation = " << s.standard_deviation() << endl;

/*` First the probability distribution function (pdf).
*/
cout << "Probability distribution function values" << endl;
cout << "  z " "      pdf " << endl;
cout.precision(5);
for (double z = -range; z < range + step; z += step)
{
cout << left << setprecision(3) << setw(6) << z << " "<< setprecision(precision) << setw(12) << pdf(s, z) << endl;
}
cout.precision(6); // default

// [...] much more
}

Затем вы можете использовать Eigen, чтобы сделать необходимые манипуляции с вектором и матрицей, чтобы передать в нее скаляр. это запись в блоге имеет больше деталей (хотя он использует Boost.Random для генерации значений выборки).

0

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

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