使用java进行直方图均衡化

时间:2015-08-14 17:06:18

标签: java image-processing

我想对RGB图像执行直方图均衡。为此,首先我使用以下步骤生成直方图:

1)将灰度值映射为[0,255]范围内的强度    val = img.getRGB(j,i)&为0xFF;

2)计算与每个强度值(0-255)对应的像素数

3)绘制直方图。

4)执行均衡

5)现在我关心的问题是,映射到对应于均衡直方图的RGB图像。我怎么做?所有都是灰色值。任何解决方案?

1 个答案:

答案 0 :(得分:3)

我用Java做过一次。输入是灰度值缓冲的图像bi。 bi的直方图将被均衡。这是代码。

            int width =bi.getWidth();
            int height =bi.getHeight();
            int anzpixel= width*height;
            int[] histogram = new int[255];
            int[] iarray = new int[1];
            int i =0;

            //read pixel intensities into histogram
            for (int x = 1; x < width; x++) {
                for (int y = 1; y < height; y++) {
                    int valueBefore=bi.getRaster().getPixel(x, y,iarray)[0];
                    histogram[valueBefore]++;
                }
            }

            int sum =0;
         // build a Lookup table LUT containing scale factor
            float[] lut = new float[anzpixel];
            for ( i=0; i < 255; ++i )
            {
                sum += histogram[i];
                lut[i] = sum * 255 / anzpixel;
            }

            // transform image using sum histogram as a Lookup table
            for (int x = 1; x < width; x++) {
                for (int y = 1; y < height; y++) {
                    int valueBefore=bi.getRaster().getPixel(x, y,iarray)[0];
                    int valueAfter= (int) lut[valueBefore];
                    iarray[0]=valueAfter;
                     bi.getRaster().setPixel(x, y, iarray); 
                }
            }