1

Ищу реализовать многомерный нормальный PDF [1] в C++ для назначения каждого пикселя в членстве образа класса, т.е.Реализовать многомерный нормальный PDF в 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).

ответ

0

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

// [...] 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 
    } 

Вы могли бы использовать Эйген сделать необходимые векторные и матричные манипуляции для передачи скаляра. Этот blog posting имеет более подробную информацию (хотя для генерации значений выборки он использует Boost.Random).