8bit、12bit、16bit图像数据

    注:以下信息摘自各个网页和论坛。只是做一个综合。谢谢前辈们的分享。

一、

    若R、G、B每种颜色使用一个字节(8bit)表示,每幅图像可以有1670万种颜色;若R、G、B每种颜色使用两个字节(16bit)表示,每幅图像可以有10的12次方种颜色;如果是灰度图像,每个象素用一个字节(8bit)表示,一幅图像可以有256级灰度;若每个象素用两个字节(16bit)表示,一幅图像可以有65536级灰度。

    理论上说,16bit的图像,灰度级数和颜色比8bit的好得多,但是,还得看你的印刷硬件是否支持那么多灰度级数和颜色的印刷。如果在普通显示器上观看,两者并没有什么差别。

二、

色彩深度

  色彩深度(Depth of Color),色彩深度又叫色彩位数。视频画面中红、绿、蓝三个颜色通道中每种颜色为N位,总的色彩位数则为3N,色彩深度也就是视频设备所能辨析的色彩范围。目前有18bit、24bit、30bit、36bit、42bit和48bit位等多种。24位色被称为真彩色,R、G、B各8bit,常说的8bit,色彩总数为1670万,如诺基亚手机参数,多少万色素就这个概念。
灰阶
  什么又是灰阶呢?通常来说,液晶屏幕上人们肉眼所见的一个点,即一个像素,它是由红、绿、蓝(RGB)三原色组成的。每一个基色,其背后的光源都可以显现出不同的亮度级别。而灰阶代表了由最暗到最亮之间不同亮度的层次级别。把三基色每一个颜色从纯色(如纯红)不断变暗到黑的过程中的变化级别划分成为色彩的灰阶,并用数字表示,就是最常见的色彩存储原理。这中间层级越多,所能够呈现的画面效果也就越细腻。以8bit 为例,我们就称之为256灰阶。
8bit 10bit 12bit 14bit 16bit
    在数字信息存贮中,计算设备用2进制数来表示,每个0或1就是一个位(bit)。 假设1代表黑、0代表白,在黑白双色系统中最少有2bit。单基色为nbit,画面位数就为2 ⁿbit,位数越大,灰度越多,颜色也越多,彩色系统中同理。视频画面10bit含义就是画面能以10为二进制数的数量控制色彩层次(即灰阶)。通常8bit相当于256级灰阶——即常说得24位真彩色;而10bit就相当于1024级灰阶。三基色混合成彩色,增加1 bit就意味色彩数增加8倍。10bit就相当于1024的三次方——1073741824,约为10.7亿色。远大于8bit的1670万色。
三、
        选择一个极端的例子,找个蓝天占据大部分画面的例子。Raw在CS调整完后,存储Tiff,下面有位数选择,8bit/16bit,各选一次,分开两个文件。各自打开,然后调整,色阶,把暗部和高光压缩尽量小的可见范围。调完相同的参数,大家再看看各自的直方图,注意蓝天部分的区别。。
       有人就说了,我们讨论的是12bit和14bit,你讨论8bit和16bit,这靠谱吗?
       这个例子是说明色深位数的区别。8-12-14-16的区别就在连续性和宽容度上。靠不靠谱自己琢磨吧。不要再说这个是数字游戏了,这个bit不是这么傻瓜地自动把你的文件增大,是件很靠谱的事情。
四、
       14bit意义重大。
       将RAW转换为JPG时,14bit比12bit有更大的“裁剪空间”。大家都知道像素数多便于几何裁剪,同样的,灰度级多便于“灰度裁剪”。



### 16图像与8位图像的区别 #### 解析度差异 解析度指的是图像中像素的数量,它决定了图像的清晰程度。然而,在此上下文中提到的“16位”和“8位”,并不是指图像尺寸上的解析度,而是色彩深度。因此,对于相同大小的图片而言,16图像和8位图像在物理分辨率上是没有区别的。 #### 色彩深度对比 - **8位图像** - 每个像素由8比特表示,意味着总共有\(2^8=256\)种可能的颜色值。 - 当应用于灰阶模式时,则是从纯黑到纯白之间的256级灰色变化;如果是RGB模型下的索引色,则整个画面可显示的最大不同颜色数量为256种[^1]。 - **16图像** - 如果是针对每个颜色通道(红、绿、蓝),那么每种颜色都拥有16比特的数据量,也就是\(2^{16}=65,536\)级别的亮度级别。 - 对于真彩色情况来说,三个主要颜色分量各占16比特的话,总的色彩表达能力会达到惊人的数亿种以上,远超人类视觉所能分辨的程度[^2]。 实际上,当说到16图像时,有时也特指某些特定类型的文件格式,比如PNG16所描述的情况——尽管这个说法并不严格准确,因为真正的16位PNG更常见的是指每个颜色组件分配了16比特精度而不是整体只有16比特用于全部颜色信息存储。 ```python import numpy as np from PIL import Image # 创建一个简单的例子来展示两者的区别 def create_image(mode='L', size=(100, 100)): """创建指定mode(模式)和size(大小)的测试图像""" if mode == 'I;16': # 16-bit image img_array = np.random.randint(0, high=65535, size=size[::-1], dtype=np.uint16) elif mode == 'L': # 8-bit grayscale or palette-based color images img_array = np.random.randint(0, high=256, size=size[::-1], dtype=np.uint8) return Image.fromarray(img_array).convert('RGB') create_image('I;16').show() # 显示16-bit图像 create_image().show() # 默认情况下创建并显示8-bit图像 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值