@Override public int[][] performClustering(float[][] data) { FloatCentroidsResult clusters = this.cluster(data); return new IndexClusters(clusters.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(float[][] data) { FloatCentroidsResult res = this.cluster(data); return new IndexClusters(res.defaultHardAssigner().assign(data)).clusters(); }
final int clustid = result.defaultHardAssigner().assign(vector); map.adjustOrPutValue(clustid, 1, 1);
final int clustid = result.defaultHardAssigner().assign(vector); map.adjustOrPutValue(clustid, 1, 1);
/** * Compute HierarchicalFloatKMeans clustering. * * @param data Data to cluster. * @param K Number of clusters for this node. * @param height Tree height. * * @return a new HierarchicalFloatKMeans node representing a sub-clustering. **/ private Node trainLevel(final float[][] data, int K, int height) { Node node = new Node(); node.children = (height == 1) ? null : new Node[K]; FloatKMeans kmeans = newFloatKMeans(K); node.result = kmeans.cluster(data); HardAssigner<float[], float[], IntFloatPair> assigner = node.result.defaultHardAssigner(); if (height > 1) { int[] ids = assigner.assign(data); for (int k = 0; k < K; k++) { float[][] partition = extractSubset(data, ids, k); int partitionK = Math.min(K, partition.length); node.children[k] = trainLevel(partition, partitionK, height - 1); } } return node; }
@Override public List<? extends PixelSet> segment(final MBFImage image) { final MBFImage input = ColourSpace.convert(image, colourSpace); final float[][] imageData = imageToVector(input); final FloatCentroidsResult result = kmeans.cluster(imageData); final List<PixelSet> out = new ArrayList<PixelSet>(kmeans.getConfiguration().getK()); for (int i = 0; i < kmeans.getConfiguration().getK(); i++) out.add(new PixelSet()); final HardAssigner<float[], ?, ?> assigner = result.defaultHardAssigner(); final int height = image.getHeight(); final int width = image.getWidth(); for (int y = 0, i = 0; y < height; y++) { for (int x = 0; x < width; x++, i++) { final float[] pixel = imageData[i]; final int centroid = assigner.assign(pixel); out.get(centroid).addPixel(x, y); } } return out; } }
@Override public List<? extends PixelSet> segment(final MBFImage image) { final MBFImage input = ColourSpace.convert(image, colourSpace); final float[][] imageData = imageToVector(input); final FloatCentroidsResult result = kmeans.cluster(imageData); final List<PixelSet> out = new ArrayList<PixelSet>(kmeans.getConfiguration().getK()); for (int i = 0; i < kmeans.getConfiguration().getK(); i++) out.add(new PixelSet()); final HardAssigner<float[], ?, ?> assigner = result.defaultHardAssigner(); final int height = image.getHeight(); final int width = image.getWidth(); for (int y = 0, i = 0; y < height; y++) { for (int x = 0; x < width; x++, i++) { final float[] pixel = imageData[i]; final int centroid = assigner.assign(pixel); out.get(centroid).addPixel(x, y); } } return out; } }
final HardAssigner<float[], ?, ?> assigner = result.defaultHardAssigner(); for (int y = 0; y < input.getHeight(); y++) { for (int x = 0; x < input.getWidth(); x++) {
node.result = kmeans.cluster(data); HardAssigner<float[], float[], IntFloatPair> assigner = node.result.defaultHardAssigner();