1

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

どうもありがとう。

4

2 に答える 2

0

問題は、白黒の画像が圧縮されているため、0 ~ 255 の範囲の値が含まれていることです。したがって、他の画像に新しいクラス ラベルが存在する可能性があります。

この問題を解決するには、しきい値を使用して、値がすべて 0 または 255 になるようにします。

于 2013-04-09T03:59:08.773 に答える
0

エラー メッセージが示すように、新しいクラス ラベルに照らして分類子を「更新」することはできません。通常のベイズ分類子は、ガウス分布の混合を学習してトレーニング データを表します。新しいラベルを突然追加し始めると、この混合モデルは正しくなくなり、新しいモデルをゼロから学習する必要があります。

于 2013-04-08T18:37:20.760 に答える