WEBVTT 00:00:00.000 --> 00:00:04.950 在本节,我想讲一下计算机里是怎么处理数码图像的 00:00:04.950 --> 00:00:10.218 这里有个例子 - 黄色花朵的图像 00:00:10.218 --> 00:00:15.359 我们看到的是有机的圆形物体 00:00:15.359 --> 00:00:20.187 在计算机里,它就成了多个小数值。这是怎样做到的呢 00:00:20.187 --> 00:00:24.868 我们来看看左上角的这朵花 00:00:24.868 --> 00:00:29.914 你看到一小片绿色区域,中间有个小东西 00:00:29.914 --> 00:00:34.960 如果将它放大十倍,就成这样。你看到的图像 00:00:34.960 --> 00:00:39.910 是由这些小正方形组成的,它们称为像素 00:00:39.910 --> 00:00:45.325 每个像素都是正方形的,像素非常小 00:00:45.325 --> 00:00:50.717 大概每英寸有100像素。每个像素只显示一个单色 00:00:50.717 --> 00:00:55.815 像素是由每个单色的方块锁定 00:00:55.815 --> 00:01:00.660 有趣的是像素看起来有点不自然,且轮廓分明 00:01:00.660 --> 00:01:04.985 但由于像素非常小,你在原图看像素时,没有觉得不对劲 NOTE Paragraph 00:01:04.985 --> 00:01:09.656 像素太小了,肉眼分辨不出来 00:01:09.656 --> 00:01:14.154 你看不到那些分明的轮廓。放大看像素时,图像就是这样子 00:01:14.154 --> 00:01:19.095 要考虑一个图像里有多少个像素的话,就是乘法的问题 00:01:19.095 --> 00:01:23.863 要计算一个宽800像素和高600像素的图像有多少像素,就用乘法 00:01:23.863 --> 00:01:28.401 将两者相乘,就是480000像素 00:01:28.401 --> 00:01:33.191 你可能听过“百万像素”这个词 00:01:33.191 --> 00:01:37.320 它在计算机和数码相机等很常见。百万像素就是一百万个像素 00:01:37.320 --> 00:01:41.450 800x600的图像,480000。粗略讲,大约是一百万像素的一半 00:01:41.450 --> 00:01:45.591 从现代标准来看,这个图像像素并不高 00:01:45.591 --> 00:01:49.897 目前的数码相机甚至是手机 00:01:49.897 --> 00:01:54.039 都会产生五百万像素、一千万像素或两千万像素的图像 00:01:54.039 --> 00:01:58.970 好,我们来看看其中的原理 00:01:58.970 --> 00:02:04.222 为了让图像轮廓分明,我做了这幅图 00:02:04.222 --> 00:02:09.359 我可以将这个图像看做是像素组成的网格,每个像素都是一个正方形,显示一个单色 00:02:09.359 --> 00:02:13.970 我们要有一个地址分析方案 00:02:13.970 --> 00:02:18.932 来将每个像素与其他像素分辨出来 00:02:18.932 --> 00:02:23.717 原理就是这里有一系列 x 值。0在最左端,往右的值不断增大 00:02:23.717 --> 00:02:28.325 y 的方向有点特别 00:02:28.325 --> 00:02:33.051 0在最顶端,最上面一行,y 值的顺序是从上往下 00:02:33.051 --> 00:02:38.390 我们在计算机里就是这样使用数值的 00:02:38.390 --> 00:02:43.922 我来做一些很简单的实例。如左上角的像素是00 00:02:43.922 --> 00:02:48.412 或可以说 x 等于0,y 等于0 00:02:48.412 --> 00:02:52.637 像素1在它右面,因此这个像素的位置是 x 等于0,y 等于0。 00:02:52.637 --> 00:02:57.074 在讲到坐标时,通常是先说 x 值再说 y 值 00:02:57.074 --> 00:03:01.787 这里就是 1, 0。这个像素可以说是 x = 4,y=2. 00:03:01.787 --> 00:03:06.206 或者只说4,2 00:03:06.206 --> 00:03:10.867 实际上,我们不会太纠结于用 x 和 y 的值来确定像素 00:03:10.867 --> 00:03:15.710 你只需知道有这样一个网格就可以了 00:03:15.710 --> 00:03:20.431 哪怕是一千万像素,每个特定的像素都有 x 值和 y 值来区别它和其他像素 00:03:20.431 --> 00:03:25.316 问题是,有了这些像素 00:03:25.316 --> 00:03:30.470 如何编译每个特定像素的颜色 00:03:30.470 --> 00:03:35.392 要讲这一点,我要先讲讲简单的历史背景 00:03:35.392 --> 00:03:40.470 在17世纪,牛顿做了一个有名的实验,我在这里复制这个实验 00:03:40.470 --> 00:03:45.547 用棱镜,其实就是三角形的玻璃 00:03:45.547 --> 00:03:49.354 白色阳光从左边照进来,棱镜将阳光分散成光谱 00:03:49.492 --> 00:03:54.262 我将光谱投映在白纸上 00:03:54.262 --> 00:03:58.703 这里显示出白光不是不可见的纯净物体。相反,它可以被分散成这些纯组成色 00:03:58.703 --> 00:04:03.329 你看彩虹时,也是看到同样的事物 00:04:03.329 --> 00:04:08.264 这些颜色其实是在连续谱里 00:04:08.264 --> 00:04:13.075 不过牛顿分辨出这些颜色,并给它们命名 00:04:13.075 --> 00:04:17.702 那个有名的顺序是从这边的红色开始,到橙色、黄色、绿色 00:04:17.702 --> 00:04:22.390 最后是蓝色、靛青和最远处的紫色 00:04:23.505 --> 00:04:31.051 在计算机里,我要把这些纯色看做是一个调色板 00:04:31.051 --> 00:04:37.706 我们要使用的方案就是在这里挑出红绿蓝 00:04:37.706 --> 00:04:43.578 将这些颜色作为组成色来构成我们想要的其他颜色 00:04:43.578 --> 00:04:48.068 你可以这样想,左边有白光进来 00:04:48.068 --> 00:04:52.003 这里有组成色出去 00:04:52.003 --> 00:04:56.036 你也可以从相反的角度来想。假如我拿组成色从这边照进去 00:04:56.036 --> 00:05:00.020 我就可以有白光出来。物理学跟这个不尽相同 00:05:00.020 --> 00:05:04.102 但也可以提示我们如何在计算机里结合这些组成色 00:05:04.102 --> 00:05:08.784 关于靛青有个有趣的故事 00:05:08.784 --> 00:05:13.414 牛顿命名这些颜色时,蓝色和紫色之间我们有靛青 00:05:13.414 --> 00:05:17.694 真的吗?我们要单独用一个词,不能就叫蓝色 00:05:17.694 --> 00:05:22.062 这个故事之所以有意思 00:05:22.062 --> 00:05:26.742 是它反映了17世纪的情况。牛顿信仰我们认为不科学的神秘论 00:05:26.898 --> 00:05:31.111 那时已知的星球有七个 00:05:31.111 --> 00:05:35.323 牛顿认为颜色的数量应该跟星球的数量一致 00:05:35.323 --> 00:05:39.587 于是他就硬加上靛青,凑个数 00:05:39.587 --> 00:05:44.871 好的,我要弄一个方案 00:05:44.871 --> 00:05:50.957 将特定的颜色编译成一个叫 RGB 的颜色方案。RGB 代表红绿蓝 00:05:50.957 --> 00:05:56.360 其中的原理,或者问题在于我要有一种方式 00:05:56.360 --> 00:06:01.907 来编译网格里每一种颜色是什么 00:06:01.907 --> 00:06:06.652 在 RGB 方案里,要用纯红光、纯绿光和纯蓝光 00:06:06.652 --> 00:06:12.133 用不同的组合来混合这些颜色,使之能形成不同种类的颜色 00:06:12.133 --> 00:06:17.614 我就不细讲这一点,这里有一个很好的示范 00:06:17.614 --> 00:06:21.934 我要登录 RGB Explorer 这个网页,这样我就可以做示范 00:06:21.934 --> 00:06:26.128 在左边,有三个滑动条 00:06:26.128 --> 00:06:30.530 这一个控制红光,我们要给它们赋值 00:06:30.530 --> 00:06:34.868 当红光滑动条移到全黑时,值为0 00:06:34.868 --> 00:06:39.481 调高最高时,值为255。 00:06:39.481 --> 00:06:43.820 在滑动条的下端,你可以看到滑动条上颜色的值。 00:06:43.820 --> 00:06:48.378 这里有红色滑动条、产生绿光的绿色滑动条和产生蓝光的蓝色滑动条 00:06:48.378 --> 00:06:52.829 RGB 方案使用的策略是 00:06:52.829 --> 00:06:58.211 用三个按钮来改变红光、绿光和蓝光的亮度 00:06:58.211 --> 00:07:03.656 这样,你就可以通过结合红、绿、蓝的恰当比例来产生任何颜色 00:07:03.656 --> 00:07:07.916 很明显,如果我要产生红色,就调到最高 00:07:07.916 --> 00:07:11.700 同样,如果要产生绿色,将绿色调到最高 00:07:11.700 --> 00:07:15.872 掉到最高时,颜色非常亮 00:07:15.872 --> 00:07:19.559 要深绿色的话,可以先调到绿色 00:07:19.559 --> 00:07:23.537 再往回调,就是深绿色 00:07:23.537 --> 00:07:27.612 在左边,数字0代表的是黑色 00:07:27.612 --> 00:07:31.542 产生绿色时,往黑色那边调,就是深绿色。 00:07:31.542 --> 00:07:35.666 如果要产生白色 00:07:35.666 --> 00:07:40.159 我将红色调到最高 00:07:40.159 --> 00:07:46.073 也把绿色和蓝色调到最高,就是白色了。所有值都是255,就是白色 00:07:46.073 --> 00:07:51.621 将全部颜色都调到最低,全部都是0,就是黑色 00:07:51.621 --> 00:07:56.406 我来展示一些颜色组合 00:07:56.406 --> 00:08:01.058 我想最有趣的是红色加绿色。如果我将红色调到最高 00:08:01.058 --> 00:08:05.955 将绿色也调到最高,就得到黄色 00:08:05.955 --> 00:08:10.729 要黄色暗一点的话 00:08:10.729 --> 00:08:15.320 将红色和绿色都往回调一点,往黑色那边调一点,就有暗黄色 00:08:15.320 --> 00:08:20.156 如果继续,黄色就更暗了 00:08:20.339 --> 00:08:24.628 要产生橙色的话,我想橙色有点像黄色 00:08:24.628 --> 00:08:28.440 但不是红色和绿色的比例都差不多 00:08:28.440 --> 00:08:32.653 红色要多一点,这里是红色和绿色 00:08:32.653 --> 00:08:36.515 将红色多调一点,将绿色调少一点,就是橙色了 00:08:36.515 --> 00:08:41.414 有点像锥形路边警告筒的样子,好看的橙色 00:08:41.414 --> 00:08:46.380 这只是让你大致了解一下如果通过调整来产生许多好玩的颜色 00:08:46.569 --> 00:08:51.409 我还想再试一下 00:08:51.409 --> 00:08:56.501 是的,产生了浅绿色 00:08:56.501 --> 00:09:01.387 我来给你看看如何产生淡黄色,这里红色和绿色都调到最高 00:09:01.387 --> 00:09:05.850 就产生了很亮的黄色 00:09:05.850 --> 00:09:10.254 淡黄色是比较分散、朦胧的颜色 00:09:10.254 --> 00:09:15.011 产生淡黄色的作法是添加蓝色,我将蓝色调到180,185 00:09:15.011 --> 00:09:19.416 如你所见,这还是黄色,不过是淡黄色,有点朦胧 00:09:19.416 --> 00:09:24.173 我们可以这样要理解这一点 00:09:24.173 --> 00:09:28.481 假如全部颜色都调到最大,就是白色 00:09:28.481 --> 00:09:32.827 将蓝色调高,颜色稍稍变白,但不是纯白 00:09:32.827 --> 00:09:37.810 红色和绿色比蓝色少一点,就是黄色 00:09:37.810 --> 00:09:42.793 这些知识对这么课的作用是,我不要求你知道 00:09:42.793 --> 00:09:47.486 你只要可以填三个数字产生某种颜色就行了 00:09:47.486 --> 00:09:52.411 你明白有通过改变红、绿、蓝来产生颜色的基本方案就可以了 00:09:52.411 --> 00:09:57.356 我还要调一个颜色给你看 00:09:57.356 --> 00:10:01.935 我们有红、绿、黄,这很重要 00:10:01.935 --> 00:10:07.430 我们来组成其他组合。蓝和绿可以组成蓝绿色 00:10:07.430 --> 00:10:12.533 最后一个组合是红加蓝 00:10:12.533 --> 00:10:17.897 红加蓝是紫,看起来确实是红和蓝的组合 00:10:17.897 --> 00:10:23.402 好的,我们返回到我们的图像 00:10:23.402 --> 00:10:28.505 我们知道一个概念,就是你可以将红光、绿光和蓝光混合在一起 00:10:28.505 --> 00:10:34.444 就这个图像而言,我有其全部的像素 00:10:34.444 --> 00:10:40.001 每一个像素都会有一种颜色 00:10:40.001 --> 00:10:45.023 这种颜色是由红、绿、蓝的深浅决定的 00:10:45.023 --> 00:10:50.458 或就数字而言,每个像素都有三个值。 00:10:50.458 --> 00:10:55.825 可以说,红色是250,绿色是10,蓝色是240 00:10:55.825 --> 00:11:01.191 我的意思是,这个像素是250、10、40 00:11:01.191 --> 00:11:07.720 顺序是红色的值、绿色的值和蓝色的值,我在这里重新定义这张图 00:11:07.720 --> 00:11:13.672 这里是我的像素网格,是构成图像的 00:11:13.672 --> 00:11:19.080 有前面讲过的 x 和 y 00:11:19.080 --> 00:11:24.908 每一个这些像素都会有自己的三个值 00:11:24.908 --> 00:11:31.270 这个是6,2,57。6很低,绿色是250,很高,蓝色是7,很低 00:11:31.270 --> 00:11:37.540 基本上是绿色,对吧?绿色的值很高 00:11:37.540 --> 00:11:41.868 这个像素可能是241,252,23。红和绿的值都很高,蓝色的值很低 00:11:41.868 --> 00:11:45.929 基本上就是黄色。 00:11:45.929 --> 00:11:49.941 我调整滑动条时,我趋向于调到255或0 00:11:49.941 --> 00:11:53.514 在现实世界中拍数码照片时,经常会有如237或26这样的中间值 00:11:53.514 --> 00:11:56.890 这些数字混合起来产生某种颜色 00:11:56.890 --> 00:12:00.951 这就是我们目前给图像下的临时定义 00:12:00.951 --> 00:12:04.817 这里有一个像素的网格 00:12:04.817 --> 00:12:09.495 每个像素显示一种颜色 00:12:09.495 --> 00:12:16.125 每种颜色用三个数字来表示 00:12:16.125 --> 00:12:23.182 回顾一下,我们从这张图像开始 00:12:23.182 --> 00:12:27.596 我将它缩减成有多个数字组成的网格 00:12:27.596 --> 00:12:32.067 在计算机科学里,这是一个很常见的主题 00:12:32.067 --> 00:12:36.538 先从整个图像、整段音频或整部百科全书开始 00:12:36.538 --> 00:12:41.178 作为人类,我们把这些事物视作一个有机的整体 00:12:41.178 --> 00:12:46.045 在计算机里,所有数据都不可避免地有一个组织方案,将这些事物分解成多个小数字 00:12:46.045 --> 00:12:50.629 这就是计算机的表现事物的形式 00:12:50.629 --> 00:12:55.100 我们可以将它视作是数字运算。如果我要拍张图片,将它变亮一点 00:12:55.251 --> 00:12:59.200 在计算机里,我们要将它转换成数字运算 00:12:59.200 --> 00:13:03.047 例如,我要将一个图像调亮一点 00:13:03.047 --> 00:13:07.046 啊,我们有红绿蓝的值 00:13:07.046 --> 00:13:11.197 每个值都加10 00:13:11.197 --> 00:13:15.095 在RGB Explorer里,我将每个值往右调,调亮一点 00:13:15.095 --> 00:13:19.196 不管怎样,那是后面几部分的内容 00:13:19.196 --> 00:13:23.195 在计算机里,事物是存储在多个小数值里 00:13:23.195 --> 00:13:27.194 计算机领域就是这样 00:13:27.194 --> 00:13:28.460 我们将会碰到很多这样的情况