public PixelInfo(
            final int radius, final BufferedImage image, final int x0, final int y0, final int width, final int height) {

        final int[] redHistogram = new int[VALUE_LIMIT];
        final int[] greenHistogram = new int[VALUE_LIMIT];
        final int[] blueHistogram = new int[VALUE_LIMIT];

        final Random random = new Random();

        for (int x = x0 - radius, xMax = x0 + radius; x <= xMax; ++x) {
            for (int y = y0 - radius, yMax = y0 + radius; y <= yMax; ++y) {
                if ((0 <= x) && (x < width) && (0 <= y) && (y < height)) {
                    if ((square(x - x0) + square(y - y0)) <= square(random.nextInt(radius))) {
                        final int rgb = image.getRGB(x, y);
                        redHistogram[Rgb.red(rgb)] += 1;
                        greenHistogram[Rgb.green(rgb)] += 1;
                        blueHistogram[Rgb.blue(rgb)] += 1;
                    }
                }
            }
        }

        final int rgb0 = image.getRGB(x0, y0);
        red = new Component(Rgb.red(rgb0), redHistogram);
        green = new Component(Rgb.green(rgb0), greenHistogram);
        blue = new Component(Rgb.blue(rgb0), blueHistogram);
    }