将图像乘以常数而不损失
Multiplying an image by a constant without loss
假设我有一个 uint8 像素值 [23 21 15]。我想将像素乘以 12 以使其更亮。乘以 12 后,该像素的 RGB 值为 [20 252 180]。但是结果确实应该是[276 252 180]。 RGB 最多接受 255,所以 276-256=20 写在那里。显然 20 比 255 和 23 更暗。这不会导致第一个红色通道上的信息丢失吗?将 RGB 值与常数相乘时如何避免这种情况?
你是对的,在溢出时,颜色分量 (r, g, b) 被减少到最低有效字节。这就像您将执行“模 256”操作。
你可以做两件事:
检索所有像素的最大颜色分量值
你想处理,然后以这种方式固定最大乘数,
该产品不超过 255。这将是解决方案
保持整体,无损可逆
使用最小函数:
result = min(255, multiplier * color_component)
这可能会导致图像值失真。这是不可逆的,
因为任何高于 255 的值都将减少到 255。
假设我有一个 uint8 像素值 [23 21 15]。我想将像素乘以 12 以使其更亮。乘以 12 后,该像素的 RGB 值为 [20 252 180]。但是结果确实应该是[276 252 180]。 RGB 最多接受 255,所以 276-256=20 写在那里。显然 20 比 255 和 23 更暗。这不会导致第一个红色通道上的信息丢失吗?将 RGB 值与常数相乘时如何避免这种情况?
你是对的,在溢出时,颜色分量 (r, g, b) 被减少到最低有效字节。这就像您将执行“模 256”操作。
你可以做两件事:
检索所有像素的最大颜色分量值 你想处理,然后以这种方式固定最大乘数, 该产品不超过 255。这将是解决方案 保持整体,无损可逆
使用最小函数:
result = min(255, multiplier * color_component)
这可能会导致图像值失真。这是不可逆的, 因为任何高于 255 的值都将减少到 255。