【问题标题】:Histogram equalization using java使用java的直方图均衡化
【发布时间】:2015-11-08 00:26:12
【问题描述】:

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

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

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

3)绘制直方图。

4)执行均衡

5)现在我关心的问题是,映射到均衡直方图对应的RGB图像。我怎么做?都是灰度值。有什么办法吗?

【问题讨论】:

  • 您能否向我们展示您迄今为止编写的任何代码,这些代码涉及您完成的步骤?此外,如果您将 RGB 值的每个组合用作直方图中的单个 bin,您将无法将此直方图存储在内存中,因为您将需要一个 256^3 x 64 字节数组(假设为整数),不幸的是,这也是有任何歧视性的权力都很好。最好在计算直方图之前量化 bin。

标签: java image-processing


【解决方案1】:

我在 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); 
                }
            }

【讨论】:

  • 仔细阅读问题。输入图像是 RGB 而非灰度。
  • 但我想要彩色图像而不是灰度图像
  • 典型的做法是将RGB转换为另一种颜色空间,如HSV,然后仅对亮度通道V应用上述算法。
  • 对于“使用总和直方图作为查找表来转换图像”阶段没有对i 变量的定义和增量做任何事情。
  • 你打错了:不应该是“float[] lut = new float[256]”而不是“float[] lut = new float[anzpixel]”吗? lut 永远不会被索引 > 255 访问,在某些边缘情况下 histo 可能会产生越界,因为直方图的大小为 255,而不是 256
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
相关资源
最近更新 更多