public static PointCloud rasterToPointCloud(Raster r, int dimx, int dimy, int dim) {
   PointCloud res = null;
   for (int j = 0; j < dimy; j++)
     for (int i = 0; i < dimx; i++) {
       int[] pix = new int[3];
       r.getPixel(i, j, pix);
       //      		System.out.println("pix = [" + pix[0] + " " + pix[1] + " "
       //     				   + pix[2] + "]");
       // convert pixel to L*u*v*
       float[] pixluv = new float[3];
       ImageManipulation.rgb2luv(pix[0], pix[1], pix[2], pixluv);
       double[] coord;
       if (dim == 3) {
         coord = new double[3];
         coord[0] = pixluv[0];
         coord[1] = pixluv[1];
         coord[2] = pixluv[2];
       } else if (dim == 5) {
         coord = new double[5];
         coord[0] = (double) i;
         coord[1] = (double) j;
         coord[2] = pixluv[0];
         coord[3] = pixluv[1];
         coord[4] = pixluv[2];
       } else throw new RuntimeException("Bad dimension!");
       res = new PointCloud(new Point_D(coord), res, true);
     }
   return res;
 }
 static void assignColors(int n, Point_D[] clusterCenters, Color[] cols) {
   // In this version, assign the center's color to each cluster
   for (int i = 0; i < n && clusterCenters[i] != null; i++) {
     int dim = clusterCenters[i].dimension();
     float[] pixluv = {
       (float) clusterCenters[i].getCartesian(dim - 3).doubleValue(),
       (float) clusterCenters[i].getCartesian(dim - 2).doubleValue(),
       (float) clusterCenters[i].getCartesian(dim - 1).doubleValue()
     };
     int[] pix = ImageManipulation.luv2rgb(pixluv[0], pixluv[1], pixluv[2]);
     cols[i] = new Color(pix[0], pix[1], pix[2]);
   }
 }
  public static void testLoadingImage(String[] args) {
    System.out.println("Loading image data: ex 0");
    if (args.length < 1) {
      System.out.println("Usage: java ImageManipulation image");
      System.exit(0);
    }
    // load input image
    BufferedImage bimg = ImageManipulation.loadImage(args[0]);
    int dimx = bimg.getWidth();
    int dimy = bimg.getHeight();
    // get array of pixels from image, in L*u*v* space
    WritableRaster raster = bimg.getRaster();
    System.out.println("Pixels array created from image");

    // build point cloud from raster
    int dim = 3;
    PointCloud N = ImageManipulation.rasterToPointCloud(raster, dimx, dimy, dim);

    // draw input image and corresponding point cloud
    System.out.println("dim = " + dim + ", size = " + PointCloud.size(N));
    Draw.draw3D(N);
    Fenetre fInput = new Fenetre(bimg, "input image");
  }