gpt4 book ai didi

使过亮(HDR)颜色变为白色的算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:23 29 4
gpt4 key购买 nike

您知道如果图像足够亮或曝光过度,每种颜色最终会变成白色吗?我正在尝试找出一个函数来执行此操作,以逼真且令人愉悦的方式应用于生成的 HDR 图像(我猜是使用理想化的相机性能作为引用)。

我想要获得的算法/函数应该解决的问题是,假设您有一个橙色像素(线性 RGB)值 {1.0, 0.2, 0.0}。如果您将每个值乘以 1.0 或更小的系数,一切都很好,但假设您将该像素乘以 6,现在您得到 {6.0, 1.2, 0.0},您如何处理超出范围的红色和绿色值6.0 和 1.2?你可以剪辑它们,这会给你 {1.0, 1.0, 0.0},遗憾的是 Photoshop 和 3DS Max 似乎是这样做的,但它看起来非常错误,因为现在你以前的橙色像素是黄色的(所以如果你从任何饱和的开始色调(意味着至少一个 channel 是 0.0)你总是以洋红色、黄色或青色结束)并且它永远不会变成白色。

我考虑过将一个 channel 的一半多余部分平分给其他 channel ,例如 {1.6, 0.5, 0.1} 会变成 {1.0, 0.8, 0.4} 但它过于简单而且不太现实。我强烈怀疑一个可接受的解决方案可能会接近这个微不足道的地方。

我敢肯定肯定已经对这个主题进行了研究,但我找不到任何相关文献,而且感光测量法似乎也不是我要找的东西。

最佳答案

修改我留在 answer on another question 中的 Python 代码在 [0.0-1.0] 范围内工作:

def redistribute_rgb(r, g, b):
threshold = 1.0
m = max(r, g, b)
if m <= threshold:
return r, g, b
total = r + g + b
if total >= 3 * threshold:
return threshold, threshold, threshold
x = (3 * threshold - total) / (3 * m - total)
gray = threshold - x * m
return gray + x * r, gray + x * g, gray + x * b

这应该会在线性或 Gamma 校正颜色空间中返回可接受的结果,尽管线性会更好。

将每个 r、g、b 值乘以相同的量会保留它们的原始比例,从而保留色调,直至 x=0 并且您获得了白色。一旦裁剪开始,您已经表达了对非线性响应的兴趣,但我不完全确定如何在其中进行计算。数学是经过精心选择的,因此至少有一个返回值将处于阈值,并且没有会在上面。

在您的 (1.6, 0.5, 0.1) 示例上运行此代码返回 (1.0, 0.6615, 0.5385)

关于使过亮(HDR)颜色变为白色的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16154269/

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