Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void KMeansClustering() {
- Mat imgSrc = imread("points1.bmp", CV_LOAD_IMAGE_GRAYSCALE);
- // Creating a color image
- Mat img(imgSrc.rows, imgSrc.cols, CV_8UC3);
- std::uniform_int_distribution<int> dist_img(0, 255);
- std::default_random_engine gen;
- int randInt;
- vector<Point2i> vec;
- vector<int> vecClusters;
- vector<Point2i> centre;
- // Assigning random colors to clusters
- const int K = 3;
- Vec3b colors[K];
- for (int i = 0; i < K; i++) {
- colors[i] = Vec3b(dist_img(gen), dist_img(gen), dist_img(gen));
- }
- for (int i = 0; i < img.rows; i++) {
- for (int j = 0; j < img.cols; j++) {
- if (imgSrc.at<uchar>(i, j) == 0) {
- vec.push_back(Point2i(j, i));
- vecClusters.push_back(-1);
- }
- }
- }
- std::uniform_int_distribution<int> dist_vec(0, vec.size());
- int index;
- for (int i = 0; i < K; i++) {
- index = dist_vec(gen);
- centre.push_back(vec.at(index));
- }
- bool updateStatus = true;
- int eq = 0; int min;
- int idxMin;
- while (updateStatus) {
- for (int i = 0; i < img.rows; i++) {
- for (int j = 0; j < img.cols; j++) {
- img.at<Vec3b>(i, j) = Vec3b(255, 255, 255);
- }
- }
- for (int i = 0; i < vec.size(); i++) {
- Point2i currentPoint = vec.at(i);
- min = INT_MAX;
- int idx = 0;
- for (Point2i p : centre) {
- eq = sqrt((p.x - currentPoint.x)*(p.x - currentPoint.x) + (p.y - currentPoint.y)*(p.y - currentPoint.y));
- if (eq < min) {
- min = eq;
- idxMin = i;
- }
- idx++;
- }
- vecClusters[i] = idxMin;
- }
- for (int i = 0; i < vec.size(); i++) {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement