Обновление OpenCV CvNormalBayesClassifier

Я пытаюсь использовать CvNormalBayesClassifier для обучения моей программы, чтобы узнать цвета пикселей кожи. У меня есть набор тренировочных образов и изображений ответов. Ответные изображения черно-белые, участки кожи отмечены белым. Вот мой код,

CvNormalBayesClassifier classifier;
for (int i = 0; i < numFiles; i++) {

string trainFile = "images/" + int2str(i) + ".jpg";
string responseFile = "images/" + int2str(i) + "_mask.jpg";

Mat trainData = imread(trainFile, 1);
Mat responseData = imread(responseFile, CV_LOAD_IMAGE_GRAYSCALE);

trainData = trainData.reshape(1, trainData.rows * trainData.cols);
responseData = responseData.reshape(0, responseData.rows * responseData.cols);

trainData.convertTo(trainData, CV_32FC1);
responseData.convertTo(responseData, CV_32FC1);

classifier.train(trainData, responseData, Mat(), Mat(), i != 0);
}

Тем не менее, это дает следующую ошибку,

The function/feature is not implemented (In the current implementation the new training data must have absolutely the same set of class labels as used in the original training data) in CvNormalBayesClassifier::train

Большое спасибо.

1

Решение

Как говорится в сообщении об ошибке, вы не можете «обновить» классификатор в свете новых меток классов. Нормальный байесовский классификатор изучает смесь гауссиан для представления данных обучения. Если вы вдруг начнете добавлять новые метки, эта модель смеси перестанет быть правильной, и новую модель нужно будет изучать с нуля.

0

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

Хорошо, я обнаружил, что проблема заключалась в том, что черно-белые изображения были сжаты и, следовательно, содержат значения в диапазоне от 0 до 255. Поэтому в других изображениях может быть новая метка класса.

Чтобы решить эту проблему, используйте пороговое значение, чтобы все значения стали 0 или 255.

0