计算机视觉
第一章 计算机视觉概述
一、基本概念
1. 什么是计算机视觉
- 计算机视觉(Computer Vision,简称CV)在广义上是和图像相关的技术总称。包括图像的采集获取,图像的压缩编码,图像的存储和传输,图像的合成,三维图像重建,图像增强,图像修复,图像的分类和识别,目标的检测、跟踪、表达和描述,特征提取,图像的显示和输出等等。
- 随着计算机视觉在各种场景的应用和发展,已有的图像技术也在不断的更新和扩展。
2. 计算机视觉的应用
- 计算机视觉技术已经在许多领域得到了广泛的应用,以下是一些典型的例子:
- 公安安防:人脸识别,指纹识别,场景监控,环境建模。
- 生物医学:染色体分析,X光,CT图像分析,显微医学操作。
- 文学处理:文学识别,文档修复,办公自动化,垃圾邮件分类。
- 国防军事:资源探测,军事侦察,导弹路径规划。
- 智能交通:公路交通管理,电子警察执法抓拍系统,自动驾驶车辆。
- 休闲娱乐:电影特效,视频剪辑,人像美颜,体感游戏,VR。
3. 计算机视觉与人工智能
- 计算机视觉中的大部分理论运用了人工智能的技术。人工智能的发展离不开计算机视觉,计算机视觉中的很多应用问题给人工智能技术提供了研究方向。
- 人工智能在计算机视觉中最成熟的技术方向是图像识别,它实现了如何让机器理解图像中的内容。
二、数字图像处理基础
1. 人眼成像原理
- 人的眼睛近似为一个球体。物体的光线通过角膜和晶状体的折射,在视网膜上成倒立缩小的实像。
- 视网膜上分布光线接收的神经细胞,分为锥状体和杆状体。每只眼睛有600万-700万个锥状体,其对颜色灵敏度很高,负责亮光视觉。有7500万-15000万杆状体,杆状体没有颜色感觉,负责暗视觉。
2. 计算机成像原理
- 数字图像的采集过程类似人眼,使用大量的光敏传感器构成的阵列获取图像。成像的质量由传感器的单元数,尺寸和传感性能决定。
- 多数传感器的输出是连续的电压波形,图像数字化就是将一副画面的数据转换为计算机能够处理的数字形式。
- 图像数字化包括两种处理过程:采样和量化。
3. 图像采样与分辨率
- 将空间上连续的图像变换成离散点的操作称为采样。
- 采样是按照某种时间间隔或空间间隔,采集模拟信号的过程,即空间离散化。
- 图像数字化的采样过程是将空间上连续的图像变化为离散的点。
- 采样的效果由传感器的采样间隔和采样孔径决定,采样间隔和采样孔径的大小是两个很重要的参数。
- 采样后得到离散图像的尺寸称为图像分辨率。(分辨率就是使用多少个像素点来表示一幅图像)分辨率是数字图像可辨别的最小细节。
- 分辨率由宽(width)和高(height)两个参数构成。宽表示水平方向的细节数,高表示垂直方向的细节数。
- 例如:
- 一副640480分辨率的图像,表示这幅图像是由640480=307200个点组成。
- 一副19201080分辨率的图像,表示这幅图像是由19201080=2073600个点组成。
- 采样间隔越小,所得图像像素数越多,空间分辨率高,图像质量好,但数据量大。下图展示了lena图的分辨率从512x512依次降低到8x8的图像效果。
4. 灰度级与灰度图像
- 灰度级(depth)表征了每个采样点的传感器输出中可分辨的最小变化。
- 灰度级通常是2的整数次幂。我们用m级或者n位来表示灰度级。图像数据的灰度级越多视觉效果就越好。计算机中最常用的是8位图像。
- 例如:
- 一副8位的图像,表示每个采样点有2^8=256级。从最暗到最亮,可以分辨256个级别。
- 一副32级的灰度图像,每个采样点从最暗到最亮,可以分辨32个级别。
- 量化等级越多,所得图像层次越丰富,灰度分辨率高,图像质量好,但数据量大。下图展示了lena图的灰度级从256级依次降低到4级的图像效果。
- 单通道的数字图像被称为灰度图。通常,单通道记录了采样点的亮度信息,例如8位的图像,0表示最暗(黑色),255表示最亮(白色)。
5. 彩色图像与色彩空间
- 为了表征彩色图像,我们需要使用多通道数字图像。最普遍的方式是使用RGB颜色空间。RGB颜色空间中每个像素点有三个维度,分别记录在红(Red)、绿(Green)、蓝(Blue)三原色的分量上的亮度。
- 例如:
- 按照(r,g,b)的方式:
- (255,0,0)纯红
- (124,252,0)草坪绿
- (135,206,235)天蓝色
- 另一种常用的颜色空间是HSV,该颜色空间可以用另一个圆锥来表示
- HSV表示色相(hue)、饱和度(saturation)和亮度(value)
- H表示颜色的相位角(hue),取值范围是0–360;S表示颜色的饱和度(saturation),范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率
- V表示色彩的明亮程度(value),范围从0到1
- YUV:亮度信号Y和两个色差信号R - Y、B - Y,最后发送端将亮度和色差三个信号分别进行编码。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图就是黑白灰度图。YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法。YUV色彩空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。与RGB视频信号传输相比,YUV只需占用极少的频宽。
- CMYK:CMYK颜色空间应用于印刷工业,印刷业通过青©、品(M)、黄(Y)、黑(BK)四色油墨的不同网点面积率的叠印来表现丰富多彩的颜色和阶调。
- Lab:Lab的色彩空间要比RGB模式和CMYK模式的色彩空间大,自然界中任何一点色都可以在Lab空间中表达出来。
6. 颜色空间变换
- 在计算机视觉中,尤其是颜色识别相关的算法设计中,各种颜色空间混合使用是常见的方法。RGB,HSV,YUV等常见颜色空间可以通过计算公式实现相互转化,这个过程叫做颜色空间变化。颜色变换的计算公式比较复杂,通常图像处理库会提供颜色空间变化的API给用户调用。
7. 常用图像处理技术
- 色彩处理
- 灰度化:将彩色图像转换为灰度图像
- 二值化/反二值化:将灰度图像转换为只有两种颜色的图像
- 色彩提取:提取指定的颜色
- 直方图均衡化:调节图像统计直方图分布
- 亮度、饱和度、色调调整
- 形态相关操作
- 仿射变换:旋转、平移
- 缩放、裁剪
- 图像相加、相减
- 透视变换
- 图像腐蚀、膨胀、形态学梯度
- 色彩梯度
- 轮廓处理
第二章 色彩变换
一、图像色彩调整
1. 亮度调整
- 对HSV空间的V分量进行处理可以实现对图像亮度的增强。
- 直接将彩色图像灰度化,也可以得到代表图像亮度的灰度图进行图像处理,计算量比HSV颜色空间变化低。但在HSV空间中进行处理可以得到增强后的彩色图像。
2. 饱和度调整
- 对HSV空间的S分量进行处理可以实现对图像饱和度的增强。
- 饱和度的调整通常是在S原始值上乘以一个修正系数。
- 修正系数大于1,会增加饱和度,使图像的色彩更鲜明;
- 修正系数小于1,会减小饱和度,使图像看起来比较平淡。
3. 色调调整
- 对HSV空间的H分量进行处理可以实现对图像色调的增强。
- 色相H的值对应的是一个角度,并且在色相环上循环。所以色相的修正可能会造成颜色的失真。
- 色相的调整通常在H原始值上加上一个小的偏移量,使其在色相环上有小角度的调整。调整后,图像的色调会变为冷色或者暖色。
二、图像灰度化
1. 什么是图像灰度化
- 在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255.将RGB图像转换为灰度图像的过程称为图像灰度化处理。
2. 如何进行图像灰度化
- 灰度化处理方法包括:
- 分量法。将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。
- 最大值法。将彩色图像中的三分量宽度的最大值作为灰度图的灰度值。
- 将彩色图像中的三分量亮度求平均得到一个灰度值。
- 根据重要性及其它指标,将三个分量以不同的权值进行加权平均。例如,由于人眼对绿色的敏感最高,对蓝色敏感最低。因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。如:
三、二值化与反二值化
1. 二值化
- 二值化阈值处理是将原始图像处理为仅有两个值的二值图像,对于灰度值大于阈值t的像素点,将其灰度值设定为最大值。对于灰度值小于或等于阈值t的像素点,将其灰度值设定为0。
2. 反二值化
- 反二值化阈值处理的结果也是仅有两个值的二值图像,对于灰度值大于阈值的像素点,将其值设定为0;对于灰度值小于或等于阈值的像素点,将其值设定为255.
四、直方图均衡化处理
1. 图像直方图
- 灰度直方图反映的是一幅图像中各灰度级像素出现的频率。以灰度级为横坐标,纵坐标为灰度级的频率,绘制频率同灰度级的关系图就是灰度直方图。它是图像的一个重要特征,反映了图像灰度分布的情况。
- 使用直方图进行图像变换是一种基于概率论的处理方法,通过改变图像的直方图,修改图像中各像素的灰度值,达到增强图像视觉效果的目的。
- 相对于灰度变化只针对单独的像素点操作,直方图变化综合考虑了全图的灰度值分布。
- 下面是两幅灰度图像的直方图,直方图的形状能反映图像的视觉效果。
- 对于彩色图像,可以对不同的通道分别统计直方图
2. 直方图均衡化
- 直方图均衡化将原始图像的直方图,即灰度概率分布图,进行调整,使之变化为均衡分布的样式,达到灰度级均衡的效果,可以有效增强图像的整体对比度。
- 直方图均衡化能够自动的计算变化函数,通过该方法自适应的产生有均衡直方图的输出图像。能够对图像过暗、过亮和细节不清晰的图像得到有效的增强。
- 在常用的图像处理库中,直方图操作都有API直接调用实现。
第三章 OpenCV
一、OpenCV安装
- 执行以下命令安装opencv-python库(核心库)和opencv-contrib-python库(贡献库)。注意:命令拷贝后要合成一行执行,中间不要换行。
pip3 install --user opencv-python==3.4.2.16 --index-url
pip3 install --user opencv-contrib-python==3.4.2.16 --index-url
二、OpenCV使用
import cv2
im = cv2.imread("../data/Linus.png",
1)
print(type(im))
print(im.shape)
cv2.imshow("im", im)
cv2.imwrite("../data/Linux_new.png")
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
im = cv2.imread("../data/Linus.png", 1)
cv2.imshow("im", im)
im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
cv2.imshow("im_gray", im_gray)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
im = cv2.imread("../data/opencv2.png")
cv2.imshow("im", im)
b = im[:, :, 0]
cv2.imshow("b", b)
im[:, :, 0] = 0
cv2.imshow("im-b0", im)
im[:, :, 1] = 0
cv2.imshow("im-b0-g0", im)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
from matplotlib import pyplot as plt
im = cv2.imread("../data/sunrise.jpg", 0)
cv2.imshow("im", im)
im_equ = cv2.equalizeHist(im)
cv2.imshow("im_equ", im_equ)
plt.subplot(2, 1, 1)
plt.hist(im.ravel(),
256, [0, 256], label="orig")
plt.legend()
plt.subplot(2, 1, 2)
plt.hist(im_equ.ravel(),
256, [0, 256], label="equalized")
plt.legend()
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
im = cv2.imread("../data/sunrise.jpg")
cv2.imshow("im", im)
yuv = cv2.cvtColor(im, cv2.COLOR_BGR2YUV)
yuv[..., 0] = cv2.equalizeHist(yuv[..., 0])
equalized_color = cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR)
cv2.imshow("equalized_color", equalized_color)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
im = cv2.imread("../data/lena.jpg", 0)
cv2.imshow("im", im)
t, rst = cv2.threshold(im,
127,
255,
cv2.THRESH_BINARY)
cv2.imshow("bin", rst)
t, rst2 = cv2.threshold(im,
127,
255,
cv2.THRESH_BINARY_INV)
cv2.imshow("bin_inv", rst2)
cv2.waitKey()
cv2.destroyAllWindows()