gpt4 book ai didi

java - 如何将 Java 颜色转换从 RGB 反转为 CIEXYZ/CIELAB

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

我的最终目标是将 RGB 转换为 CIELAB,进行一些颜色平均,然后再转换回来。所以我的假设是,如果由于运行时环境而只有单一颜色输入,即没有平均,那么变换输出应该与 RGB 输入完全相同,但事实并非如此。

CIELAB 色彩空间使用 CIEXYZ 色彩空间(它是 JDK 的一部分)的中间转换。该变换似乎是不可逆的或有损的?它是否正确?还是我的假设或实现有问题?我应该使用另一种方法来处理这些颜色吗?

测试并输出如下。为什么 rgb 和 rgb2 颜色不同?

private static final ColorSpace CIEXYZ =ColorSpace.getInstance(ColorSpace.CS_CIEXYZ);    
@Test
public void testCiexyz() {
float[] rgb = new float[] {0.15686275f, 0.2f, 0.20784314f};
LOGGER.debug("rbg: {}",rgb);
float[] xyz = CIEXYZ.fromRGB(rgb);
LOGGER.debug("xyz: {}",xyz);
float[] rgb2 = CIEXYZ.toRGB(xyz);
LOGGER.debug("rbg2: {}",rgb2);
}

输出

    09:46:59.762 [main] DEBUG org.phomos.sampler.ColorTest - rbg: [0.15686275, 0.2, 0.20784314]
09:46:59.875 [main] DEBUG org.phomos.sampler.ColorTest - xyz: [0.02709961, 0.030670166, 0.0289917]
09:46:59.911 [main] DEBUG org.phomos.sampler.ColorTest - rbg2: [0.12155337, 0.1400473, 0.1430228]

最佳答案

我终于找到了下面的Java类...

https://imagej.nih.gov/ij/plugins/download/Color_Space_Converter.java

内部类 ColorSpaceConverter 具有颜色空间转换,所有这些转换在数学上都是可逆的。我砍掉了外部类,因为它是一些我不需要的整体 GUI 应用程序的一部分。

我长期以来对 CIEXYZ 和 CIELAB 色彩空间有所了解,但仍然无法解释为什么标准 JDK 类不能正常工作。不管怎样,上面的代码都是有效的!

关于java - 如何将 Java 颜色转换从 RGB 反转为 CIEXYZ/CIELAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52970943/

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