- 计算机视觉40例从入门到深度学习(OpenCV-Python)
- 李立宗
- 3932字
- 2024-02-27 15:48:30
1.3 应用基础
费曼学习法强调,说明问题时要不断地简化它,一直将其简化到小朋友能够理解为止。本节我们朝着这个目标努力,尽量将数字图像处理过程中的一些问题简化,以帮助大家快速理解数字图像处理中解决问题的一些基本思路和方法。
1.3.1 量化
图像处理的一个关键问题是将其量化。计算机不能直接理解图像,只有将图像处理为数值,计算机才能通过数值理解图像。如果计算机想找出图1-12(a)和图1-12(b)的差别,必须使用某种方式将图1-12(a)和图1-12(b)处理为数值。将图1-12(a)和图1-12(b)处理为如图1-12(c)和图1-12(d)所示的数值形式,即可直观地观察到二者的不同:在图1-12(c)和图1-12(d)这两幅图中,第1行第3列上的数值不一样。
图1-12 找不同
最简单的量化就是直接获取图像各像素点的像素值。但是,实践中面对的往往是比较复杂的图像,如果直接对图像内所有像素点进行运算,那么运算量是非常庞大的,有时难以实现实时效果。例如,在视频监控场景中,可以通过对比一个摄像头先后拍摄的两幅相片是否一致,来判断是否有人闯入。此时,简单地对每一个像素点的像素值进行对比,难以获得很好的效果。这一方面是因为像素点过多,运算量过大;另一方面是因为树叶晃动等微小的变化也会对运算结果造成影响。基于此,通常要把最能代表图像的本质特征提取出来(量化),以便进行后续操作。
1.3.2 特征
在一定程度上,特征是指图像核心、本质的特点。只有从图像中提取出其特征,才能更高效地处理图像。图像的特征可能是非常直观的、可视化的,也可能是不易观察的、隐藏的。在提取图像特征时,需要细心观察,特征既要体现本图像的特点,还要体现其与其他图像的差别。
图像特征示意图如图1-13所示。采用三种不同的特征描述图1-13(a)与图1-13(b)所示的图像,具体如下。
● 特征A:将黑色方块的数量作为图像特征,则图1-13(a)的特征值为11,图1-13(b)的特征值为7。这个特征值能够区分出图1-13(a)与图1-13(b),且实现起来比较容易。
● 特征B:将左侧是白色方块、右侧是黑色方块的数量作为图像特征,则图1-13(a)的特征值是5;图1-13(b)的特征值为5。这个特征值不能区分图1-13(a)与图1-13(b),且实现起来比较复杂。
● 特征C:将上方是黑色方块下方是白色方块作为图像特征,则图1-13(a)的特征值是7;图1-13(b)的特征值为3。这个特征值能够区分出图1-13(a)与图1-13(b),但实现起来比较复杂。
图1-13 图像特征示意图
通过以上比较可知,本例中使用特征A来刻画图1-13(a)与图1-13(b)是比较合理的。该特征一方面计算简单、方便;另一方面能够有效地区分两幅图像。
1.3.3 距离
为了更好地对图像进行区分、识别,通常使用距离来衡量图像之间的差异。例如,在图1-14中:
● 图1-14(a)中的黑色方块的数量为6。
● 图1-14(b)中的黑色方块的数量为11。
● 图1-14(c)中的黑色方块的数量为7。
图1-14(a)与图1-14(b)和图1-14(c)间的距离可以使用彼此之间黑色块的差值来表示:
● 图1-14(a)与图1-14(b)的距离为11-6=5。
● 图1-14(a)与图1-14(c)的距离为7-6=1。
从上述差值可以看出,图1-14(a)与图1-14(c)的距离更近,说明这两幅图像更相似。
图1-14 图像距离示意图
有时直接使用减法计算距离会得到错误的结果。例如,在图1-15中,取每幅图中左右两个黑色方块数量作为特征值,则各个图像的特征值如下:
● 图1-15(a)的特征值为(6,12)。
● 图1-15(b)的特征值为(7,11)。
● 图1-15(c)的特征值为(11,7)。
若使用减法计算距离,则距离可以表示为
● 图1-15(a)与图1-15(b)的距离为(6-7)+(12-11)=-1+1=0。
● 图1-15(a)与图1-15(c)的距离为(6-11)+(12-7)=-5+5=0。
从上述差值可以看到,图1-15(a)与图1-15(b)的距离、图1-15(a)与图1-15(c)的距离都是0。距离0表明二者完全一致,但显然图1-15(a)与图1-15(b)、图1-15(a)与图1-15(c)并不完全一致。发生误判是因为上述计算过程中存在“负负得正”现象。
图1-15 距离计算示例
为了更好地表示距离,避免“负负得正”导致的错误,通常将对应特征的差值求平方后再开根号得到的结果作为两个对象间的距离,具体为
● 图1-15(a)与图1-15(b)的距离为。
● 图1-15(a)与图1-15(c)的距离为。
上述距离计算方式,就是实践中最常用的欧氏距离(Euclidean Distance),对应的公式为
当然,也可以直接计算对应特征差值的绝对值,具体为
● 图1-15(a)与图1-15(b)的距离为|6-7|+|12-11|=2。
● 图1-15(a)与图1-15(c)的距离为|6-11|+|12-7|=10。
上述距离计算方式称为城区(City-Block)距离,又称曼哈顿距离,对应的公式为
欧氏距离是应用比较广泛的一种距离计算方式。不同的距离计算方式从不同的维度描述了距离,代表的含义不同。例如,在图1-16中,点A和点B之间的距离可以有两种计算方式:
● 曼哈顿距离:|x2-x1|+|y2-y1|=线X+线Y。
● 欧氏距离:。
图1-16 不同距离计算方式的意义
也有学者认为,因为前计算机时代算力不足,计算绝对值不如计算平方根方便,所以欧氏距离比曼哈顿距离有更普遍的应用。在实践中,有非常多的距离计算方式,可以根据实际需要选用合适的距离算法。
1.3.4 图像识别
先看一个人脸识别的例子。要进行人脸识别,首先需找到一个可以用简洁且具有差异性的方式准确反映人脸特征的模型;然后采用该模型提取已知人脸特征,得到特征集合T;再采用该模型提取待识别人脸的特征,得到特征值X;将待识别人脸的特征值X与特征集合T中的人脸特征一一对比,计算距离,并将其识别为距离最近的人脸。
人脸识别过程示意图如图1-17所示,其中:
● 图1-17(a)是待识别人脸。
● 图1-17(b)是已知人脸集合。
● 图1-17(c)是图1-17(a)的特征值X。
● 图1-17(d)是图1-17(b)中各个人脸对应的特征值(特征集T)。经过对比可知,图1-17(a)中待识别人脸的特征值88与图1-17(d)中的特征值90最为接近。据此,可以将待识别人脸图1-17(a)识别为特征值90对应的人脸“己”。
● 图1-17(e)是返回值,即图1-17(a)识别的结果是人脸“己”。
为了方便理解,可以想象在对比时有一个反向映射过程。例如:
● 图1-17(f)是待识别人脸,由数值88反向映射得到。
● 图1-17(g)是人脸集合,由图1-17(d)中的特征值反向映射得到。
通过观察图1-17(f)和图1-17(g),可以更直观地得出,图1-17(g)中第2行第2列是识别的对应结果。该识别结果是根据图1-17(c)和图1-17(d)之间的值的对应关系确立的。
图1-17 人脸识别示意图
为了方便说明和理解,上述案例假设人脸的特征值只有一个值。在实践中,会根据实际情况,选取更具代表性的、更复杂的、更多的特征值作为比较判断的依据。人脸识别原理示意图如图1-18所示,其选用四个值作为人脸特征值进行比较,进而获取识别结果。图1-18(e)表示将图像A对应的人脸识别为图1-18(b)中甲对应的人。
图1-18 人脸识别原理示意图
很多搜索引擎提供以图搜图功能,利用该功能能够找到与当前图片相似的图片。很多购物网站也提供这样的功能,当看到某个物品也想买一个时,可以直接给这个物品拍一张照片,购物网站会通过该照片找到相应物品的销售链接。以图搜图功能原理示意图如图1-19所示。由图1-19可知,以图搜图功能的原理与人脸识别的原理是一致的。
图1-19 以图搜图功能原理示意图
数字识别有着非常广泛的现实意义,也是图像识别教学中使用的非常经典的案例,其原理示意图如图1-20所示。由图1-20可以看出,数字识别原理与人脸识别和以图搜图的原理是一致的。
图1-20 数字识别原理示意图
由图1-18~图1-20可知图像识别的原理是基本一致的。将图像识别流程一般化,其示意图如图1-21所示,具体表述如下。
● 通过特征提取模块分别完成待识别图像和已知图像的特征提取。
● 分别计算待识别图像与各个已知图像之间的距离值。
● 将最小距离值对应的已知图像作为识别的结果。
图1-21 图像识别的一般流程
通过以上分析可知,在图像处理过程中特征提取是非常关键的步骤。如果能提取合适的特征,就能有效地理解图像并对图像进行处理。
1.3.5 信息隐藏
由1.3.4节可知,图像特征是图像处理非常关键的步骤,通常会根据图像特征来完成图像处理。本节将通过图像像素值的奇偶性来实现图像信息隐藏。
信息隐藏示例如图1-22所示。该示例是将数字1图像隐藏到如图1-22(a)所示的图像中。
● 图1-22(a)是载体图像。
● 图1-22(b)是从图1-22(a)中选取的一小块区域,希望在该区域内嵌入数字1图像。
● 图1-22(c)是在图1-22(b)中嵌入了数字1图像的结果。
● 图1-22(d)是嵌入了数字1图像后的载体图像。
● 图1-22(e)从图1-22(d)中提取的一小块区域,该区域嵌入了数字1图像。
● 图1-22(f)是从图1-22(e)中提取的数字1图像。
嵌入信息过程的具体步骤如下。
第一步:从图1-22(a)中选择一块区域如图1-22(b)所示。
第二步:在图1-22(b)中选取一块区域作为数字1图像的前景,如图1-22(b)中白色区域所示。
第三步:将图1-22(b)中的数字1图像前景中的所有的像素值调整为等于自身值或比自身值大1的奇数;将数字1图像的背景[图1-22(b)中的阴影部分]的所有像素值调整为等于自身或比自身值小1的偶数,得到如图1-22(c)所示结果。
第四步:用处理后的图1-22(c)替换图1-22(a)内该部分原有像素值,完成数字1图像的嵌入,得到图1-22(d)。
提取嵌入信息的具体步骤如下。
第一步:从图1-22(d)中选择包含数字1图像的区域,得到该区域的像素值,如图1-22(e)所示。
第二步:从图1-22(e)中提取信息,如果图1-22(e)中的像素值是偶数,则提取为“0”;如果图1-22(e)中的像素值是奇数,则提取为“1”;提取结果如图1-22(f)所示,从图中可以看出,数字1图像被准确地提取出来了。
图1-22 信息隐藏示例
上述信息隐藏示例还涉及一个原理:灰度图像具有256个灰度级,其像素值的范围是[0,255]。当像素值发生一个单位的变化时(变为最邻近的奇数或偶数),相当于变化了1/256,人眼观察不到这个范围的变化,因此嵌入的信息具有较好的隐蔽性。例如,图1-22(b)中右上角的像素值13变成图1-22(c)中的像素值12,人眼观察到的像素值12和像素值13在外观上是一致的,没有区别。