本篇隶属于文集:《零基础入门音视频开发》,查看文集全部文章,请点击文字链接。
想看最新文章,可以直接关注微信公众号:金架构
这篇文章会按照下面这个路线图进行介绍,阅读本文需要三分钟,详细阅读本文需要半小时。
本文路线流程图最后一项,伽马矫正、JPEG压缩编码和文件格式,只做粗略的理论介绍。因为伽马矫正和压缩编码,需要在实际应用,并且结合其他知识来理解,所以在后面会单开几篇。
1、颜色是啥和我们为什么能看到它
颜色是啥,它其实是我们的视觉系统,对可见光的一种感知。如果我们是瞎子,那人类肯定不会发现还有颜色这种神奇的东西。光透过我们的眼睛,传入我们的大脑,就像照相机咔嚓一声,将一幅图片记录到内存卡。
早在之前,人类就发现光是一种电磁波,而人类并不能看见所有的电磁波,因此把能看见的电磁波,定为可见光。它的波长在380和780nm之间,
我们在自然界看到的大多数光,都不是一种波长的光,它是由许许多多,不同波长的光组合而成,因此我们才能看到这么多颜色。
就像我们看到的太阳光,它也是由多种不同颜色的光组合而成。我们小时候都玩过镜子,用一面镜子,来折射太阳光线到水里,光线再通过水折射到墙上,就出现了彩虹。而牛顿,很早的时候就用棱镜演示了这个事实:白光包含所有可见光谱的波长。
光谱色在人的视网膜中,有三种对红绿蓝敏感程度不同的椎体细胞,视网膜通过神经元感知外部世界的颜色,而每个神经元,是一个对颜色敏感的椎体。红绿蓝三种椎体细胞,对不同频率的光的感知不同,对不同亮度的感知程度也不同。所以后来人们在数字化图像的时候,面对巨大的数据量,就可以使用压缩编码技术,来降低图像的数据量,而使人眼感觉不到图像质量的下降。
2、图像的颜色模型
2.1 RGB相加混色模型
一个能发出光波的物体称为有源物体,它的颜色,由该物体发出的光波决定。就像彩色CRT一样,三个电子枪分别产生R、G、B三种波长的光,并以各种不同的相对强度组合产生不同的颜色。
因为R、G、B颜色模型是用三种光叠加,来产生特定的颜色,所以这种方法又称为RGB相加混色模型。
在自然界中,任何一种颜色,都可以用R、G、B这三种颜色值之和来确定,在数学书,它们构成一个三维的RGB矢量空间。所以只要R、G、B的数值不同,混合得到的颜色就不同,也就是光波的波长不同。
颜色 = R(红的百分比)+ G(绿的百分比)+ B(蓝的百分比)
相加混色产生颜色
2.2 彩色图像
在栅格图像下,一幅彩色图像,可以看成由许多点组成。每个点称为一个像素,每个像素都有一个值,它表示特定颜色的强度。一个像素值通常由R、G、B三个分量表示。如果每个像素的每个颜色分量用“1”和“0”表示,即每种颜色的强度是100%或0%,那么每个像素所呈现的颜色,就会是8种(2的三次方)颜色之一。
栅格图像2.3 CMY相减混色模型
一个不发光波的物体,称为无源物体,它的颜色,由物体吸收或者反射那些光波决定。就像我们看见树叶是绿色的,是因为阳光照在树叶上,其他的可见光被吸收,绿光被反射,所以我们才看得见。如果半夜去,能看见我服你!
当我们画水彩的时候,我们将颜料进行混合,绘制的图画,也是一种无源物体。
使用C(青色cyan)、M(品红magenta)、Y(黄色yellow)按一定比例混合得到颜色的方法,称为CMY模型,也称CMY相减混色模型(为什么下面讲)。
同样,任何一种颜色使用C、M、Y也可以混合得到。
4.png2.3.1 为什么叫做CMY相减混色模型
CMY相减混色模型这样命名的原因,是因为这种混色模型,使用从白光中,减去对应数值的C(青色cyan)、M(品红magenta)、Y(黄色yellow)三种颜色而产生颜色。
如果这句话不能使你充分理解,那么可以结合RGB相加混色模型一起理解。如下图:
RGB相加混色如图所示,R(红)、G(绿)、B(蓝)的两两交集产生C(青)、M(品红)、Y(黄),而RGB三者的交集产生白色。
列成等式就是这样:
(1)白 = 红 + 蓝 + 绿;
(2)黄 = 红 + 绿;
(3)青 = 蓝 + 绿;
(4)品红 = 红 + 蓝;
如果我们现在使用CMY相减混色模型来产生颜色,那么它产生颜色的过程如下:
假如“黄”的数值已知,那么可以用白色(基准值)减去黄色得到蓝色,同理可得红色和绿色的值。而我们都知道,RGB可以组成几乎所有的颜色,因此颜色产生。
如果说到这还想不明白,请用(1)式分别减(2)、(3)、(4)式。
所以总结起来,相减混色和相加混色其实互为互补色,RGB中颜色值为1的地方,在CMY对应的位置上,其颜色值为0。它们的关系如下所示:
相加色与相减色的关系利用这种关系,RGB可以转化成CMY,因为RGB常用在显示器、计算机图像等显示设备上,而CMY常用在打印机、印刷上,所以可以把显示的颜色,转换成打印的颜色。
3 图像的三个基本属性
3.1 图像分辨率
前面我们介绍过显示器分辨率,它表示显示器能够显示画面的细腻度。而图像分辨率,是图像精细程度的度量方法。对同样尺寸的一幅图像,如果像素数目越多,则说明图像的分辨率越高,看上去越逼真。相反,图像看起来越粗糙。
图像分辨率也称空间分辨率,或者像素分辨率。
在实际应用中,我们通常这样表示图像分辨率:
1、物理尺寸:通过每毫米的线数或行数来标识,比如一幅640x480的图像,物理尺寸为10mm x 10mm,那么它每毫米有48行
2、行列像素:像素/行 x 行/幅,如640像素/行 x 480行/幅
3、像素总数:如手机或者数码相机上标的,1200万像素
4、单位长度上的像素:如像素每英寸(pixels per inch, PPI)
5、线对数:以黑白相邻的两条线为一对
在这五种表示法中,如果是显示在手机或者计算机显示器上,第五种和第一种很少用到。比如线对数,在显示器中,图像被单行扫描,所以线对数用到较少,有兴趣的可以自行百度。
3.1.1 图像分辨率和屏幕分辨率
有的人可能咋然看到这两个词,有点分不清。其实道理很简单,屏幕相当于画布,图像如果大于画布,就画不下,只能画出整幅图像的一部分。比如,如果屏幕分辨率为640x480,那么一副320x240的图像,就只占显示屏的1/4。相反,2400x3000像素的图像就不能显示完整画面。
有的人可能又会说,不对呀,我在电脑上或手机上打开任何一幅图,都能看到完整的画面呀。是这样,我们在电脑上打开或者手机上打开图片的时候,都会默认使用看图软件打开,在打开的时候,看图软件已经对原图做了处理。
比如一幅分辨率大于屏幕分辨率的图像,软件会删除图像的一些像素,来显示完整。如果你对图片进行放大,那么程序会根据算法,再添加一些像素进去。这样一来,一幅高分辨率的图像,被放大之后,被程序加入的像素就比低分辨率的要少,所以它依然很清晰,而低分辨率的此时可能已经看不清了。
有人可能还会说,不对呀,我在电脑上放大一幅图片的时候,放大到最后,图像的每个像素我都能看得见,程序加的像素在哪儿呢?在这里我也放大一幅图片放在这,请看下图:
放大一幅图像问这个问题的,首先是没搞清楚图像分辨率和屏幕分辨率是怎么一回事。我现在使用的屏幕分辨率是1280x800,图像被放大到每个像素都能看见,然而,像素点有这么大嘛?显示器上每行有1280个像素点,图像被放大后,显示器上依然有1280个点,而图像的总像素也没有变,那程序加的像素在哪儿呢?
就在放大后的每个像素格子上!可以这样理解,放大前图像的一个像素用显示器的一个像素显示,放大之后,图像的一个像素格子用显示器的20个像素显示。那每个格子多余的19个像素从哪儿来?
网友评论