1
Учитывая гистограмму я хочу обучить гауссовую смесь Модель:OpenCV Gaussian смесь Модель гистограммы
int calcGMMThreshold(cv::Mat & hist, cv::Mat & labels){
cv::Mat samples(hist.rows,2, CV_32FC1); // for building 2 dim samples
// output variables
cv::Mat probs, log_likelihoods;
// building 2 dimensional Mat -->[value][#value]
for(int i = 0; i<hist.rows; i++)
{
samples.at<float>(i,0) = (float)i;
samples.at<float>(i,1) = hist.at<float>(i);
}
assert(samples.cols == 2);
assert(samples.rows == 256);
///set up gmm
//gmm object with 3 gmms
cv::EM gmm(3);
/*train gmms*/
gmm.train(samples, log_likelihoods, labels, probs);
}
Когда я plot гистограммы с этикетками для меня это выглядит, что мои ГММ отдельные абсолютные значения и не 2-мерный вход.
Я бы ожидал 3 гауссианов со своими средствами на каждом пике гистограммы.
Вы уверены, что хотите обучить 2D gmm? не ваши данные 1D? – BeyelerStudios
Я хочу получить куски интенсивностей. Я думаю, что результат, который я построил, - это 1d gmm? Так что это не то, что я хочу. – TheLearingGuy
Это правда, что для построения гистограммы требуются метки, то есть ведра гистограммы. Но gmm в вашем примере «видит» набор 2D-данных (метка + значение) и аппроксимирует 2D-гауссовские распределения на них, нет? Вы должны делать gmm только по значениям. – BeyelerStudios