Watch videos with subtitles in your language, upload your videos, create your own subtitles! Click here to learn more on "how to Dotsub"

IP_MOOC_Section_02

0 (0 Likes / 0 Dislikes)
欢迎来到图像处理入门的第二节 这一节里我会介绍一些 控制图像亮度和颜色的操作 让我们开始吧,这里有一张示例图片 你可以对这张图片做许多事情 其中的一种是让图片更亮 这可以通过使用 Lighter 函数来完成 Lighter 让图片看上去更亮一些 Lighter 函数也可以接受第二个参数 它指定了图片变亮的程度 这里展示了它的效果 其中第二个参数被设置成 1/3 也就是第二参数的默认值 这里战术了设置为1的效果 让图片看上去明显更亮了 一种观察变量造成的结果(比如说Lighter函数的第二个参数) 的方便的方法 是去写一个简短的 Manipulate 程序 来提供一个交互式的滑条调整变量的值 比如说,这段程序使用了Manipulate 来获得一个在Lighter函数中 调整第二个参数的滑动条 第二个参数的范围从0到1 0保持图片不变化 而1在相当程度上让图片变亮 Lighter 函数的功能实现的原理是 使计算机内部表示图像的数的数值更大 使计算机内部表示图像的数的数值更大 计算机内部用来表示图像的实际数字集 称为图像数据 图像本身是被称为像素的点的阵列 ImageDimensions 函数显示下面的图像 是由182 x 128个像素组成 在计算机中,每个像素 由一组称为像素值的数字表示 像素值的数组是图像的数据。 这个输入使用了 ImageData 函数 来显示这个图像的图像数据 Lighter 函数中的第二个参数 指定了那些数字的增长幅度 这里展示了指定Lighter函数的第二个参数为1之后的 生成图像的图像数据 将原始图像的前几个数字 与较亮的图像的前几个数字进行比较 可看出较亮图像的 图像数据中的数字较大 比如说这种图片,它的图像数据是一个数组 比如说这种图片,它的图像数据是一个数组 它的维度是 128x182x3 这个数组之所以具有第三个维度3 是因为每个像素值都由三个数字表示 而其他两个维度 给出了图像的高度和宽度 这里要注意的一件事是 图像的高度和宽度尺寸 以相反的顺序给出 这样的区别仅仅是习惯的问题 在图像中,通常先给出列数 而在数组中,先给出行数 这种差异通常不是大问题 但是在处理图像数据时要牢记这一点并保持注意 即使对这张小图片 图像数据也含有大约7万个数 这当然是很多数字 通过放大获取更易于管理的图像的部分 更容易理解这些数字 这是另一幅由2x2像素阵列 组成的图像 该图像的图像数据 显示为2x2像素值的数组 在此图像中,每个像素值都是三个数字组成的列表(List) 用于指定该像素的颜色 该图像使用了所谓的RGB颜色空间 这意味着每个像素值中的三个数字 给出了红,绿和蓝光的数量 将它们混合在一起以获得该像素的颜色。 您可以使用 ImageColorSpace 函数 获取图像的色彩空间 该图像的色彩空间是RGB 图像数据中的数字都在0到1之间 数字越大表示其所代表的光的分量越多 如果应用了Lighter功能使图像更亮 则数字会变大 有几个数字被设置为1 是因为数字限制在从0到1的范围内 因此,如果使图像更亮 会使数字大于1 则数字仅设置为1 表示该颜色的最大数量 这些编号的另一个重要特征 将在本节后面的部分中再次提到 该图像的数据常常以8位即1个字节为单位 存储在计算机中 1个计算机字节由8个0或1表示的位组成 作为二进制数 8个0和1对应于一个从0到255的整数 因此图像数据中数字的 计算机内部表示实际上是从0到255的整数 通过将Automatic作为 ImageData函数的第二个参数 可以看到这种形式 这些整数也是使用 交互式坐标工具 检查单个像素时显示的值 举例来说,点击图片选择坐标工具 在图片上移动光标 显示了这些整数数值 为了方便应用 通常将所有这些整数除以255 以获得从0到1的数字 这是在省略ImageData的 第二个变量时发生的情况 但内部表示仍然是 用字节表示的介于0到255之间的整数 图像数据中使用的数字类型 由ImageType函数给出 该图像的图像类型为Byte 其他图像类型 和使用具体图像类型的某些后果 将在后面的视频中讨论 现在回到对图像的操作 除了使图像更亮以外 当然还有许多其他操作 例如,此输入图像使用 Darker 函数 使图像更暗 这通过减小所有像素值来实现 像Lighter函数一样 Darker 函数可以指定第二个参数 这是一段用于在0和1之间 调整第二个参数的Manipulate代码 0将使图像保持不变 而1将使图像变暗为纯黑色 另一常见的操作是对图像取反 ColorNegate 函数提供该图像的取反 得到的结果是原图的反色图 颜色取反的工作原理是用1(白色)减去每个像素 当然,前提假设是每个像素值中的数字 已归一化为介于0和1之间 比如说,这是一个只包含一个红色像素的图像 该图像的图像数据的单个像素为{1,0,0} 其中1表示最大的红光量 零表示绿色和蓝色的光量 ColorNegate 函数提供该图像的取反 其颜色称为青色,是红色的补色 该图像的图像数据具有单个像素值{0,1,1} 这是从1中减去{1,0,0}像素值的结果 除RGB颜色空间之外,还有许多其他颜色空间 一种常见的色彩空间是灰度色彩空间 用于黑白图像 此输入使用ColorConvert函数 将彩色图像转换为灰度图像 像之前一样放大此灰度图像的部分 并应用ImageData函数显示像素数据 每个像素值现在是一个数字 而不是三个数字组成的列表 在灰度颜色空间中 单个数字以从0到1的比例给出像素的亮度 其中0为黑色,1为白色 其他数字用于不同的灰度 有时,将某些特定的自定义操作 应用于图像中的每个像素值很有用 一种实现方法是使用称为ImageApply的函数 该函数将指定函数应用于 每个像素值 例如,这是一个将其参数乘以2的纯函数 ImageApply 函数将该函数应用于 图像中的每个像素 从而使图像更亮 每个像素值乘以2的情况也是 当将Lighter函数 与第二个参数1一起使用时发生的 里一个可以使用ImageApply轻松实现的 是对图像进行颜色求反 这还是颜色取反示例 如果已将像素值 归一化为介于0和1之间 则通过从1(白色)减去每个像素值 来进行颜色求反 可使用类似的函数从 1中减去像素值 将该函数应用于每个像素值 可得到反色 对颜色的操作还有很多其他可以完成 例如,将彩色图像转换为灰度图像的一种方法 是将均值函数应用于RGB像素值 该函数用单个数字替换 每个RGB像素值中的三个数字 然后单个数字会自动地 被作为一种灰度图片的 一个像素 这与 ColorConvert 函数灰度转换的结果 略微不同 这是之前使用ColorConvert 得到的灰度转换的结果 给出了略微不同的灰度 差别不是很大,但是例如原图像的绿色部分 在灰度图中显示要亮一些 之所以会出现这种差异 是因为ColorConvert函数实际上执行的操作 是给出了红色,绿色和蓝色像素值的 加权平均值 使用加权平均值主要是因为 人眼对某些颜色更敏感 例如,人眼对绿色的敏感度要比对蓝色的敏感度高 因此,在转换为灰度时 绿色的权重要大于蓝色 在结束讨论之前 使本节中的示例具有一定的背景性 本节中所有操作的共同特点是 所有操作 均通过对每个像素分别进行操作而起作用 均通过对每个像素分别进行操作而起作用 像这样的操作称为 逐像素操作或逐点操作 还有许多其他图像操作 一次可操作一个以上像素 这样的被称为邻域操作 其中每个像素的处理会取决于附近的像素值 邻域操作的一个简单示例是 模糊图像(Blurring) 其工作原理是用附近像素颜色的加权平均值替换每个像素 其工作原理是用附近像素颜色的加权平均值替换每个像素 后面的部分将介绍各种邻域操作 这是本节示例的结尾 总结一下 这是本节中的一些词汇 这节介绍了 一些常见的逐点图像处理方法 回顾一些图像处理的基本概念 比如说像素和像素值的数组 RGB色彩空间和灰度色彩空间 下一节继续 学习图像处理中的这些概念 并介绍图像直方图 和其他的逐点操作 翻译:武汉大学 唐安科 2020.7月

Video Details

Duration: 9 minutes and 58 seconds
Country:
Language: English
License: Dotsub - Standard License
Genre: None
Views: 5
Posted by: wolfram on Jul 29, 2020

IP_MOOC_Section_02

Caption and Translate

    Sign In/Register for Dotsub above to caption this video.