40     clusters  = cv::Mat_<int>(image.cols,image.rows,-1);
 
   41     distances = cv::Mat_<double>(image.cols,image.rows,DBL_MAX);
 
   48             cv::Vec3b colour = image.at<cv::Vec3b>(
nc.y, 
nc.x);
 
   51             Vec5d center(colour[0], colour[1], colour[2], 
nc.x, 
nc.y);
 
   69     double dc = 
sqrt(pow(cen[0] - colour[0], 2) + pow(cen[1]
 
   70             - colour[1], 2) + pow(cen[2] - colour[2], 2));
 
   71     double ds = 
sqrt(pow(cen[3] - pixel.x, 2) + pow(cen[4] - pixel.y, 2));
 
   73     return sqrt(pow(
dc / 
nc, 2) + pow(ds / 
ns, 2));
 
   87     double min_grad = DBL_MAX;
 
   88     cv::Point loc_min(center.x, center.y);
 
   90     for (
int i = center.x-1; 
i < center.x+2; 
i++) {
 
   91         for (
int j = center.y-1; j < center.y+2; j++) {
 
   92             cv::Vec3b c1 = image(j+1, 
i);
 
   93             cv::Vec3b c2 = image(j, 
i+1);
 
   94             cv::Vec3b c3 = image(j, 
i);
 
  105             if (
sqrt(pow(i1 - i3, 2)) + 
sqrt(pow(i2 - i3,2)) < min_grad) {
 
  106                 min_grad = fabs(i1 - i3) + fabs(i2 - i3);
 
  129     cv::Mat_<cv::Vec3b> image(
img);
 
  140         for (
int j = 0; j < 
centers.rows; j++) {
 
  146                     if (
k >= 0 && k < image.cols && l >= 0 && 
l < image.rows) {
 
  147                         cv::Vec3b colour = image(
l, 
k);
 
  162         for (
int j = 0; j < 
centers.rows; j++) {
 
  168         for (
int j = 0; j < image.cols; j++) {
 
  169             for (
int k = 0; 
k < image.rows; 
k++) {
 
  173                     cv::Vec3b colour = image(
k, j);                    
 
  174                     centers(c_id) += 
Vec5d(colour[0], colour[1], colour[2], j, 
k);                    
 
  181         for (
int j = 0; j < 
centers.rows; j++) {
 
  196     int label = 0, adjlabel = 0;
 
  197     const int lims = (image.cols * image.rows) / (
centers.rows);
 
  199     const int dx4[4] = {-1,  0,  1,  0};
 
  200         const int dy4[4] = { 0, -1,  0,  1};
 
  203     cv::Mat_<int> new_clusters(image.cols,image.rows,-1);
 
  205     for (
int i = 0; 
i < image.cols; 
i++) {
 
  206         for (
int j = 0; j < image.rows; j++) {
 
  207             if (new_clusters(
i,j) == -1) {
 
  209                 elements.push_back(cv::Point(
i, j));
 
  212                 for (
int k = 0; 
k < 4; 
k++) {
 
  213                     int x = elements[0].x + dx4[
k], y = elements[0].y + dy4[
k];
 
  215                     if (
x >= 0 && x < image.cols && y >= 0 && y < image.rows) {
 
  216                         if (new_clusters(
x,y) >= 0) {
 
  217                             adjlabel = new_clusters(
x,y);
 
  223                 for (
int c = 0; c < 
count; c++) {
 
  224                     for (
int k = 0; 
k < 4; 
k++) {
 
  225                         int x = elements[c].x + dx4[
k], y = elements[c].y + dy4[
k];
 
  227                         if (
x >= 0 && x < image.cols && y >= 0 && y < image.rows) {
 
  229                                 elements.push_back(cv::Point(
x, y));
 
  230                                 new_clusters(
x,y) = 
label;
 
  239                 if (count <= lims >> 2) {
 
  240                     for (
int c = 0; c < 
count; c++) {
 
  241                         new_clusters(elements[c].
x, elements[c].y) = adjlabel;
 
  271     const int dx8[8] = {-1, -1,  0,  1, 1, 1, 0, -1};
 
  272         const int dy8[8] = { 0, -1, -1, -1, 0, 1, 1,  1};
 
  277     cv::Mat_<uchar> istaken(image.cols, image.rows, uchar(0));
 
  280     for (
int i = 0; 
i < image.cols; 
i++) {
 
  281         for (
int j = 0; j < image.rows; j++) {
 
  285             for (
int k = 0; 
k < 8; 
k++) {
 
  286                 int x = 
i + dx8[
k], y = j + dy8[
k];
 
  288                 if (
x >= 0 && x < image.cols && y >= 0 && y < image.rows) {
 
  297                 contours.push_back(cv::Point(
i,j));
 
  304     for (
int i = 0; 
i < (
int)contours.
size(); 
i++) {
 
  305         image.at<cv::Vec3b>(contours[
i].y, contours[
i].x) = colour;
 
  319     for (
size_t i = 0; 
i < colours.
size(); 
i++) {
 
  320       colours[
i] = cv::Vec3i(0, 0, 0);
 
  323     for (
int i = 0; 
i < image.cols; 
i++) {
 
  324         for (
int j = 0; j < image.rows; j++) {
 
  329             cv::Vec3b c = image.at<cv::Vec3b>(j, 
i);
 
  330             colours[
index][0] += (c[0]);
 
  331             colours[
index][1] += (c[1]);
 
  332             colours[
index][2] += (c[2]);
 
  337     for (
int i = 0; 
i < (
int)colours.
size(); 
i++) {
 
  342     for (
int i = 0; 
i < image.cols; 
i++) {
 
  343         for (
int j = 0; j < image.rows; j++) {
 
  345             image.at<cv::Vec3b>(j, 
i) = cv::Vec3b(c[0], c[1], c[2]);