gpt4 book ai didi

java - Java中的颜色算法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:06 24 4
gpt4 key购买 nike

我试图对一些 Landsat 图像进行着色,在网上寻找图像融合算法时,我发现了一个我特别感兴趣的算法,我正在尝试实现它。我已经实现了 3 种算法,它们都很好,但我似乎无法让这个算法起作用。

我有以下代码:

int red1 = ((redImage.getRGB(x, y)>>> 16) & 0xFF);
int green1 = ((greenImage.getRGB(x, y)>>> 8) & 0xFF);
int blue1 = ((blueImage.getRGB(x, y)) & 0xFF);

分别获取红、绿、蓝图像的红、绿、蓝值。我还有以下代码:

int pan1 = ((panImage.getRGB(x, y)>>> 16) & 0xFF);
int pan2 = ((panImage.getRGB(x, y)>>> 8) & 0xFF);
int pan3 = ((panImage.getRGB(x, y)) & 0xFF);

此代码检索单个全色图像的红色、绿色和蓝色值。这与问题无关,但值得概述以防万一。

我一直在研究的算法相当简单,它说该算法是每个多光谱波段与全色图像的简单相乘。听起来很简单,所以我继续执行以下操作:

int red = red1 * pan1;
int green = green1 * pan2;
int blue = blue1 * pan3;

int rgb = ((red << 16) | (green << 8) | blue);

colouredImage.setRGB(x, y, (rgb | 0xFF000000));

生成的图像看起来好像有一些严重的噪声,即到处都是紫色和绿色的 Blob ,这使得图像非常无用。我不知道如何附加图像,但它基本上到处都是随机颜色,这对我来说没有意义。

所以我认为我将它们相乘的颜色算法有问题,是不是 Alpha channel 发生了什么导致这些随机颜色?

非常感谢任何帮助。

最佳答案

这看起来像是一个简单的溢出问题。当您将 red1 * pan1 相乘时,它会超过允许的 0 ... 255 范围。

有几种方法可以避免这种情况:

乘法前转换为[0...1]范围

您可以将颜色值转换为 0.0 ... 1.0 之间的浮点类型。这样乘法的结果就会保持在正确的范围内。请记住在完成后将结果转换回 0 ... 255 范围。

或者

乘积除以 255

在我看来,这是更清洁的方法。将结果简单地除以255。您可以使用整数除法,不需要进行 float 转换。很抱歉没有在我原来的回答中提到这一点,我的大脑没有正常工作。

int red = (red1 * pan1) / 255;
// same for other colors

关于java - Java中的颜色算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22017879/

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