1.3 理解计算机图像

现在,我们从图像开始学习计算机视觉的基本概念。那么,图像究竟是什么?在计算机视觉中,一幅图像就是一个矩阵,换句话说,就是一个二维向量。用这种方式看待图像不但可以简化图像自身的表示,而且可以简化图像的组成元素:图像的宽度对应矩阵的列数。

图像的高度就是矩阵的行数。

矩阵的每个元素代表一个像素,像素是图像最基本的组成部分,图像就是像素的集合。

每个像素(或矩阵的每个元素)可以包含一到多个数值来对应其视觉表示(颜色、亮度等)。我们后面讲到计算机视觉中色彩空间的概念时再涉及。但应注意,像素的每个数值表示一个通道。例如,灰度图像的像素通常用无符号8位整型来表示一个0~255的数值,因此,灰度图像是单通道的。在这种表示法中,0代表黑色,255代表白色,其他数值代表对应的灰度值。再如标准的RGB图像表示法,它用3个无符号8位整型数来表示,每个整型数介于0~255之间。RGB图像的每个像素,用这三个通道对应其红、蓝、绿分量的强度值,这三个分量结合在一起可以表示任意可能的颜色。这样的图像被称为三通道图像。

下图是同一幅图像的灰度图版本和彩***(RGB)版本的同一区域放大后的结果。读者应该注意到灰度图像(左侧)中越高的数值对应了越高的亮度,反之亦然。类似地,在彩***像(右侧)中,读者能看到红色通道的数值很高,对应这个区域颜色是偏红的,当然白***域的红色通道数值也很高。

除了上述提到的内容,图像还有如下属性:每个像素(矩阵的元素)可以是整数或者浮点数,可以是8位、16位等。表示每个像素的数值的类型和通道数量一起构成了图像的深度。例如,假设一个四通道的图像使用16位整数表示每个通道,那么其深度就是16乘以4位,即64位(或者说4个字节)。

图像分辨率反映了图像中的像素数量。例如,一个宽度1920、高度1080的图像(也称为full-HD图像)的分辨率是1920乘以1080,包含超过200万个像素(约2兆像素)。

正是因为这种表示方式,图像可以轻松地转化为数学元素,进而在不同类型的算法中使用。回到最简单的图像表示法(灰度图像),通过几个简单的例子我们就可以看到,大多数图像编辑软件(以及计算机视觉算法)都用这种表示法,配合简单的算法及矩阵操作可以轻松修改图像。下图中,在输入图像(中间)的每个像素上加一个常数(此例中是80),就可以提高结果图像的亮度(右图),也可以从每个像素上减去一个常数来让图像变得更暗(左图)。

现在,我们先聚焦在计算机视觉的基本概念上,不深究图像编辑的实现细节。我们在后续章节再讨论其细节以及其他图像处理的技术和算法。

本节介绍的图像属性(宽度、高度、分辨率、深度和通道)在计算机视觉中被广泛使用。例如,在一些情况下,如果一个图像处理算法特别复杂耗时,我们会先缩小图像,这样处理起来就会快很多。等处理完毕,处理的结果可以被映射回原图大小并展示给用户。对于深度和通道也可以用类似的处理方法,如果算法只需要图像特定的通道,你可以提取出相应的通道,或者干脆把图像转成灰度图像。注意,一旦目标检测完成,应该在原来的彩***像上展示检测结果。对这些图像属性的正确理解有助于你使用计算机视觉算法来解决各种各样的问题。言归正传,下面我们开始讨论色彩空间。

1.3.1 色彩空间

尽管有不同的定义方法,但通常色彩空间(有时称为色彩模型)是一种用来解释、存储和重建一组色彩的方法。我们以灰度色彩空间为例来看看。在一个灰度色彩空间中,每个像素用一个8位无符号整型来表示其亮度或灰度值。这样就可以存储256级灰度,其中0对应纯黑,255对应纯白。换句话说,数值越高,像素亮度越高,反之亦然。下图展示了灰度色彩空间所有可能的色彩:

另一个常用的色彩空间是RGB,其中每个像素用三个8位整型对应其红、绿、蓝颜色分量的强度。这个色彩空间被广泛用在电视、液晶和其他类似显示器上。你可以自己用放大镜看下显示器的表面。它依赖如下假设:所有色彩都可以由不同比例的红、绿、蓝混合而成。下图展示了其他色彩(比如黄、粉红)是如何由这三种颜色形成的:

如果一幅RGB图像的每个像素的R、G、B分量数值相同,就成了一幅灰度图像。换句话说,同样的红、绿、蓝强度构成灰度。

计算机视觉中常用的另外一个色彩空间是HSV(Hue, Saturation, and Value;色调、饱和度和明亮度)色彩空间。在这个色彩空间中,每个像素由三个数值表示,分别代表色调(色彩)、饱和度(色彩强度)和明亮度(有多亮)。如下图所示,色调值介于0~360(度)之间,用来表示该像素的色彩。例如,0度或者接近0度对应红色或者近似红色:

在本书后续部分中,读者会看到,在基于物体色彩的目标检测和追踪算法中,HSV色彩空间更受欢迎。这是因为HSV色彩空间让我们在使用色彩的时候,不需要考虑亮度的影响。这在RGB和其他色彩空间中不是件容易的事情,因为在这些色彩空间中,单独看任何一个像素通道都无法知道色彩究竟是什么。

下图是HSV色彩空间的另一种表示方式,用色调(从左到右)、饱和度和明亮度的变化来产生所有可能的色彩:

除了上述提到的色彩空间,还有很多其他色彩空间,每种都有其特定的用途。比如,四通道的CMYK(Cyan, Maroon, Yellow, and Key/Black;蓝绿、褐红、黄和黑)色彩空间就被证明在印刷系统中是最高效的。

请读者在网上学习其他色彩空间,并思考它们是否对特定的计算机视觉问题有用。

计算机视觉应用开发功能图,《计算机视觉算法:基于OpenCV的计算机应用开发》 —1.3 理解计算机图像...相关推荐

  1. 矩阵 计算机应用,《计算机视觉算法:基于OpenCV的计算机应用开发》 —3.3 元素级矩阵操作...

    3.3 元素级矩阵操作 基于元素的(元素级)矩阵操作是计算机视觉中的一类数学函数和算法,它处理矩阵的各个元素,或者说,图像中的每个像素.注意基于元素的操作可以并行化,因此矩阵元素的处理顺序不重要.这个 ...

  2. 开发一个计算机视觉应用,《计算机视觉算法:基于OpenCV的计算机应用开发》 —1 计算机视觉概述...

    第1章 Hands-On Algorithms for Computer Vision 计算机视觉概述 毫无疑问,计算机科学,尤其是实现算法的方式,近年来得到了长足的发展.这是由于个人计算机,甚至你口 ...

  3. 基于opencv tensorflow2.0开发的人脸识别锁定与解锁win10屏幕实战

    基于opencv tensorflow2.0开发的人脸识别锁定与解锁win10屏幕实战 基于opencv tensorflow2.0开发的人脸识别锁定与解锁win10屏幕 前言 运行python环境 ...

  4. Android AR开发实践之四:基于Sceneform的ARcore开发实例

    Android AR开发实践之四:基于Sceneform的ARcore开发实例 一.设备配置 1.配置虚拟设备 2.配置真机 二.开发环境配置 1.首先添加sceneform的gradle插件到工程配 ...

  5. abaqus python二次开发攻略_基于CAE二次开发进行弹簧批量建模

    一. 为什么要进行弹簧批量建模 当一个公司或者学者从事科研任务时,往往通过有限元进行建模分析,建模的时间通常与工作效率挂钩.例如ABAQUS/CAE建模,想必很多老用户都有某种共同的感受,那就是实体模 ...

  6. node mysql商城开发_NideShop:基于Node.js+MySQL开发的微信小程序商城开源啦

    NideShop:基于Node.js+MySQL开发的微信小程序商城开源啦 发布时间:2020-04-14 04:23:37 来源:51CTO 阅读:2894 作者:ch10mmt 高仿网易严选的微信 ...

  7. 使用c语言开发的象棋程序,基于C++和MFC开发象棋程序

    这是我要和大家分享的基于C++和MFC开发的一个象棋程序,目的是练习编程实践和大家分享同时希望大家能给出指教. 进入主题 一.棋盘分析 这是我绘制的棋盘,棋盘的组成由9条竖线和10条横线构成.这儿我们 ...

  8. 原生态基于OpenCV图像处理软件开发

    部分功能效果图 GitHub:https://github.com/CnYiXiaoNaiHe/OpenCV-   持续更新

  9. java企业级应用开发项目总结报告,基于Java软件项目开发岗位的企业实践总结报告...

    D ISCUSSI ON 丨交流平台 基于Ja va软件项 目 开发 岗位的企业实践总结报告 文/ 卜 令瑞 摘 要 : 为 进 一 步 加 强 职 业 学校 " 双 师 型 " ...

最新文章

  1. 计算机应用基础课程是过程化考试吗,基于能力的计算机应用基础课程过程化考核标准构建与实施...
  2. 计算机科学家证明,为什么更大的神经网络可以做得更好
  3. jquery操作select option使用小结
  4. “面向未来,有效保护”——深信服安全理念详解
  5. 读取带空格字符串小结
  6. mosquitto常见问题及其解决办法
  7. 兼容谷歌的光标居中写法
  8. 解决android webkit的css postion:fixed支持问题
  9. UVA10200 Prime Time【素数判定】
  10. Python调用海康威视网络摄像头进行远程人脸识别
  11. Python代码自动转成C++代码
  12. 抖音网红简易时钟代码
  13. java是牌子的眼镜多少钱_基于jsp的眼镜商城-JavaEE实现眼镜商城 - java项目源码
  14. 第十届南京邮电大学网络攻防大赛(NCTF 2021)writeup
  15. iPhone真机测试Crash信息分析
  16. CSS outline 属性
  17. 【田间连着车间、佘太酒业这十年!
  18. 包学会之浅入浅出Vue.js:开学篇(转)
  19. 魔术方法、5个类的魔术属性和单态
  20. js打开手机摄像头实现扫描二维码功能

热门文章

  1. 蓝桥杯:试题 历届真题 修改数组【第十届】【省赛】【研究生组】Java实现
  2. 利用Python实现定时发送邮件,实现一款营销工具
  3. 单进程服务器-非堵塞模式(python版)
  4. 网页中播放FLV文件的代码
  5. android字符串显示textview,Android编程:TextView不显示完整字符串
  6. python列表操作符_python——列表操作符
  7. 【图像处理】RGB图像边缘检测
  8. 【OpenCV】OpenCV访问像素点的三种方式
  9. recall和precision的理解
  10. Opencv--cvSetImageROI和cvResetImageROI的使用