输出设备
输出设备主要分两种,一种是 显示屏 类的,一种是 打印机 类的。
显示屏也也分为两种:
- 发光二极管(LED)
-
液晶显示屏(LCD)
二者基本都有三部分组成:背光,中间件(二极管或者液晶),屏幕。
至于中间件是通过电流强弱(LED)还是通过偏振大小(LCD)来控制光强的,这并不重要,您只需要知道中间件可以在背光传到屏幕的过程中,改变它的强度即可。
对于二者来说,每一个像素都有三个子像素,分别控制 红、绿、蓝 三种颜色,因为像素足够的小,所以在远处看的时候你看不出来他们实际上是这样的:
或者这样的:
你会以为每个像素都是一个单一的彩色小方块。比如一块屏幕是 1920*1200,那就意味着它的原生分辨率就是水平方向有 1920 个像素,竖直方向是 1200 个像素,一共 2,304,000。注意,每个像素只能发一种颜色的光,所以后面要光栅化的时候,就会出现可能多个图元要挤在一个像素内,或者一个图元要占据好几个像素的情况,处理不好会出现锯齿,图形学要解决的重要问题之一。
打印机不重要,当科普看看~ 分为两种:
- 喷墨式打印机
-
热敏打印机
打印机与显示器不同的是,他需要永久存储在纸上,而显示器只是瞬时的。显示器可控的调节颜色范围,是 0 到 1 的状态,但喷墨式打印机对于一个单元来说,只有喷墨或者不喷墨的选择,也就是只有 0 和 1。热敏打印机通过温度的调节也可以实现 0 到 1 的状态,但需要用热敏打印纸,一般用在收银小票,快递单上。
打印机的分辨率不好确定,因为跟纸的移动速度有关,对热敏打印机这类能打印连续颜色的设备来说,一般的标准是打印头上每英寸多少像素(pixels per inch / ppi)。对于喷墨式这种不能连续的设备来说,一般的标准是每英寸多少个点(dots per inch / dpi)。
输入设备
所有的不是通过电脑计算出来的图像,都需要先用光栅化输入设备获取,一般是 数码相机 和 扫描仪。
如果一个相机的分辨率是 3000*2000,那么一般称他为 600 万像素(6 MP)。可以独立测量红绿蓝的相机要比只有一个马赛克传感器的好(mosaic sensor)。对于扫描仪而已,指标一般跟连续性打印机一样,每英寸多少像素(ppi)。
图像、像素和几何
一个像素是一个采样点,对于数码相机来说,一个像素就是这个格子周围的光的平均,对于输出设备来说也是,这个像素只是代表这一小块方格的平均,比如说,一个屏幕只有一个像素,用它来显示一张图片,只能是纯色,纯色不能代表这张图片,只能代表一个平均值。
确定像素矩阵的坐标是很重要的,约定使用下面的方式:
但是注意这不是共识,有的 API 的 Y 轴正方向是朝下的,有的原点在左上角(这是因为历史原因),有的会将整体移动半个格子。
每个像素内会存储一个灰度值(黑白照片)或者 3 个 RGB 值(彩色照片),需要精度很高的时候,每个值会使用 32 位的浮点数来存储,那么对于一个千万像素的彩色图片来说,需要的存储空间就是 (10000000*3*4/(2^20))MB = 114.44MB。这种使用浮点数存储的具有一个广阔的颜色范围,我们称之为 高动态范围(high dynamic range / HDR);相对的是 固定范围 和 低动态范围(low dynamic range / LDR),比如使用 8 bit 存储的,那么它的范围只有 0-255。介绍一下常用设备的存储格式:(固定范围就是指有固定的数量的,0-255 这种,相对来说,浮点数就不能说有几个值)
- 1bit,纯黑白,不需要中间灰度的图像;
- 8-bit RGB 固定范围图像(每一个像素是 24bits),网页和电子邮件等;
- 8 到 10 bit RGB 固定范围图像(每一个像素是 24 到 30bits),计算机显示器的数字接口;
- 12 到 14 bit RGB 固定范围图像(36-42bits / 像素),专业数码相机的原始图片(Raw 格式);
- 16-bit RGB 固定范围图像(46bits / 像素),专业相机,印刷格式,图像处理中间格式;
- 16-bit 固定范围灰度图(16bits / 像素),放射和医学影像图;
- 16-bit 浮点 RGB,称为半精度 HDR 图像(32位浮点数的一半),实时渲染的中间格式;
-
32-bit 浮点 RGB,用于软件渲染和处理 HDR 图像的通用中间格式。
由高位数的图像转换成低位数的时候可能会出现问题,比如摩尔纹之类的。
显示器强度和伽马值
我们把显示器关闭当成 0,把显示器打开当成 1,中间 0.5 是灰色。需要明确一点,显示器对于输入的数值和显示出的强度并不是线性对应的,比如说,分别输入 0,0.5,1,那么显示器输出的强度有可能是 0,0.25,1。对于这种非线性,显示器通常会有一个伽马值来表述。公示为:
输出强度 = 最大强度*(输入值^伽马值)
比如说,输入值为 0.5,伽马值为 2,那么输出强度为最大强度的 1/4。输入强度为 0 的时候就是 0,1 的时候就是最大强度。可以通过一些方法来确定某块屏幕的伽马值,我们假设已经知道了。这样就可以对输入进行 伽马校正,也就是使得输入值为 0.5 时,输出强度也恰好是黑与白的一半。也就是把输入和输出变成一个近似线性的对应关系。
另一个需要注意的是,屏幕的显示颜色范围都是固定大小的,一般是 0-255,也就是 8-bit 的存储器。
RGB 颜色
RGB 是加色模式,全部混合是白色,可以理解为是光;青品黄是减色模式,全部混合是黑色,可以理解为是颜料;我们不需要关心青品黄。一般都是 24-bit 的颜色系统,也就是 8bit * 3,每个分量有 255 个等级。
透明混合
对于不透明的物体,前景会直接覆盖后景;对于半透明的物体,一般会将前景和后景进行混合,一般描述一个颜色都是 RGBA,这里的 A 是指 α,指的就是与后景的混合程度。公式为:
新的颜色 = α*前景色 + (1-α)*后景色
可以看出 0 的时候全部都是后景色,1 的时候全部都是前景色。
(注意并不只有这一种混合模式,你看 ps 里面图层的叠加方式,正常/正片叠底/线性减淡之类的)
图像存储
大部分图像都是使用 8-bit 来存储每个通道,这样的话一个 100 万像素的图片大概就是 3M 左右。为了降低存储空间,有时会将图片进行压缩,有的压缩是有损压缩,不可逆的,有的是无损压缩。常见的图像存储格式有:
- .jpeg,是有损压缩格式,根据人类视觉系统中的阈值压缩图像。这种格式适用于自然图像。
- .tiff,最常用于保存二进制图像或无损压缩的 8-bit 或 16-bit RGB。
- .ppm,非常简单的无损、未压缩格式,通常用于 8-bit RGB 图像。
- .png,这是一套有着优秀的开源管理工具的无损压缩格式。