private Point multipleClustersCenterCoordinates(int clusters[],int start,int end,int width,
										double limit,int grayPixels[],int x0,int y0,int fWidth) {
		long centerX[]  = new long[nClusters + 2];
	    long centerY[]  = new long[nClusters + 2];
	    long colors[]   = new long[nClusters + 2];
	    int nrPoints[]  = new int[nClusters + 2];
	    int indecies[]  = new int[nLabels + 2];
	    int index = 0;
	    int clusterArea;
	    int darkestPixel = 256;
	    int darkestX = 0;
	    int darkestY = 0;
	    int clusterCenterX, clusterCenterY;
	    double distance = 0;
	    double max = Double.NEGATIVE_INFINITY;
	    double ratio;
	    
	    for (int i = 1; clusters[i] != Integer.MAX_VALUE; i++) {
	    	indecies[clusters[i]] = i;
	    }
	    
	    for (int y = start; y < end; y++) {
	    	for (int x = 0; x < width; x++) {
	    		if (clustersPoints[x][y] != 0) {
	    			index = indecies[labels[clustersPoints[x][y]]];
	    			centerX[index] += x;
	    			centerY[index] += y;
	    			nrPoints[index]++;
	    			int pixelColor = grayPixels[ (y + y0) * fWidth + (x + x0)];
	    			colors[index] += pixelColor;
	    			if (pixelColor < darkestPixel) {
	    				darkestPixel = pixelColor;
	    				darkestX = x;
	    				darkestY = y;
	    			}
	    		}
	    	}
	    }
	    
	    index = Integer.MIN_VALUE;
	    for (int i = 1; clusters[i] != Integer.MAX_VALUE; i++) {
	    	clusterArea = nrPoints[indecies[clusters[i]]];
	    	if (clusterArea > (double) limit / 2d) {
	    		clusterCenterX = (int) (centerX[indecies[clusters[i]]] / 
	    								nrPoints[indecies[clusters[i]]]);
	    		clusterCenterY = (int) (centerY[indecies[clusters[i]]] / 
	    								nrPoints[indecies[clusters[i]]]);
	    		
	    		distance = Math.sqrt(Math.pow( (clusterCenterX - darkestX), 2) + 
	    				             Math.pow( (clusterCenterY - darkestY), 2));
	    		/* look for the largest,darkest,and closest to the darkest pixel, cluster */
	    		ratio = clusterArea / (colors[indecies[clusters[i]]] * distance); 
	    		if (ratio > max) {
	    			max = ratio;
	    			index = indecies[clusters[i]];
	    		}
	    	}
	    }
	    if (index != Integer.MIN_VALUE) {
	    	Point center = new Point((int) (centerX[index] / nrPoints[index]),
                    				 (int) (centerY[index] / nrPoints[index]));
	    	return center;
	    } else {
	    	return null;
	    }
	}