为什么我们总是要将RGB值除以255?

42

为什么我们总是将RGB值除以255?我知道范围是[0-1]。但为什么只除以255?有人能解释一下RGB值的概念吗?


5
通常情况下有256种颜色值(0-255),但你使用的框架使用了单位RGB值范围0-1。这时,它只是一个简单的代数问题,通过除法可以得到正确的整数RGB在单位比例尺度上的表示。话虽如此,我并不确定这与Objective-C有什么关系。 - CodaFi
1
我认为,如果您将图像除以255,则模型准确性不应有任何差别,但是当您想要使用预训练权重时,它可能会很有用。0-1范围就像一个标准。 - Pavlo Sharhan
6个回答

64

RGB(红色,绿色,蓝色)每个颜色都是8位。
每个单独颜色的范围为0-255(因为2^8 = 256种可能性)。
组合范围为256*256*256。

通过除以255,0-255范围可以用0.0-1.0范围描述,其中0.0表示0(0x00),1.0表示255(0xFF)。


9
“最大的组合范围可能是255255255。”-- 这个陈述不完全正确。24位RGB可以编码256256256种唯一的颜色。 - Brent Bradburn
我们需要将灰度图像和彩色图像的数据都除以相同的255吗? - Dr Nisha Arora

12

这是一个比较通用的问题,因为它可能与平台和方法有关。实际上,它归结为数学和获得0-1之间的值。由于255是最大值,将其除以255可以表示为0-1。

每个通道(红色、绿色和蓝色分别是通道)都是8位,因此它们各自限制为256,在这种情况下是255,因为0也被包括在内。如参考所示,当使用浮点值时,系统通常使用0-1之间的值。

http://en.wikipedia.org/wiki/RGB_color_model

请参阅数字表示。

  

这些范围可以用几种不同的方式来量化:从0到1,任何分数值都可以。这种表现形式通常用于理论分析和使用浮点表示的系统中。每个颜色组件值也可以写成百分比,从0%到100%。在计算机中,组件值通常存储为整数,范围在0到255之间,即单个8位字节可以提供的范围。这些通常表示为十进制或十六进制数字。高端数字图像设备通常能够处理每个主要颜色的更大整数范围,例如0..1023(10位)、0..65535(16位)或甚至更大的范围,通过将24位(三个8位值)扩展为32位、48位或64位单位(与特定计算机的字大小基本独立)。


4
RGB值从0到255是因为它恰好占据了一个字节的数据。一个字节等于8位,每个位代表0或1。这使得8位二进制中的0是:00000000,而255是11111111。最后一位表示值中是否有1。倒数第二位表示值中是否有2。倒数第三位表示值中是否有4,以此类推,每次加倍。如果把所有存在的小值相加,就可以得到总值。例如,
    =10110101
    =1*128 + 0*64 + 1*32 + 1*16 + 0*8 + 1*4 + 0*2 + 1*1
    =128 + 32 + 16 + 4 + 1
    =181

这意味着二进制的10110101等于十进制的181。

4
RGB值通常作为整数存储以节省内存。但在颜色计算时,通常使用浮点数,因为它更容易、更强大和更精确。将浮点数转换为整数的过程称为“量化”,这会丢失精度。
通常,RGB值被编码为8位整数,范围从0到255。行业标准认为0.0f为黑色,1.0f为白色(最大亮度)。要将[0, 255]转换为[0.0f, 1.0f],只需除以255.0f即可。
如果您关心,这是将其转换回整数的公式:(int)floor(x * 255.0f + 0.5f)。但首先,如果需要,请将x夹在[0.0f, 1.0f]之间。

1

使用向量操作可以使操作更简单... 想象一下,你有一张图片,想把它的颜色变成红色。使用向量,你只需要取出每个像素并将其乘以 (1.0, 0.0, 0.0) 即可。

P * (1.0, 0.0, 0.0)

否则它只会增加不必要的步骤(在这种情况下,将其除以255)。
P * (255, 0, 0) / 255

而且想象一下使用更复杂的过滤器,不必要的步骤会堆积起来...


0

鉴于现在每个字节(二进制数字)由8位组成

假设我们有一个像这样填充的字节:

1   0   1   0   0   1   0   1

对于每一位,你有两种可能性:0或1

2 x 2 x 2 x 2 x 2 x 2 x 2 x 2    = 2^8 = 256

总数:256

And for hexadecimal colors :
given that you have 3 couples of characters, dash excluded => ex: #00ff00
0, 1, 2, 3, 4 , 5, 6, 7, 8, 9, a, b, c, d, e, f = 16 possibilities 

16 x 16 = 256

R      V     B   = color
256  x 256 x 256 = 16 777 216 colors)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接