使用java直方图均衡
我想为RGB图像执行直方图均衡。 为此,我首先使用以下步骤生成直方图:
1)通过将灰度值作为val = img.getRGB(j,i)&0xFF;映射范围[0,255]中的强度;
2)对与每个强度值(0-255)对应的像素数进行计数,
3)绘制直方图。
4)执行均衡
5)现在我关心的问题是,映射到对应于均衡直方图的RGB图像。 我怎么做? 都是灰色的。任何解决方案?
我曾经用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);
}
}
链接地址: http://www.djcxy.com/p/89773.html