Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. void KMeansClustering() {
  2. Mat imgSrc = imread("points1.bmp", CV_LOAD_IMAGE_GRAYSCALE);
  3.  
  4. // Creating a color image
  5. Mat img(imgSrc.rows, imgSrc.cols, CV_8UC3);
  6.  
  7. std::uniform_int_distribution<int> dist_img(0, 255);
  8. std::default_random_engine gen;
  9. int randInt;
  10.  
  11. vector<Point2i> vec;
  12. vector<int> vecClusters;
  13. vector<Point2i> centre;
  14.  
  15. // Assigning random colors to clusters
  16. const int K = 3;
  17. Vec3b colors[K];
  18. for (int i = 0; i < K; i++) {
  19. colors[i] = Vec3b(dist_img(gen), dist_img(gen), dist_img(gen));
  20. }
  21.  
  22. for (int i = 0; i < img.rows; i++) {
  23. for (int j = 0; j < img.cols; j++) {
  24. if (imgSrc.at<uchar>(i, j) == 0) {
  25. vec.push_back(Point2i(j, i));
  26. vecClusters.push_back(-1);
  27. }
  28. }
  29. }
  30.  
  31. std::uniform_int_distribution<int> dist_vec(0, vec.size());
  32. int index;
  33. for (int i = 0; i < K; i++) {
  34. index = dist_vec(gen);
  35. centre.push_back(vec.at(index));
  36. }
  37.  
  38. bool updateStatus = true;
  39. int eq = 0; int min;
  40. int idxMin;
  41. while (updateStatus) {
  42. for (int i = 0; i < img.rows; i++) {
  43. for (int j = 0; j < img.cols; j++) {
  44. img.at<Vec3b>(i, j) = Vec3b(255, 255, 255);
  45. }
  46. }
  47.  
  48. for (int i = 0; i < vec.size(); i++) {
  49. Point2i currentPoint = vec.at(i);
  50. min = INT_MAX;
  51. int idx = 0;
  52. for (Point2i p : centre) {
  53. eq = sqrt((p.x - currentPoint.x)*(p.x - currentPoint.x) + (p.y - currentPoint.y)*(p.y - currentPoint.y));
  54. if (eq < min) {
  55. min = eq;
  56. idxMin = i;
  57. }
  58. idx++;
  59. }
  60. vecClusters[i] = idxMin;
  61. }
  62.  
  63. for (int i = 0; i < vec.size(); i++) {
  64.  
  65. }
  66. }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement