gpt4 book ai didi

java - 使用查找表对图像进行直方图均衡

转载 作者:太空宇宙 更新时间:2023-11-04 11:00:33 26 4
gpt4 key购买 nike

我正在尝试在 Java 中对灰度图像进行直方图均衡。描述如下:使用每个像素的 RGB 的一个波段作为查找表的索引来迭代图像,以确定图像的新像素值。将每个像素的RGB设置为新像素值对应的RGB。

实现这个我得到一个蓝色的图像:

[已删除]

(预期结果)

[已删除]

这是我到目前为止的代码:

private void histogramEqualize(BufferedImage im, int[] lut) {
for (int x = 0; x < im.getWidth(); x++) {
for (int y = 0; y < im.getHeight(); y++) {
Color c = new Color(im.getRGB(x, y));
Color eq = new Color(lut[c.getRed()], c.getGreen(), c.getBlue());
im1.setRGB(x, y, eq.getRGB());
}
}
}

public int[] getLookupTable(int[] h, int n) {
// h: Histogram for im1 in either the red band or luminance.
lut = new int[256];
double sf = 255/n;
int sumH = 0;
int sk = 0;
for(int i=0; i<h.length; i++) {
sumH += h[i];
sk = (int)(sf*sumH);
lut[i] = sk;
}
return lut;
}

我还尝试将 Color eq = new Color(lut[c.getRed()], c.getGreen(), c.getBlue()); 更改为 Color eq = new Color(lut[c.getRed()], lut[c.getGreen()], lut[c.getBlue()]); 但这导致了黑色图像。

最佳答案

您提到您想要在灰度图像上应用直方图均衡化,但您正在使用像素的 RGB 颜色值。

对于灰度图像,您可以仅标准化图像中的灰度级别以进行直方图均衡,如下所示:

1)迭代每个灰度级像素值,并通过计算每个灰度级在图像中出现的次数来生成每个灰度级的直方图数据。

2)求上述直方图的累积分布。

3) 迭代原始图像中的每个灰度像素值,并使用以下公式将其值替换为其相应的归一化值。 histogram equalization formula

 where L=255, that is total gray scale levels,
M = Image height,
N = Image width,
MxN to get total number of pixels in image.
cdfmin = min value of cumulative distribution data in step 2.

这将为您提供新的标准化图像矩阵。

如果您想在 RGB 图像上应用直方图均衡,则需要将 RGB 颜色空间转换为 HSV 颜色空间,并在值 channel 上应用与灰度图像相同的步骤,而不更改其色调和饱和度值。

关于java - 使用查找表对图像进行直方图均衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46945687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com