K-Means
アルゴリズムを使用して多くの画像をクラスター化したい。各クラスターが画像のドミナントカラーまたは色相を表すように、クラスターを設定したいと思います。これについては、 K-Meansを使用したカラー画像クラスタリングの論文で読んだことがあります。
誰かがOpenCVでこれを行うアイデアを持っていますか?
たぶん、各画像のヒストグラムを比較することができます。でも写真がたくさんあるととても時間がかかります
K-Means
アルゴリズムを使用して多くの画像をクラスター化したい。各クラスターが画像のドミナントカラーまたは色相を表すように、クラスターを設定したいと思います。これについては、 K-Meansを使用したカラー画像クラスタリングの論文で読んだことがあります。
誰かがOpenCVでこれを行うアイデアを持っていますか?
たぶん、各画像のヒストグラムを比較することができます。でも写真がたくさんあるととても時間がかかります
画像をベクトル化して、各行が RGB のセットになるcv::kmeans
ようにし、次のようなクラスター化に使用できます。
std::vector<cv::Mat> imgRGB;
cv::split(img,imgRGB);
int k=5;
int n = img.rows *img.cols;
cv::Mat img3xN(n,3,CV_8U);
for(int i=0;i!=3;++i)
imgRGB[i].reshape(1,n).copyTo(img3xN.col(i));
img3xN.convertTo(img3xN,CV_32F);
cv::Mat bestLables;
cv::kmeans(img3xN,k,bestLables,cv::TermCriteria(),10,cv::KMEANS_RANDOM_CENTERS );
bestLables= bestLables.reshape(0,img.rows);
cv::convertScaleAbs(bestLables,bestLables,int(255/k));
cv::imshow("result",bestLables);
cv::waitKey();