计算机视觉度量指标教程-全-

龙哥盟 / 2024-10-06 / 原文

计算机视觉度量指标教程(全)

原文:Computer Vision Metrics

协议:CC BY-NC-SA 4.0

零、简介

污垢。这是一罐泥土。

是的。

。。。这瓶泥土有用吗?

如果你不想要,就还给我。

——加勒比海盗,杰克斯派洛和蒂亚·达尔玛

这项工作侧重于计算机视觉度量领域的一个部分,从特征描述度量的角度,或者如何描述、计算和设计构成图像中较大对象的宏观特征和微观特征。重点是视觉流水线的像素端,而不是后端训练、分类、机器学习和匹配阶段。这本书适合参考,更高层次的课程,以及计算机视觉的自我导向学习。这本书的目标读者是已经熟悉计算机视觉和图像处理的人;然而,通过大量的插图和汇总表,即使是该领域的新手也会发现对关键概念的高层次的良好介绍。

我认为计算机视觉是一种数学艺术形式,它的研究者和实践者是艺术家。因此,这本书更像是一次艺术画廊之旅,而不是一篇技术或科学论文。提供了观察结果,提出了有趣的问题,建议使用视觉分类法来绘制该领域的概念图,并提供了参考资料来进行更深入的挖掘。这本书就像是试图绘制一幅以功能度量为中心的世界地图,尽管这张地图可能不准确且模糊,但希望其他人会受到启发,以他们自己的方式扩展细节层次,这比我或甚至少数人单独完成的要好。如果我能找到一本类似的涵盖这一特定主题的书,我就不会着手写这本书了。

书里没有的是什么

寻找计算机视觉“how-to”源代码示例、教程讨论、性能分析和快捷方式的读者不会在这里找到它们,相反,他们应该参考广受好评的http://opencv.org图书馆资源,包括许多优秀的书籍、在线资源、源代码示例和几个博客。对于实践者来说,没有什么比 OpenCV 更好的了。出于这个原因,这本书在复制 OpenCV 社区和其他地方已经提供的“如何做”的材料方面开辟了一条清晰的道路,而是提供了一个对位讨论,包括一个全面的调查、分析和方法分类。此外,不要期望所有的计算机视觉主题都被证明和性能分析所深入涵盖,因为参考书目已经很好地涵盖了这些问题:例如,机器学习、训练和分类方法只是略微介绍了一下,因为这里的重点是特征度量。

总之,这本书是关于特性度量的,展示了实践者正在使用的“什么”方法,详细观察和分析了“为什么”这些方法有效,偏向于通过观察提出问题,而不是提供太多的答案。我最喜欢提问,因为好的问题会引出很多好的答案,而每个答案往往会孕育出更多好的问题...

这本书的目标是一个调查水平,有一个分类和分析,所以没有详细的例子,个别用例或方法之间的赛马。然而,在 540 多篇参考文献中提供了更多的细节,以更深入地挖掘实际问题。此外,附录 C 中还提供了一些“操作方法”和“实际操作”资源。本书部分附带的一点“敷衍”的源代码可以在网上找到,因为附录 A 涵盖了第七章中介绍的合成兴趣点字母表的兴趣点检测器评估;以及在附录 D 中,了解第三章中涵盖的扩展 SDM 指标。

书里有什么

具体来说,第一章提供了关于 2d 图像形成和 3d 深度成像的序言,第二章促进了智能图像预处理以增强特征描述。第三章到第六章构成了对特征描述的核心讨论,重点是局部特征。全局和区域指标在第三章中介绍,特征描述符概念在第四章中介绍,视觉分类在第五章中建议,局部特征描述在第六章中介绍。真实情况数据包含在第七章的中,第八章从工程的角度讨论了假想的视觉流水线和假想的优化,作为一组练习将视觉概念结合到真实的系统中(课程作业可以设计为实现和改进第八章中的假想例子)。在第七章的中开发了一组合成兴趣点字母,并针对这些字母运行了 10 个常用检测器,结果在附录 A 中提供。很难清楚地划分图像处理和计算机视觉中的所有主题,所以在章节中有一些重叠。此外,实践中使用了许多混合方法,因此在第五章视觉分类中不可避免地会有重叠,并且创造力总是出现在地平线上,以发现使用旧方法的新的和意想不到的方式。然而,分类法是一个起点,有助于指导这本书的组织。

因此,主要目标是调查和了解用于描述特征的各种方法,而不是判断哪种方法更好。本文介绍了一些历史来描述为什么要开发某些方法,以及目标是什么性质的不变性或性能,我们让其他人来证明这些说法,因为每种方法“如何”实现决定了性能和准确性,而每种方法“用什么”来测试,就基本事实数据而言,实际上说明了故事的其余部分。如果我们能从其他人的工作中收集好的想法,那就是衡量他们工作成功的标准。

范围

为了简洁起见,我排除了与计算机视觉度量本身不直接相关的选定主题的深入处理;这是一种不寻常的方法,因为计算机视觉讨论通常包括更广泛的主题。具体来说,这里没有深入讨论的主题包括统计和机器学习、分类和训练、特征数据库构建和优化以及搜索和排序。相反,提供了参考书目。讨论了距离函数,因为它们与特征度量直接相关。(这本书的未来版本可能会深入研究计算机视觉的统计和机器学习方面,但不是现在。)

术语警告

有时文献中的术语在描述类似概念时并不一致。因此,在某些情况下,这项工作中采用的术语在独立的研究团体中并不标准化。事实上,这里可能会引入一些新的和不标准的术语,可能是因为作者不知道更好的现有术语(也许这部作品中引入的一些术语会变得标准化)。术语分歧在数学主题如聚类、回归、组距离和误差最小化方面最为明显,在计算机视觉主题如关键点、兴趣点、锚点等方面也是如此。作者认识到人们不愿意改变术语,因为许多概念都是在术语的基础上学习的。我想起了我的一个朋友,Homer Mead,他是波音公司月球车和预警机雷达的首席工程师,他下意识地拒绝从使用旧术语电容器转换到使用新术语电容器。

灵感有几个来源,主要是开拓的机会:随着边界的扩大,任何新领域总是缺乏清晰度、结构和组织,所以在这个广阔的领域,探索的机会是引人注目的:绘制出知识的结构和路径,其他人可能会跟随找到新的研究领域,沿途创建更好的标记,并将路径延伸得更远。

这本书的灵感来自于多年来与许多人的交谈。这一切是从哪里开始的?它始于 20 世纪 80 年代初的波音公司,当时我还在上大学。在我工作的高级开发研究实验室里,我接触到了计算机图形学,当时航天飞机的第一个计算机阴影 3D 渲染是以光栅形式制作的。当时,主要使用矢量图形机器,如 Evans & Sutherland Picture Systems,最终实验室增加了 BARCO 帧缓冲区,Jeff Lane 和他的团队以及 Loren Carpenter 开创了图形模型阴影图像的高级光栅计算机渲染。分形、NURBS 和 A-buffer 技术是在实验室中开发的一些方法,计算机图形的数学,如双三次曲面片和双五次曲面片,最初让我害怕图形。但我被 BARCO 帧缓冲区中的单个像素所吸引,一次一个像素,一行一帧,因为它们看起来如此直观和明显。我最初追求成像和计算机视觉,而不是所有的计算机图形和相关的数学。然而,事实证明,计算机视觉和图像处理数学更多样,而且同样复杂。从那以后,我也花了相当多的时间在计算机图形学上。早在 20 世纪 80 年代中期,我的老板唐·斯诺(Don Snow)曾是太平洋西部系统公司(Pacific Western Systems)的联合创始人兼研究副总裁,后来在 Applied Precision 工作,他让我分析用于模式识别的维尤-PRB 固定功能硬件单元,以用于自动晶片探测(以防我们需要自己制造类似的东西),从而定位晶片上的模式并调整探测机器。相关性被用于模式匹配,我们称之为“超像素”的尺度空间搜索方法匹配速率是 NTSC 上每秒 4 个 32×32 的补丁,具有亚像素精度,我计算了位置、旋转和偏移,以对准晶片探测器平台,为晶片探测做准备;我们称之为自动校准。我设计了一个模式识别伺服系统,以几个微弧度的旋转精度和几分之一微米的位置精度来定位模式。在 20 世纪 80 年代后期,我去了 Mentor Graphics 工作,几年后我离开了 R&D 公司,向总裁 Gerry Langeler 汇报,创办了一家公司 Krig Research,专注于为高端军事和研究客户提供基于昂贵且现已灭绝的工作站(SGI、Apollo、Sun……已不复存在,现已不复存在……)的计算机视觉和成像,从那以后我一直保持着兴趣。我们的行业发生了很多变化;软件似乎都是免费的,硬件或 SOC 也几乎是免费的,所以我不知道还有谁能在这上面赚钱。

最近,其他人也提供了灵感。感谢 Paul Rosin 的合成图像和组织思想。感谢 Yann LeCun 为深度学习和卷积网络提供关键参考,感谢 Shree Nayar 允许使用一些图像,并继续通过 Cave 研究项目为计算机视觉社区提供灵感。感谢 Luciano Oviedo 对行业活动和发展战略的广泛报道以及热烈的讨论。

其他的,不胜枚举,也增加了我的旅程。尽管对话有时很简短,甚至在许多情况下是通过电子邮件或 SKYPE 进行的虚拟对话,但他们的工作和思想的影响仍然存在,因此要特别感谢几位为手稿或书籍大纲提供评论、提供图片或只是他们可能没有意识到的简单灵感的人。感谢 Rahul Suthankar,Alexandre Alahi 使用图片和讨论;Steve Seitz、Bryan Russel、Liefeng Bo 和 Xiaofeng Ren 深入讨论 RGB-D 计算机视觉和其他研究主题;Gutenberg Guerra-filho、Harsha Viswana、Dale Hitt、Joshua Gleason、Noah Snavely、Daniel Scharstein、Thomas Salmon、Richard Baraniuk、Carl Vodrick、Hervé Jégou 和 Andrew Richardson 我还要感谢与英特尔的几位同仁就计算机视觉主题进行了许多有趣的讨论,包括 Ofri Weschler、Hong Jiang、安迪库兹马、Michael Jeronimo、Eli Turiel 以及其他许多我没有提到的人。

摘要

总之,我的目标是调查人们用于功能描述的方法(生成的关键指标),并使任何人都更容易理解实践中的方法,以及如何使用视觉分类和鲁棒性标准评估方法以获得他们想要的结果,并找到扩展艺术状态的领域。在听到该工作第一个版本的所有反馈后,我希望创建第二个版本,甚至更好。

斯科特战争

2014 年域年

一、图像捕获和表示

身体转化为光,光转化为身体,这非常符合自然的进程,自然似乎很喜欢这种转化

-艾萨克牛顿

计算机视觉从图像开始。本章概述了一系列涉及图像捕捉、处理和表示的主题,包括计算成像、2D 成像和 3D 深度成像方法、传感器处理、立体和单目多视图立体的深度场处理以及表面重建。提供了所选主题的高层次概述,并为感兴趣的读者提供了深入挖掘的参考。在 2D 和 3D 成像领域有深厚背景的读者可以从本章的轻松阅读中受益。

图像传感器技术

本节提供图像传感器技术的基本概述,作为理解图像如何形成以及开发图像传感器处理的有效策略以优化计算机视觉图像质量的基础。

典型的图像传感器由 CCD 单元 (电荷耦合器件 )或标准 CMOS 单元(互补金属氧化物半导体)制成。CCD 和 CMOS 传感器具有相似的特性,都广泛用于商业相机。然而,今天的大多数传感器使用 CMOS 单元,主要是出于制造考虑。传感器和光学系统通常被集成在一起,以创建晶圆级相机 用于生物学或显微镜等应用,如图图 1-1 所示。

9781430259299_Fig01-01.jpg

图 1-1 。具有光学器件和滤色器的通用集成图像传感器装置

图像传感器旨在实现不同应用的特定设计目标,提供不同水平的灵敏度和质量。查阅厂家资料,熟悉每个传感器。例如,针对给定的半导体制造工艺优化每个光电二极管传感器单元元件的尺寸和材料成分,以便实现硅管芯面积和光强度和颜色检测的动态响应之间的最佳折衷。

对于计算机视觉,采样理论的影响是相关的——例如,应用于目标场景像素覆盖的奈奎斯特频率。传感器分辨率和光学器件必须一起为每个像素提供足够的分辨率,以对感兴趣的特征进行成像,因此,感兴趣的特征应该以对该特征重要的最小像素的最小尺寸的两倍进行成像或采样。当然,2 倍过采样只是精度的最低目标;实际上,单像素宽的特征不容易分辨。

为了获得最佳结果,应该针对给定的应用对相机系统进行校准,以确定不同照明和距离情况下的传感器噪声和像素位深度的动态范围。应该开发适当的传感器处理方法,以处理任何颜色通道的传感器的噪声和非线性响应,检测和校正坏像素,并处理几何失真的建模。如果您设计了一种简单的校准方法,使用具有精细和粗糙灰度、颜色和特征像素大小的测试图案,您可以查看结果。在第二章中,我们调查了一系列适用于传感器处理的图像处理方法。但是,让我们从调查传感器材料开始。

传感器材料

硅基图像传感器是最常见的,尽管其他材料如镓(Ga)也用于工业和军事应用,以覆盖比硅能达到的更长的红外波长。图像传感器的分辨率范围取决于所用的相机,从单像素光电晶体管相机,到工业应用的 1D 线扫描阵列,再到普通相机的 2D 矩形阵列,一直到高分辨率成像的球形阵列。(传感器配置和摄像机配置将在本章后面介绍。)

常见的成像传感器使用硅作为 CCD、CMOS、BSI 和 Foveon 方法 s 制成,本章稍后将对此进行讨论。硅图像传感器具有非线性光谱响应曲线;光谱的近红外部分被很好地感应到,而蓝色、紫色和近紫外被不太好地感应到,如图 1-2 中的所示。请注意,读取原始传感器数据并将数据量化为数字像素时,必须考虑硅光谱响应。传感器制造商在这方面进行设计补偿;然而,在校准您的相机系统和为您的应用设计传感器处理方法时,也应该考虑传感器颜色响应。

9781430259299_Fig01-02.jpg

图 1-2 。几种硅光电二极管的典型光谱响应。请注意,在 900 纳米左右的近红外范围内灵敏度最高,在 400-700 纳米的可见光谱范围内具有非线性灵敏度。由于正常的硅响应,从相机中移除 IR 滤光器增加了近红外灵敏度。(光谱数据图像 OSI 光电公司,经许可使用)

传感器光电二极管电池

图像传感中的一个关键考虑因素是光电二极管尺寸或单元尺寸。使用小型光电二极管的传感器单元将无法捕获与大型光电二极管一样多的光子。如果单元尺寸低于要捕获的可见光的波长,例如 400nm 的蓝光,则在传感器设计中必须克服额外的问题以校正图像颜色。传感器制造商非常注意设计最佳尺寸的单元,以同样好地成像所有颜色(图 1-3 )。在极端情况下,由于缺乏积累的光子和传感器读数噪声,小型传感器可能对噪声更敏感。如果光电二极管传感器单元太大,也没有任何好处,芯片尺寸和硅成本增加,没有任何优势。普通的商用传感器设备可能具有大约 1 平方微米或更大的传感器单元尺寸;然而,每个制造商都是不同的,为了达到特定的要求,需要进行权衡。

9781430259299_Fig01-03.jpg

图 1-3 。波长的原色分配。请注意,原色区域重叠,绿色是所有颜色的良好单色代理

传感器配置:Mosaic、Foveon、BSI

多光谱传感器设计有多种片上配置,包括镶嵌和堆叠方式,如图图 1-4 所示。在镶嵌法中,滤色片以镶嵌图案排列在每个单元上方。FOV eon1传感器堆叠方法 依赖于颜色波长穿透到半导体材料中的深度物理学,其中每种颜色穿透到硅的不同深度,从而对单独的颜色进行成像。总单元尺寸容纳所有颜色,因此不需要为每种颜色设置单独的单元。

9781430259299_Fig01-04.jpg

图 1-4 。(左)堆叠 RGB 单元以吸收不同深度的不同波长的 Foveon 方法,每个单元位置都有所有 RGB 颜色。(右)标准马赛克单元布局,每个光电二极管上方有 RGB 滤光片,滤光片仅允许特定波长的光进入每个光电二极管

背面照明(BSI)传感器配置重新排列芯片上的传感器布线,以允许更大的单元面积和在每个单元中积累更多的光子。有关正面和背面芯片电路布置的比较,请参见 Aptina [410]白皮书。

传感器单元的排列也影响颜色响应。例如,图 1-5 显示了原色( R、G、B )传感器以及白色( W )传感器的各种排列,其中 W 传感器有一个透明或中性滤色器。传感器单元排列允许一系列像素处理选项,例如,在传感器处理期间,在相邻单元的各种配置中组合所选像素,以形成优化颜色响应或空间颜色分辨率的像素。事实上,一些应用只是使用原始传感器数据并执行自定义处理,以提高分辨率或开发替代的颜色混合。

9781430259299_Fig01-05.jpg

图 1-5 。几种不同的细胞颜色镶嵌配置,包括白色、原色 RGB 和次生 CYM 细胞。每种配置都为传感器处理提供了不同的选项,以优化颜色或空间分辨率。(图片由英特尔出版社授权使用,来自构建智能系统)

传感器的整体尺寸和格式也决定了镜头的尺寸。一般来说,更大的镜头可以让更多的光进入,所以更大的传感器通常更适合摄影应用的数码相机。此外,芯片上的单元布局纵横比决定了像素的几何形状,例如,数码相机通常采用 4:3 的纵横比,而 35mm 胶片则采用 3:2 的纵横比。传感器配置细节值得了解,以便您可以设计最佳的传感器处理和图像预处理流水线。

动态范围和噪声

当前最先进的传感器为每个颜色单元提供至少 8 位,通常为 12 至 14 位。传感器电池需要面积和时间来积累光子,因此必须仔细设计更小的电池以避免问题。噪声可能来自光学器件、滤色片、传感器单元、增益和模数转换器、后处理或压缩方法(如果使用的话)。传感器读出噪声也会影响有效分辨率,因为每个像素单元都是从传感器中读出,发送到 A/D 转换器,并形成数字行和列以转换为像素。更好的传感器将提供更少的噪声和更高的有效位分辨率。Ibenthal 的工作[409]对去噪进行了很好的调查。

此外,每种颜色的传感器光子吸收是不同的,对于蓝色来说可能是有问题的,蓝色对于较小的传感器来说可能是最难成像的颜色。在某些情况下,制造商可能试图为每种颜色提供一种简单的内置于传感器中的伽马曲线校正方法,但这并不推荐。对于要求苛刻的色彩应用,考虑比色设备模型和色彩管理(将在第二章中讨论),或者甚至通过表征传感器每个色彩通道的非线性并开发一组简单的校正 LUT 变换。(适用于深度传感的噪声过滤方法也在第二章中有所涉及。)

传感器处理

需要传感器处理来对来自传感器阵列的像素进行去马赛克和组合,并校正感测缺陷。本节我们将讨论传感器处理的基础知识。

通常,在每个成像系统中提供专用传感器处理器,包括快速硬件传感器接口、优化的 VLIW 和 SIMD 指令,以及专用的固定功能硬件模块,以处理传感器处理的大规模并行像素处理工作负载。通常,传感器处理是透明的、自动的,并且由成像系统的制造商设置,并且来自传感器的所有图像都以相同的方式处理。可以存在旁路来提供原始数据,该原始数据可以允许用于诸如数字摄影的应用的定制传感器处理。

去马赛克

根据传感器单元的配置,如图 1-5 中的所示,采用各种去马赛克算法从原始传感器数据中创建最终的 RGB 像素。Losson 和 Yang [406]以及 Li 等人[407]所做的一项出色调查为所涉及的挑战和所采用的各种方法提供了一些背景资料。

去马赛克的主要挑战之一是像素插值,以将来自附近单元的颜色通道组合成单个像素。给定传感器单元布局的几何形状和单元布局的纵横比,这不是一个小问题。一个相关的问题是颜色单元权重 例如,每种颜色有多少应该被整合到每个 RGB 像素中。由于镶嵌传感器中的空间像元分辨率大于最终组合的 RGB 像素分辨率,因此一些应用需要原始传感器数据来利用所有可能的精度和分辨率,或者执行特殊处理以提高有效像素分辨率,或者更好地完成空间精确色彩处理和去镶嵌。

坏像素校正

像 LCD 显示器这样的传感器可能会有坏像素。厂商可以在工厂校准传感器,并提供已知缺陷的传感器缺陷图,提供这些坏像素的坐标,用于在相机模块或驱动软件中进行校正。在一些情况下,在传感器上使用自适应缺陷校正方法[408]来监控相邻像素,以主动寻找缺陷,然后校正一系列缺陷类型,例如单个像素缺陷、列或行缺陷以及例如 2×2 或 3×3 簇的缺陷。相机驱动程序还可以提供自适应缺陷分析,以实时查找缺陷,并可能在相机设置菜单中提供特殊的补偿控制。

颜色和照明校正

需要色彩校正来平衡整体色彩准确度和白平衡。如图 1-2 中的所示,硅传感器对红色和绿色的颜色敏感度通常非常好,但对蓝色的敏感度较差,因此提供最准确颜色的机会始于理解和校准传感器。

大多数图像传感器处理器都包含一个用于渐晕校正的几何处理器,,它表现为图像边缘较暗的照明,如第七章 ( 图 7-6 )所示。校正基于几何扭曲函数,该函数在工厂校准以匹配光学渐晕图案,允许可编程照明函数增加朝向边缘的照明。关于适用于渐晕的图像扭曲方法的讨论,参见参考文献[490]。

几何校正

镜头可能有几何像差或可能向边缘弯曲,产生径向失真的图像,这个问题与上面讨论的渐晕有关,并在第七章 ( 图 7-6 )中显示。为了处理镜头失真,大多数成像系统都有一个专用的传感器处理器,带有硬件加速的数字扭曲单元,类似于 GPU 中的纹理采样器。几何校正在工厂中为光学系统进行了校准和编程。关于图像扭曲方法的讨论,参见参考文献[490]。

相机和计算成像

许多新颖的相机配置正在进入商业应用,使用计算成像方法从原始传感器数据合成新图像——例如,深度相机和高动态范围相机。如图 1-6 中的所示,传统的相机系统 使用单个传感器、镜头和照明器来创建 2D 图像。然而,计算成像相机可以提供多个光学器件、多个可编程照明模式和多个传感器,从而实现新颖的应用,例如 3D 深度感测和图像重新照明,利用深度信息,将图像作为纹理映射到深度图上,以及引入新的光源,然后在图形流水线中重新渲染图像。由于计算相机开始出现在消费设备中,并将成为计算机视觉流水线的前端,我们调查了一些使用的方法。

9781430259299_Fig01-06.jpg

图 1-6 。计算成像系统与传统照相机的比较。(上图)简单的相机模型,带有闪光灯、镜头和成像设备,之后是图像增强,如锐化和色彩校正。(下图)使用可编程闪光灯、光学阵列和传感器阵列的计算成像,然后是计算成像应用

计算成像概述

计算成像[447,414]提供了从原始图像数据合成新图像的选项。计算相机可以控制可编程闪光图案投影仪、透镜阵列和多个图像传感器,以及从原始数据合成新图像,如图图 1-6 所示。要更深入地挖掘计算成像并探索当前的研究,请参见哥伦比亚大学的 CAVE 计算机视觉实验室和罗切斯特技术成像研究所。下面是一些正在使用的方法和应用。

单像素计算相机

单像素计算相机可以从同一场景的一系列单个光电探测器像素图像中重建图像。单像素相机领域[103,104]属于压缩传感研究领域,该领域还具有图像处理之外的应用,延伸到诸如模数转换的领域。

如图图 1-7 所示,单像素相机可以使用类似于衍射光栅的微镜阵列数字镜器件(DMD)。光栅排列成矩形微镜栅格阵列,允许栅格区域被打开或关闭以产生二进制栅格图案。二进制模式被设计为伪随机二进制基集。通过组合相邻区域的图案来调整网格图案的分辨率,例如,2x2 或 3x3 微镜区域的网格。

9781430259299_Fig01-07.jpg

图 1-7 。一种单像素成像系统,其中入射光通过微镜的 DMD 阵列反射到单个光电二极管上。微镜阵列中的网格位置可以对光打开或关闭,如图所示,以创建二元图案,其中白色网格正方形是反射性的和开放的,而黑色网格正方形是封闭的。(图片经许可使用,R. G. Baraniuk,压缩传感讲义)

通过一组伪随机微透镜阵列图案拍摄一系列单像素图像,然后从该组图像中重建图像。事实上,重建图像所需的模式样本数量低于奈奎斯特频率,因为使用了稀疏随机采样方法,并且随机采样方法在研究中已被证明在数学上是足够的[103,104]。网格基集采样方法直接适用于图像压缩,因为只采集相对稀疏的一组模式和样本。因为微镜阵列使用矩形形状,所以图案类似于一组 HAAR 基函数。(更多信息参见图 2-20 和图 6-22 。)

DMD 方法是值得注意的,因为可以从单个光电探测器拍摄的相当小的一组图像中重建图像,而不是像 CMOS 或 CCD 图像传感器那样从光电探测器的 2D 阵列中重建图像。由于仅使用单个传感器,该方法有望应用于由 CMOS 和 CCD 传感器成像的近红外和可见光谱之外的波长。例如,使用对不可见波长敏感的非硅传感器,DMD 方法可用于检测隐藏的武器或物质在不可见波长的发射。

2D 计算相机

可编程 2D 传感器阵列、透镜和照明器的新配置正被开发成相机系统,如计算相机【424,425,426】,其应用范围从数字摄影到军事和工业用途,采用计算成像方法来增强事后图像。计算相机借用了共焦成像[419]和共焦显微镜[421,420]的许多计算成像方法,例如,使用多个照明模式和多个焦平面图像。他们还利用第二次世界大战后开发的合成孔径雷达系统[422]的研究,使用单个移动相机平台的宽基线数据创建高分辨率图像和 3D 深度图。使用多个图像传感器的合成孔径 和使用晶圆级集成的重叠视野光学系统也是研究的主题【419】。我们在这里调查一些计算 2D 传感器方法,包括高分辨率 (HR) 、高动态范围 (HDR)和高帧率 (HF)相机。

目前商用数字百万像素相机的范围从大约 1000 万像素以上,提供的分辨率相当于或超过 35mm 相机中使用的高端胶片[412],因此图像传感器的像素大小相当于最佳分辨率胶片上的一粒银。从表面上看,似乎没有什么动机去追求更高的分辨率用于商业用途,因为目前的数字方法已经取代了大多数电影应用,电影打印机已经超过了人眼的分辨率。

然而,非常高分辨率的千兆像素成像设备被设计和构造为图像传感器和透镜的阵列,为拍摄图像后的计算成像提供了优势。一种配置是由图像传感器的正交 2D 阵列和相应的光学器件组成的 2D 阵列相机、;另一种配置是球形摄像机 如图图 1-8【411,415】,是作为 DARPA 研究项目在哥伦比亚大学 CAVE 开发的。

9781430259299_Fig01-08a.jpg

9781430259299_Fig01-08b.jpg

图 1-8 。(上图)超高分辨率千兆像素相机的组件,采用新颖的球形镜头和传感器排列。(下图)以 82,000 x 22,000 = 1.7 千兆像素显示的高分辨率图像。(所有数字和图像均由哥伦比亚大学洞穴研究项目使用)

高动态范围 (HDR)相机【416,417,418】通过拍摄不同曝光设置的场景的多幅图像,然后将这些图像组合起来,可以产生更深的像素,具有更高的位分辨率和更好的颜色通道分辨率。这种组合使用合适的加权方案来产生具有更高位深度的更深像素的新图像,例如每个颜色通道 32 个像素,从而提供超出普通商业 CMOS 和 CCD 传感器能力的图像。HDR 方法允许弱光和强光同样良好地成像,并且可以使用自适应局部方法来组合弱光和强光,以消除眩光并创建更均匀和令人满意的图像对比度。

高帧率 (HF)相机【425】能够将场景的快速连续图像捕捉成一组,并使用包围技术组合这组图像,以改变曝光、闪光、聚焦、白平衡和景深。

3D 深度相机系统

将 3D 深度场用于计算机视觉为许多应用提供了不言而喻的优势,因为计算机视觉在很大程度上关注于从 2D 图像中提取 3D 信息,这导致了各种各样的精度和不变性问题。正在为 3D 深度场计算机视觉设计新的 3D 描述符,并在第六章中讨论。

使用深度图,可以很容易地将场景分割成前景和背景,以识别和跟踪简单的对象。数字摄影应用在三维空间中结合了各种计算机视觉方法,从而变得更加丰富。使用 3D 深度图的所选区域作为遮罩实现了局部图像增强,例如基于深度的对比度、锐化或其他预处理方法。

如表 1-1 所示,从图像中提取深度的方法有很多。在某些情况下,只需要一个摄像头和传感器,其余的由软件完成。请注意,照明方法 是许多深度传感方法的关键组成部分,如结构光方法。传感器、镜头和照明的组合用于深度成像和计算成像,如图图 1-9 所示。本节我们将探讨几种精选的深度检测方法。

表 1-1 。获取深度信息的选定方法

image image

Source: Courtesy of Ken Salsmann Aptina [427], with a few other methods added by the author.

9781430259299_Fig01-09.jpg

图 1-9 。常见相机的多种镜头和传感器配置:a .常规,b .飞行时间,c .立体,d .阵列,e .全光,f .球透镜球面

深度感测并不是一个新的领域,在几个具有巨大工业应用和财政资源的相关学科中都有很好的覆盖,例如卫星成像、遥感、摄影测量和医学成像。然而,随着 Kinect 等商用深度传感相机的出现,涉及深度传感的主题在计算机视觉中越来越受关注,这使得预算有限的研究生可以使用手机或 PC 来实验 3D 深度图和点云。

多视角立体 (MVS) 深度感测已经被用于计算数字高程图或 DEM,以及数字地形图或 DTM,从使用雷达和激光雷达成像的卫星图像,以及从使用特别装备的具有高分辨率相机和稳定相机平台的飞机的区域航空勘测,包括与相邻区域的照片叠加在一起的数字地形图。照片拼接 是计算机视觉中的一个相关话题,正在受到关注。关于数字地形制图 的文献中有大量关于合适的几何模型和视差计算方法的信息。此外,通过 CAT 和 MRI 模态的 3D 医学成像 得到了丰富的研究社区的支持,使用出色的深度传感方法,并提供基于深度的渲染和可视化。然而,观察一个领域(如计算机视觉)对其他领域使用的众所周知的方法的“再发明”总是很有趣的。正如所罗门所说:“日光之下,并无新事。”在本节中,我们引用相关研究,在计算机视觉的背景下研究深度感测,并将其他相关学科的有趣旅程留给感兴趣的读者。

双目立体

Stereo [432,433,437]可能是捕捉 3D 深度图的最基本和最熟悉的方法,因为许多方法和算法都在使用,所以我们在这里提供了一个高层次的概述,并选择了一些标准参考。立体算法的第一步是通过确定摄像机系统的立体校准参数来参数化从世界坐标点到其相应图像坐标的投影变换。开源软件可用于立体声校准。 2 注意,L/R 图像对在搜索用于视差计算的特征之前被校正。计算立体深度 r ,如图图 1-10 所示。

9781430259299_Fig01-10.jpg

图 1-10 。基本双目立体原理的简化示意图

Scharstein 和 Szeliski [440]以及 Lazaros [441]的工作对立体算法和方法进行了出色的调查。立体几何是由射影欧几里得【437】组合而成;我们将在本节的后面讨论一些影响其精度的几何问题。用于比较立体算法的标准在线资源由米德尔伯里学院提供, 3 许多新算法在此进行了基准测试并提供了比较结果,包括附录 B 中讨论的大量真实情况数据集。

立体深度所需的基本几何校准信息包括以下基本内容。

  • 摄像机校准参数。相机校准超出了本工作的范围,但是参数被定义为 11 个自由参数[435,432]—3 个用于旋转,3 个用于平移,5 个固有参数—加上一个或多个镜头失真参数,以从 2D 相机空间中的像素重建世界坐标中的 3D 点。可以使用几种方法来执行相机校准,包括已知的校准图像模式或许多自校准方法之一[436]。外在参数定义摄像机在世界坐标中的位置,内在参数定义摄像机图像坐标中像素坐标之间的关系。关键变量包括光学系统下图像的主点或中心点处的两个相机之间的校准基线距离;光学系统的焦距;它们的像素大小和长宽比,这是通过传感器大小除以每个轴上的像素分辨率来计算的;以及摄像机的位置和方向。
  • 基本矩阵或本质矩阵。这两个矩阵是相关的,定义了用于投影重建的立体摄像机系统的流行几何形状【438,436,437】。它们的推导超出了本文的范围。根据所采用的算法,可以使用任一矩阵。本质矩阵仅使用外部摄像机参数和摄像机坐标,而基础矩阵取决于外部和内部参数,并揭示核线上立体图像对之间的像素关系。

在任一情况下,我们都以投影变换结束,以从立体图像对中的 2D 相机点重建 3D 点。

立体声处理步骤通常如下:

  1. 拍摄: 同时拍摄左/右图像对。
  2. 矫正: 将左右图像对矫正到同一平面上,使像素行 x 坐标与直线对齐。几种投影扭曲方法可用于纠正[437]。通过沿着 x 轴对齐图像,校正将图像间的图案匹配问题简化为沿着 x 轴的 1D 搜索。校正还可以包括作为单独步骤的光学器件的径向失真校正;然而,许多相机包括内置的工厂校准的径向失真校正。
  3. 特征描述: 对于图像对中的每个像素,隔离出每个像素周围的一个小区域作为目标特征描述符。各种方法被用于立体特征描述【215,120】。
  4. 对应: 在对面图像对中搜索每个目标特征。搜索操作通常进行两次,首先在右图像中搜索左对目标特征,然后在左图像中搜索右对目标特征。为了提高景深精度,对应需要亚像素精度。
  5. 三角测量: 使用三角测量计算匹配点之间的差异或距离[439]。使用多种方法中的一种对所有 L/R 目标特征匹配进行排序,以找到最佳质量的匹配[440]。
  6. 空洞填充: 对于没有对应的良好匹配的像素和相关联的目标特征,在深度图中的该位置有一个空洞。孔洞可能是由 L/R 图像对中的特征遮挡引起的,或者仅仅是由开始时的不良特征引起的。使用局部区域最近邻像素插值方法来填充孔洞。

立体深度-距离分辨率是视点距离的指数函数:一般来说,基线越宽,长距离深度分辨率越好。较短的基线对于近距离深度更好(参见图 1-10 和 1-20 )。据测量,人眼基线或瞳孔间距在 50 至 75 毫米之间,男性平均为 70 毫米,女性为 65 毫米。

多视图立体 (MVS) 是一种使用同一主题的不同基线从几个视图计算深度的相关方法,例如从单个或单目相机,或相机阵列。本节稍后将介绍单目、MVS 和阵列相机深度感测。

结构光和编码光

结构光或编码光使用特定的图案投射到场景中并反射回来,然后测量以确定深度;参见图 1-11 。在本讨论中,我们定义了以下使用结构光的方法[445]:

  • 空间单一模式方法 在单一图像中只需要单一照明模式。
  • 定时多路复用多模式方法 ,需要一系列模式照明和图像,通常使用二进制或 n 阵列代码,有时涉及相移或抖动后续帧中的模式以提高分辨率。常见的模式序列包括格雷码、二进制码、正弦码和其他独特的码。

9781430259299_Fig01-11.jpg

图 1-11 。所选的结构光模式和方法:a .格雷码,b .二进制码,c .规则点网格,d .随机点网格(用于原始 Kinect),e .正弦相移模式,f .压缩结构光的随机模式[446]

例如,在最初的微软 Kinect 3D 深度相机中,由几个略有不同的微网格图案或红外光的伪随机点组成的结构光被投影到场景中,然后拍摄单个图像来捕捉场景中出现的点。基于对实际系统和专利申请的分析,最初的 Kinect 使用几种方法来计算深度,包括(1)红外点的大小——较大的点和较低的模糊度意味着位置更近,而较小的点和较高的模糊度意味着位置更远;(2)光斑的形状——圆形表示平行面,椭圆形表示斜面;以及(3)通过一起使用小区域或斑点的微图案,使得分辨率不是非常好,但是噪声灵敏度是好的。使用这种方法从单个图像计算深度,而不需要几个连续的图案和图像。

多图像方法用于结构光,包括投射多组时序结构和编码图案,如图图 1-11 所示。在多图像方法中,每个图案被顺序发送到场景中并被成像,然后来自所有图案的深度测量的组合被用于创建最终的深度图。

来自结构光的深度测量的工业、科学和医学应用可以达到高精度,以扩展到微米范围的精度成像几米大小的物体。使用图案投影方法,以及使用多个照明光束产生波长干涉的激光条纹图案方法;干涉被测量以计算距离。例如,普通的牙科设备使用插入口中的小型手持式激光测距仪来创建具有缺失部分的牙齿区域的高度精确的深度图像,然后使用 CAD/CAM 微型铣床使用该图像来创建新的、实际上完美配合的牙冠或填充物。

当然,红外光模式在日光下的户外效果不好;它们被自然光洗掉了。此外,可使用的红外发射器的强度受到实用性和安全性的限制。在室内有效使用结构光的距离受到可用于 IR 发射器的功率量的限制;也许 5 米是室内红外光的现实极限。Kinect 声称目前使用均匀恒定红外照明的 TOF(飞行时间)方法的范围约为 4 米,而第一代 Kinect 传感器使用结构光具有类似的深度范围。

除了创建深度图,结构光或编码光还用于采用光学编码器的测量,如在机器人和过程控制系统中。编码器测量径向或线性位置。它们提供红外照明模式,并在标尺或十字线上测量响应,这对于线性电机和旋转丝杠等单轴定位设备非常有用。例如,像二进制位置码和反射二进制格雷码[444]这样的模式可以很容易地转换成二进制数(见图 1-11 )。每个格雷码集元素在连续元素之间的汉明距离为 1。

结构光方法在处理高镜面反射和阴影时会遇到问题;然而,这些问题可以通过在图案投影仪和场景之间使用光学漫射器来缓解,使用漫射结构光方法[443]来保持照明编码。此外,多图案结构光方法不能处理快速移动的场景;然而,单一模式方法可以很好地处理帧运动,因为只需要一帧。

光学编码:衍射光栅

衍射光栅是光学编码[447]的多种方法之一,用于创建一组用于深度场成像的图案,其中光结构元素,如镜子、光栅、光导或特殊透镜,放置在探测器或透镜附近。据报道,最初的 Kinect 系统使用衍射光栅方法来创建随机红外点照明图案。传感器上方的衍射光栅【430,431】,如图图 1-12 所示,可以提供角度敏感的像素传感。在这种情况下,光以各种角度折射到周围的细胞中,这由衍射光栅或其他光束形成元件(如光导)的位置决定。这允许相对于给定视角以不同方式处理相同的传感器数据,从而产生不同的图像。

9781430259299_Fig01-12.jpg

图 1-12 。硅上的衍射光栅用来产生用于深度成像的塔尔博特效应(1836 年左右首次观察到)。(更多信息见参考文献[430])。)衍射光栅是一种光结构元件

该方法允许减小检测器尺寸,同时使用从窄孔径衍射光栅并行捕获的低分辨率图像的组合系列来提供更高分辨率的图像。衍射光栅使得从相同的传感器数据中产生大范围的信息成为可能,包括深度信息、增加的像素分辨率、透视位移以及在图像被拍摄后在多个焦平面上的聚焦。衍射光栅是一种照明编码装置。

如图 1-13 所示,光结构或编码元件可置于多种配置中,包括【447】:

  • 客体侧编码:靠近主体
  • 光瞳平面编码:靠近物侧镜头
  • 焦平面编码:靠近探测器
  • 照明编码:靠近照明器

9781430259299_Fig01-13.jpg

图 1-13 。图案的光学结构化和编码的各种方法[447]:(从左至右):物方编码、光瞳平面编码、焦平面编码、照明编码或结构光。照明图案在光学编码器中确定

请注意,照明编码在图 1-11 中显示为结构光模式,而照明编码的变体在图 1-7 中显示,使用一组打开或关闭的镜子来创建模式。

飞行时间传感器

通过测量红外光传播和反射所花费的时间量,创建了飞行时间 (TOF)传感器【450】。TOF 传感器是一种测距仪或激光雷达[449]。有几种单芯片 TOF 传感器阵列和深度相机解决方案可用,例如第二版的 Kinect 深度相机。基本概念包括在已知时间向场景中传播红外光,例如通过脉冲 IR 激光器,然后测量光在每个像素返回所用的时间。据报道,根据 TOF 传感器的使用条件、设计中采用的具体方法以及红外激光器的功率大小,高端系统在数百米范围内的精度达到亚毫米级[449]。

TOF 传感器中的每个像素都有几个有源组件,如图 1-14 所示,包括红外传感器井、测量从照明到检测红外光的往返时间的定时逻辑,以及用于同步电子快门和脉冲红外激光器的光闸。TOF 传感器提供激光测距能力。例如,通过门控电子快门以消除短的往返响应,可以减少诸如雾或烟反射的环境条件。此外,可以通过以期望的时间间隔打开和关闭快门来测量特定的深度范围,例如长距离。

9781430259299_Fig01-14.jpg

图 1-14 。一种假设的 TOF 传感器配置。注意,光脉冲长度和传感器可以一起选通,以瞄准特定的距离范围

用于 TOF 传感器的照明方法可以对第一图像使用非常短的 IR 激光脉冲,获取没有激光脉冲的第二图像,然后获取图像之间的差异以消除环境 IR 光的影响。通过使用光子混合器设备(PMD) 用射频载波信号调制红外光束,可以测量返回的红外信号的相移,以提高精度——这在许多激光测距方法中很常见【450】。结合增强型 CCD 传感器的快速光学门控可用于在有限条件下将精度提高到亚毫米范围,即使在 100 米以上的范围内也是如此。然而,多次红外反射会给距离图像带来误差,因为单个红外脉冲是在整个场景上发出的,并且在成像之前可能会从几个表面反射。

由于 TOF 传感器的深度感测方法与传感器电子设备集成在一起,因此与立体声和其他方法相比,所需的处理开销非常低。然而,红外光在室外环境下的局限性仍然存在[448],这可能会影响深度精度。

阵列摄像机

如前面的图 1-9 所示,阵列相机包含几个相机,通常排列成 2D 阵列,如 3x3 阵列,为计算成像提供几个关键选项。用于便携式设备的商用阵列相机开始出现。如前所述,他们可以利用阵列中传感器的组合,使用多视图立体方法来计算视差。阵列相机的一些关键优势包括用于计算 3D 深度图的宽基线图像集,该 3D 深度图可以看穿遮挡及其周围,从每个传感器的较低分辨率图像插值的较高分辨率图像,全聚焦图像,以及在一个或多个位置重新聚焦的特定图像。阵列相机的最大孔径等于传感器之间的最宽基线。

径向摄像机

围绕透镜的圆锥形或径向反射镜和 2D 图像传感器创建了径向相机[413],其结合了 2D 和 3D 成像。如图 1-15 所示,径向反射镜允许 2D 图像形成在传感器的中心,而包含反射的 3D 信息的径向环形图像形成在传感器周边。通过基于锥形镜的几何形状将环形信息处理成点云,提取深度,并且图像中心的 2D 信息可以作为纹理图覆盖,用于完全 3D 重建。

9781430259299_Fig01-15.jpg

图 1-15 。(左)带有锥形镜的径向相机系统,用于捕捉 3D 反射。(中心)捕捉边缘周围的 3D 反射和中心面的 2D 信息。(右)从径向图像 3D 信息和作为纹理图的 2D 面重建的 3D 图像。(图片由哥伦比亚大学 CAVE 许可使用)

全光学:光场相机

全光方法 创建一个定义为光场的 3D 空间,由多个光学元件创建。全光系统使用一组微光学器件和主光学器件对 4D 光场进行成像,并在后处理过程中从光场中提取图像[451,452,423]。全光照相机只需要一个图像传感器,如图图 1-16 所示。4D 光场包含空间中每个点的信息,并且可以表示为体积数据集,将每个点视为具有 3D 定向表面的体素、或 3D 像素,具有颜色和不透明度。可以处理体积数据以产生不同的视图和透视位移,允许在拍摄图像后在多个焦平面聚焦。可以获取体积的切片来隔离透视并呈现 2D 图像。渲染光场可以通过使用光线追踪和体绘制方法来完成[453,454]。

9781430259299_Fig01-16.jpg

图 1-16 。全光照相机插图。可以从相同的传感器图像处理场景中的多个独立对象。拍摄图像后,可以为每个对象独立计算景深和焦距,从而在 3D 光场内调整透视和焦平面

除了光场的体积和表面渲染,来自 3D 场或体积的 2D 切片可以通过傅立叶投影切片定理[455]在频域进行处理,如图 1-17 所示。这是处理 3D MRI 和 CAT 扫描数据的医学成像方法的基础。Levoy [455,452]和 Krig [137]描述了傅立叶投影切片法对体积和 3D 范围数据的应用。基本算法描述如下:

  1. 使用 3D FFT 将体积数据正向变换成幅度和相位数据。
  2. 为了形象化,通过八分区移位每个立方体来重新排列频率体积中产生的 3D FFT 结果,以围绕体积中心的 3D 笛卡尔坐标系的中心对齐频率 0 数据,类似于 2D 频谱围绕 2D 笛卡尔坐标系的中心进行象限移位以显示频谱的方式。
  3. 从平行于 FOV 平面的体积中提取平面 2D 切片,其中切片穿过体积的原点(中心)。从频域体数据获取的切片的角度决定了期望的 2D 视图的角度和景深。
  4. 来自频域的 2D 切片通过逆 2D FFT,以产生对应于所选角度和景深的 2D 空间图像。

9781430259299_Fig01-17.jpg

图 1-17 。傅里叶投影切片定理算法的图形表示,它是光场处理的一种方法。3D 傅立叶空间用于过滤数据以创建 2D 视图和渲染图[455,452,137]。(图片由英特尔出版社授权使用,来自构建智能系统)

3D 深度处理

由于历史原因,在深度感测和相关方法的讨论中使用了几个术语及其缩写,因此我们在本节中涵盖了一些重叠的主题。表 1-1 之前提供了深度感测的基本物理方法的概要。不管深度感测方法如何,都有许多相似之处和共同的问题。考虑到相机系统的校准精度、深度场的几何模型、深度数据的测量精度、深度数据中存在的任何噪声以及预期应用,深度信息的后处理是至关重要的。

我们在此调查几个相互关联的深度感测主题,包括:

  • 稀疏深度传感方法
  • 密集深度感应方法
  • 光流
  • 同步定位和绘图(SLAM)
  • 结构来自运动(SFM)
  • 三维表面重建,三维表面融合
  • 单眼深度感应
  • 立体和多视角立体(MVS)
  • 深度感测中的常见问题

人类的深度感知依赖于一组先天和后天的视觉线索,这些线索超出了本工作的范围,并重叠到几个领域,包括光学、眼科和心理学[464];然而,我们在深度处理的上下文中提供了上述所选主题的概述。

方法概述

对于深度处理方法的讨论,根据表 1-1 所示的方法,深度感测分为两大类:

  • 稀疏深度方法 ,利用计算机视觉方法提取局部兴趣点和特征。只有选定的点被组合成稀疏的深度图或点云。随着相机或场景的移动,逐帧跟踪特征,并更新稀疏点云。通常只需要一台摄像机。
  • 密集深度法 ,计算每个像素的深度。这将使用立体声、TOF 或 MVS 等方法创建密集的深度图。它可能涉及一个或多个摄像机。

许多稀疏深度方法使用标准的单目相机和计算机视觉特征跟踪,如光流和 SLAM(这将在本节稍后讨论),并且逐帧跟踪特征描述符以计算视差和稀疏深度。密集深度方法通常更多地基于特定的深度相机技术,如立体或结构光。也有例外,下面会讲到。

深度感测和处理中的问题

深度感测方法各有特定的问题;然而,这里我们可以解决一些常见的问题。首先,一个常见的问题是深度场的几何建模 ,它很复杂,包括透视和投影。大多数深度感测方法将整个区域视为笛卡尔坐标系,这给深度解决方案带来了一些小问题。相机传感器为 2D 欧氏模型,离散体素在 3D 欧氏空间成像;然而,使用简单的笛卡尔模型在相机和真实世界之间进行映射会引入几何失真。其他问题包括对应、或未能匹配独立帧中的特征,以及噪声遮挡。我们将在下一节中探讨这些问题。

几何场和变形

场几何是影响深度感测和 2D 成像的复杂领域。对于商业应用,几何场问题可能并不重要,因为定位面部、跟踪简单物体和增强现实在 3D 精度方面并不苛刻。然而,军事和工业应用通常要求高精度和准确度,因此需要仔细的几何处理。为了理解深度感测方法常见的几何场问题,让我们来分解一下主要领域:

  • 射影几何问题,处理透视
  • 极坐标和球面几何问题,处理视角随着与观察者的距离而扩展
  • 由于透镜像差造成的径向失真
  • 坐标空间问题,由于传感器和体素的笛卡尔坐标,以及将光线从场景投射到传感器的极坐标性质

本讨论的目标是列举深度感测中的问题,而不是解决它们,并在适用的情况下提供参考。由于几何的主题是广泛的,我们只能在这里提供一些更好的方法来模拟深度场的例子。希望通过确定深度感测中涉及的几何问题,对这一重要课题给予更多的关注。对于任何深度系统,包括校正在内的完整几何模型都非常复杂。通常,在流行的商业应用中会忽略高级几何的话题;然而,我们可以肯定的是,鉴于所需的精度,粒子束武器和导弹系统等先进的军事应用不会忽视这些复杂性。

一些研究人员已经研究了处理射影几何问题的更鲁棒的非线性方法[465,466],特别是通过将核几何相关的失真建模为 3D 圆柱失真、 而不是平面失真,并通过提供合理的计算方法进行校正。此外,Lovegrove 和 Davison [484]的工作使用球形拼接方法处理几何场,以对齐整个图像进行深度融合,由于球形建模而提高了精度。

双眼单视区、帕努姆区和深度融合

如图 1-18 所示,双眼单视界区域,最早由托勒密等人在天文学背景下研究,是一个包含 3D 点的曲面,这些点与观察者的距离相同,并且位于同一焦平面上。帕努姆区 是人类视觉系统将视网膜中的点融合成相同距离和焦平面的单个物体的双眼单视界周围的区域。人类视觉系统能够调和 3D 点之间的距离并合成一个共同的深度场,这是一个小小的奇迹!双眼单视区域和帕努姆区域面临的挑战在于,任何深度算法都必须有一个后处理步骤,才能像人类视觉系统那样正确地融合这些点。误差幅度取决于通常的变量,包括基线和像素分辨率,误差在深度场的边界最明显,在中心不太明显。有些球面畸变是由于透镜朝向边缘的像差造成的,可以部分地进行校正,如本章前面讨论的早期传感器处理过程中的几何校正。

9781430259299_Fig01-18.jpg

图 1-18 。立体和多视图立体方法的问题,显示双眼单视区域和 Panum 区域,以及空间中的三个点,这三个点从左眼的角度看起来是同一点,但从右眼的角度看却不同。这三个点围绕在帕努姆区域的双眼单视界周围,并被人类融合以合成视在深度

笛卡尔坐标与极坐标:球面射影几何

如图图 1-19 所示,TOF 或单目深度传感方法中使用的 2D 传感器也有特定的几何问题;问题朝着视野的边缘增加。请注意,从空间中的一点到传感器中的一个像素的深度实际上是在一个使用极坐标的球坐标系中测量的,但传感器的几何图形是纯笛卡尔的,因此几何误差被烤成了蛋糕

9781430259299_Fig01-19.jpg

图 1-19 。2D 深度传感器和透镜具有处理距离的夸大的成像几何问题,其中深度根据透镜和传感器上的入射角而不同。注意,P1 和 P2 离焦平面的距离相等;然而,每个点通过光学系统到传感器的距离是不相等的,因此根据所使用的几何模型,计算的深度将是不准确的

因为立体和 MVS 方法也使用单个 2D 传感器,所以影响单个传感器深度感测方法的相同问题也影响多相机方法,增加了开发精确且计算合理的几何模型的困难。

深度粒度

如图 1-20 所示,简单的笛卡尔深度计算无法将深度场分解成线性均匀的粒度;事实上,深度场粒度随着与传感器的距离成指数增加,而在长距离下解析深度的能力则不太准确。

9781430259299_Fig01-20.jpg

图 1-20 。典型立体相机系统的 z 深度粒度非线性问题。注意,使用立体和 MVS 方法的实际深度感测在深度场中具有局限性,主要受像素分辨率、基线和焦距的影响。在 10 米处,深度粒度几乎是米,因此对象必须移动至少+或-米,以便计算测量的立体深度的变化

例如,在一个使用 480p 视频分辨率的基线为 70mm 的假设立体视觉系统中,如图图 1-20 所示,10 米处的深度分辨率下降到大约 1 米;换句话说,在 10 米远的地方,物体可能看起来不会在 Z 方向移动,除非它们在 Z 方向移动了至少正负一米。深度分辨率可以简单地通过加倍传感器分辨率来加倍。随着距离的增加,人类越来越多地使用单眼深度线索来确定深度,例如物体的大小、物体的运动速度、颜色强度和表面纹理细节。

一致

对应或特征匹配对于大多数深度感测方法来说是常见的。对于立体特征匹配算法的分类,参见 Scharstein 和 Szeliski [440]。在这里,我们沿着应用于立体、多视图立体和结构光的特征描述符方法和三角测量的路线讨论对应性。

亚像素精度 是大多数深度传感方法的目标,因此存在几种算法【468】。通过拟合表面来找到最高匹配来关联两个补丁或强度模板是很流行的;然而,傅立叶方法也用于关联相位【467,469】,类似于强度关联方法。

对于立体系统,在特征匹配之前对图像对进行校正,以便在大约相同的比例下沿着相同的线找到特征,如图图 1-11 所示;具有很少或没有旋转不变性的描述符是合适的[215,120]。诸如相关性模板的特征描述符是好的,而诸如 SIFT 特征描述方法 [161]的强大方法是过度的。特征描述符区域可以是有利于在 x 轴上的差异并且期望在 y 轴上有很小变化的矩形,例如矩形 3×9 描述符形状。差异预计出现在 x 轴,而不是 y 轴。使用描述符形状的几种窗口大小调整方法,包括固定大小和自适应大小[440]。

多视图立体系统类似于立体;然而,校正阶段可能不那么精确,因为帧之间的运动可能包括缩放、平移和旋转。由于缩放和旋转在帧之间可能有显著的对应问题,其他特征描述的方法已经被应用于 MVS,具有更好的结果。应用于多视图和宽基线立体的一些值得注意的特征描述符方法包括 MSER [194]方法(也在第六章的中讨论),其使用斑点状补片,以及苏珊[164,165]方法(也在第六章的中讨论),其基于具有特征存在的已知质心或核心的对象区域或分割来定义特征。

对于结构光系统,光模式的类型将决定特征,相位的相关性是一种流行的方法[469]。例如,依赖于使用相位相关[467]模板匹配的相移模式的结构光方法声称精确到 1/100 个像素的分之一。其他方法也用于结构光对应,以实现亚像素精度[467]。

孔洞和遮挡

当一个图案不能在帧之间匹配时,深度图中存在一个。孔也可能是由咬合引起的。无论哪种情况,深度图都必须修复,有几种方法可以做到这一点。应提供一张球洞图,显示问题所在。一种简单的方法是在局部深度图补片中使用双线性插值来填补空洞。另一种简单的方法是使用来自当前扫描线的深度图中的最后一个已知良好的深度值。

存在用于处理遮挡的更鲁棒的方法[472,471],其使用计算更昂贵但稍微更精确的方法,例如自适应局部窗口来优化插值区域。处理孔洞的另一种方法是将表面融合到深度体【473】(接下来讨论),由此将多个连续的深度图整合到深度体中作为累积表面,然后可以从深度体中提取深度图。

表面重建和融合

从深度图信息创建表面的一般方法是表面重建。计算机图形方法可用于渲染和显示表面。基本思想是组合几个深度图来构建一个更好的表面模型,包括表面的 RGB 2D 图像渲染为纹理图。通过创建集成来自不同视点的若干深度图的 3D 表面的迭代模型,可以增加深度精度,可以减少或消除遮挡,并且创建更宽的 3D 场景视点。

Curless 和 Levoy [473]的工作提出了一种将多个距离图像或深度图融合到 3D 体积结构中的方法。该算法通过整合多个距离图像将所有距离图像作为等值面渲染到体积中。使用存储在现有表面的体数据结构中的带符号的距离函数和加权因子,新的表面被集成到体中,用于实际表面存在的位置的累积最佳猜测。当然,生成的表面有几个令人满意的特性,包括减少噪音、减少孔洞、减少遮挡、多视点和更好的精确度(见图 1-21 )。

9781430259299_Fig01-21.jpg

图 1-21 。(右)Curless 和 Levoy [473]从距离图像或深度图构建表面的方法。这里显示的是使用光线投射投射到体积中的三个不同的加权表面测量。(左)Kinect 融合方法的处理流程

应用于 SLAM 的 Curless 和 Levoy 方法的衍生方法是 Kinect 融合方法【474】,如图图 1-22 所示,使用计算密集型 SIMD 并行实时方法,不仅提供表面重建,还提供摄像机跟踪和 6 自由度或 6 自由度摄像机姿态。光线追踪和纹理贴图用于表面渲染。还有其他从多幅图像进行表面重建的方法[480,551]。

9781430259299_Fig01-22.jpg

图 1-22 。使用 ESM [485]获得六自由度相机姿态的密集全图像对准解决方案的图示

噪音

噪声是深度传感器的另一个问题[409],各种原因包括低照度和在某些情况下的运动噪声,以及劣质的深度感测算法或系统。此外,深度图通常非常模糊,因此可能需要图像预处理,如第二章中的所述,以减少明显的噪声。许多人更喜欢用于深度图处理的双边滤波器[302],因为它尊重局部结构并保留边缘过渡。此外,已经开发了其他噪声滤波器来弥补双边滤波器的弱点,这些滤波器非常适合于去除深度噪声,包括导向滤波器[486],其可以像双边滤波器、边缘避免小波方法[488]和域变换滤波器[489]一样执行边缘保持噪声滤波。

单目深度处理

单目或单传感器深度感测使用逐帧运动来创建立体视差,从而从成对的图像帧创建深度图。在立体对之间具有校准的固定几何形状的立体处理的假设不适用于单目方法,因为每次摄像机移动时,必须重新计算摄像机姿态。摄像机姿态是一个 6 自由度 (6DOF)方程,包括 x、y、z 沿各轴的直线运动和绕各轴的滚动、俯仰、偏航旋转运动。在单目深度感测方法中,必须为每一帧计算相机姿态,作为比较两帧和计算视差的基础。

注意,6DOF 矩阵的计算可以使用惯性传感器、如加速度计和 MEMS 陀螺仪【483】作为粗对准步骤来增强,随后是稍后讨论的关于光流的基于视觉特征的表面对准方法。由于商用惯性传感器是手机和平板电脑的标准配置,随着传感器的成熟,惯性姿态估计将变得更加有效和常见。虽然商用加速度计的精度不是很好,但单目深度传感系统可以利用惯性传感器进行姿态估计,从而节省计算时间。

多视角立体

大多数单目多视图立体(MVS)深度算法的几何模型是基于射影几何和核几何;Hartley 和 Zisserman [437]在经典文本中对两者进行了很好的概述。Seitz 等人【478】对六种 MVS 算法进行了分类和准确性比较。在这一节中,我们来看几个有代表性的方法。

稀疏法:PTAM

稀疏 MVS 方法创建稀疏的 3D 点云,而不是完整的深度图。稀疏深度的基本目标很简单:逐帧跟踪特征,计算特征差异以创建深度,并执行 6DOF 对齐以定位新帧并获得相机姿态。根据应用的不同,稀疏深度可能非常适合用作特征描述符的一部分,以增加透视视点的不变性,或者为基于场景中几个关键地标的导航提供足够的信息。机器人社区已经开发了几种稀疏深度感测方法,分别称为 SLAMSFM光流(下面讨论)。

然而,我们首先通过讨论一种特定的方法来更详细地说明稀疏深度感测:并行跟踪和映射(PTAM)【456,457】,它既可以跟踪 6DOF 相机姿态,又可以生成适用于轻型增强现实应用的稀疏深度图,从而允许将化身逐帧放置在场景中的已知位置和方向。基本算法由两部分组成,它们在并行线程中运行:用于更新姿态的跟踪线程和用于更新稀疏 3D 点云的映射线程。接下来,我们将对每一项进行快速概述。

映射线程处理最后 N 个关键帧的历史缓冲区和历史缓冲区中每一帧的 N 级图像金字塔,通过束调整过程(简单地说就是通过选择的最小化方法,例如 leven Berg-Marquardt【437】)使用最新的输入深度特征,从该历史缓冲区中不断细化稀疏的 3D 点云。当时间允许时,在低场景运动期间,束调整过程可以在有限的一组最近帧上执行局部调整,或者在所有帧上执行全局调整。

跟踪线程基于已知良好特征最后出现的位置的投影,扫描输入图像帧的预期特征,以引导特征搜索,使用 6DOF 相机姿态作为投影的基础。FAST9 [138]角点检测器用于定位角点,随后是 Shi-Tomasi [157]非最大抑制步骤,以移除弱角点候选(在第六章中详细讨论)。特征匹配阶段遵循图像金字塔上由粗到细的渐进过程来计算 6DOF 姿态。

目标特征在新的帧中使用围绕每个所选角的 8×8 补丁进行计算。参考特征也被计算为来自原始补丁的 8×8 补丁,原始补丁取自它们被发现的第一幅已知图像。为了在特征匹配之前对准参考和目标补片,每个参考补片的表面法线用于相对于最后已知的 6DOF 相机姿态预扭曲补片,并且使用零均值 SSD 距离来执行对准的特征匹配。

定位失败时,单目深度感测的一个弱点就显现出来了;也就是说,如果运动太多,或者光照变化太大,系统可能无法定位并且跟踪停止。另一个缺点是,该算法必须完全针对特定的局部场景或工作空间(如桌面)进行初始化。对于初始化,PTAM 遵循五点立体声校准方法,需要几秒钟的时间与用户合作执行。另一个缺点是,包含点云的 3D 体积的大小旨在用于小的局部场景或工作空间。不过从积极的一面来说,3D 点云的精度非常好,接近像素大小;姿态对于 AR 或游戏应用来说足够精确;并且可以通过在场景中走动来创建 360 度的透视点云。PTAM 已经在移动电话[456]上实现,使用适度的计算和存储器资源,具有准确度和帧速率的折衷。

密法:DTAM

与稀疏方法相比,密集单目深度感测是相当计算密集型的,因此研究和开发更加有限。目标与稀疏单目深度大致相同——即,计算用于图像对齐的 6DOF 相机姿态,但创建密集的每像素深度图,而不是稀疏的点云。为了便于说明,我们强调了由纽科姆、洛夫格罗夫和戴维森[482]开发的密集跟踪和绘图方法(DTAM)中的关键概念。

虽然 DTAM 的目标是计算每个像素的密集深度,而不是稀疏深度,但 DTAM 与 PTAM [457]有一些相同的要求,因为两者都是单目方法。DTAM 和 PTAM 都需要计算每个新帧的 6DOF 姿态,以便对准新帧来计算视差。DTAM 还需要一个用户辅助的场景单目校准方法,它使用 PTAM 校准方法。DTAM 也适用于小型的本地化场景或工作空间。DTAM 分享了取自 Lovegrove 和 Davison [484]的球面拼接方法的几个背景概念,包括基于有效的二阶最小化(ESM)方法[485]的整个图像对齐的概念,,据报道,该方法使用比 LK 方法[458]更少的迭代来找到稳定的表面对齐,作为生成 6DOF 姿态的过程的一部分。

显然,DTAM 和球面镶嵌都使用球面坐标几何模型来将新帧镶嵌到密集的 3D 表面中,在图像金字塔上从粗略到精细对准,以迭代 6DOF 相机姿态的解决方案。全像面对齐的思路如图图 1-22 所示。使用局部导向滤波方法【486】将新的和现有的深度表面整合到成本体积中。也就是说,引导滤波器使用引导图像来将进入的深度信息合并到成本体中。

DTAM 还充分利用了 SIMD 指令和高度线程并行的 SIMT GPGPU 编程,以获得在商用 GPU 硬件上实时操作所需的性能。

光流、SLAM 和 SFM

光流以位移矢量的形式测量特征和图案在帧与帧之间的运动。光流类似于稀疏单目深度传感方法,它可以应用于宽基线立体匹配问题[463]。由于光流研究及其应用领域广阔[459,460,461],我们在此仅提供介绍,着眼于描述所使用的方法和获得的特征。

光流可以被认为是稀疏特征跟踪问题,其中特征可以被认为是一个粒子【462】,因此光流和粒子流分析是相似的。粒子流分析应用于各种粒子场流分析问题,包括天气预报,模拟燃烧和爆炸,流体动力学和机器人导航。存在用于 2D 和 3D 光流的方法。各种光流算法关注的是离散标量值的连续场中的跟踪特征描述符或矩阵,而不是单个标量或像素。对于计算机视觉,光流算法的输入是一组连续的 2D 图像和像素,或 3D 体积和体素,输出是一组显示被跟踪特征的运动方向的矢量。

早期 Lucas Kanade (LK)方法【458,459,460,461】的许多衍生和替代方法被用于光流;然而,这仍然是最受欢迎的参考点,因为它以相关性模板的形式使用本地特征(如第六章中的所述)。Baker 和 Matthews 的 Lucas Kanade 20 years on,【480】对基于 LK 的最先进方法进行了很好的报道。高效的二阶最小化(ESM)方法【485】与 LK 方法相关。据报道,ESM 是一种稳定的解决方案,使用的迭代次数比 LK 少。相反,它依赖于像素邻域,如 3×3 矩阵或模板区域,并试图猜测特征移动的方向,迭代搜索局部区域,并使用最小二乘解对搜索结果进行平均,以找到最佳猜测。

虽然 LK 方法有许多变体[459,460,461],但大多数 LK 导出的光流方法的关键假设包括帧与帧之间的小的特征位移、刚性特征和以局部梯度形式的足够的纹理信息,以便识别特征。使用各种方法来寻找局部梯度,例如 Sobel 和 Laplacian(在第二章中讨论)。具有帧与帧之间的大特征位移和很少纹理信息的场不太适合 LK 方法。这是因为 LK 算法通过检查每个局部矩阵的特征值来优化迭代解,从而忽略了几乎没有梯度信息的区域。然而,最近的和稳健的研究方法正在超越 LK [459,460]的限制,并包括 Deepflow [344],它是为可变形特征和大位移光流[394]设计的,使用类似于卷积网络[339]的多层特征尺度层次[404]。

表面重建在定位和测绘中的应用被用于同时定位和测绘 (SLAM) 和从运动中构造 (SFM)的方法中——例如,在机器人导航中。SLAM 的一个目标是定位或找到当前位置和 6DOF 相机姿态。另一个目标是创建包含深度的局部区域图。要更深入地了解 SLAM 和 SFM 方法,请参阅贝利和休·达兰特-威特的历史调查。

3D 表示:体素、深度图、网格和点云

深度信息以各种可转换的格式表示和存储,这取决于预期的用途。我们在这里总结了一些常见的格式;参见图 1-23 。

9781430259299_Fig01-23.jpg

图 1-23 。各种 3D 深度格式。泽尼克多项式的渲染。(从左到右):深度图,使用 3D 四边形的多边形网格渲染,相当于体素的点云渲染

对于不同的算法来说,在深度格式之间进行转换的能力是可取的,并且很容易做到。常见的 3D 深度格式包括:

  • 2D 像素阵列,3D 深度图:2D 像素阵列是内存中 2D 图像的默认格式,它是许多处理操作的自然存储格式,如卷积和邻域过滤。对于深度图图像,像素值是 Z ,或深度值。数组中的每个点可能包含{颜色,深度}。
  • 3D 体素体积:由 3D 体素阵列组成的 3D 体数据结构对于几种算法是理想的,包括用于 3D 表面重建的深度图集成和用于图形渲染的表面光线跟踪。体素是体积元素,就像像素是图片元素一样。每个体素可能包含{颜色,正常};深度坐标隐含在体积结构中。
  • 3D 多边形网格:在标准 3D 多边形网格中存储 3D 点提供了一组连接的点或顶点,每个点或顶点具有表面法线、3D 坐标、颜色和纹理。网格格式非常适合在 GPU 流水线中渲染表面,如 OpenGL 或 DirectX。网格中的每个点可以包含 {x,y,z,颜色,法线},,并且与标准模式中的相邻点相关联,例如描述表面的四边形或三角形。
  • 3D 点云:这是一种稀疏结构,可以直接转换成标准的 3D 多边形网格。点云格式是稀疏单目深度传感方法的理想选择。云中的每个点都可能包含 {x,y,z,颜色,法线}。

摘要

在这一章中,作为视觉流水线的第一步,我们概述了图像传感方法和传感器图像处理方法。我们讨论了可用的图像传感器技术,着眼于可能有助于充分利用图像数据的图像预处理,因为图像传感方法通常决定了所需的图像预处理。(关于图像预处理的更多讨论在第二章中提供。)讨论了用于 2D 和 3D 成像的传感器配置,以及用于计算成像以在捕获数据后创建新图像的各种相机配置,例如 HDR 图像和图像重聚焦。深度成像方法也在这里讨论,包括立体和飞行时间,因为移动设备越来越多地为消费应用提供 3D 深度相机技术。深度图可用于计算机视觉中解决许多问题,如前景和背景物体的三维特征描述和三维图像分割。3D 深度处理和 3D 特征的主题贯穿本书始终;第六章涵盖 3D 特征描述符,第七章和附录 B 涵盖 3D 真实情况数据。


1 Foveon 是 Foveon Inc .的注册商标。

2 http://opencv.org,摄像机标定和三维重建

3

二、图像预处理

“我走进去,发现尼摩船长正在用代数方法计算 x 和其他量。”

—儒勒·凡尔纳,海底两万里

本章描述了用于准备图像以供进一步分析的方法,包括兴趣点和特征提取。这些方法中的一些对于全局和局部特征描述也是有用的,特别是从变换和基空间导出的度量。重点是计算机视觉的图像预处理,因此我们没有涵盖应用于计算摄影和照片增强等领域的所有图像处理主题,因此我们让感兴趣的读者参考数字图像处理和信号处理中的各种其他标准资源[4,9,325,326],我们还指出了一些有趣的研究论文,这些论文将增强对这些主题的理解。

image 在图像处理方面有很强背景的读者可以从本章的轻松阅读中受益。

图像处理透视

图像处理是一个广阔的领域,不可能在一章中涵盖。那么我们为什么要在一本关于计算机视觉的书中讨论图像预处理呢?原因是促进局部和全局特征描述的科学,因为在特征描述的讨论中通常忽略图像预处理。由于应用和图像数据将指导图像预处理阶段,因此根据特征描述,此处涵盖了一些通用图像处理主题,旨在说明而非禁止。

有些人会认为图像预处理不是一个好主意,因为它扭曲或改变了原始数据的真实性质。然而,图像预处理的智能使用可以提供益处并解决问题,最终导致更好的局部和全局特征检测。我们调查了图像增强和校正的常用方法,这些方法会以有利和不利的方式影响视觉流水线下游的特征分析,具体取决于这些方法的使用方式。

图像预处理可能对特征提取的质量和图像分析的结果具有显著的积极影响 。图像预处理类似于数据集的数学归一化,这是许多特征描述符方法中的常见步骤。或者打个音乐的比方,把图像预处理想象成一个有一系列控件的声音系统,比如没有音量控件的 raw 声音;用一个简单的音调旋钮控制音量;音量控制加上高音、低音和中音;或者音量控制加上完整的图形均衡器、效果处理和卓越的扬声器,营造出一个听觉卓越的房间。这样,本章通过描述校正和增强的组合来促进图像预处理,校正和增强是计算机视觉流水线的基本部分。

图像预处理过程中需要解决的问题

在本节中,我们将根据您选择的特征描述符方法,为图像预处理提供一些建议。直接来自摄像机的原始图像数据可能会有各种各样的问题,如第一章中所述,因此它不太可能产生最佳的计算机视觉效果。这就是为什么仔细考虑图像预处理是至关重要的。例如,使用灰度数据的局部二进制描述符将需要与彩色 SIFT 算法不同的预处理;此外,需要一些探索性工作来微调图像预处理阶段以获得最佳结果。我们通过遵循四个基本的特征描述方法家族的视觉流水线来探索图像预处理,具有一些例子,如下:

  1. 本地二进制描述符 (LBP,ORB,FREAK,others)
  2. 光谱描述符 (SIFT,SURF,其他)
  3. 基空间描述符 (FFT,小波,其他)
  4. 多边形形状描述符 (斑点对象面积、周长、质心)

在第五章的中,这些特性描述度量家族被发展成一个分类法。在此之前,第四章讨论了特征描述符构建概念,而第三章涵盖了全局特征描述,然后第六章调查了局部特征描述。此处介绍的图像预处理方法和应用是示例,但在第八章中,我们将根据各种视觉流水线开发一组更完善的示例,包括预处理阶段的特定应用讨论。

视觉流水线和图像预处理

表 2-1 列出了常见的图像预处理操作,用四个描述符族中每一个的例子说明了这些图像预处理步骤之间的差异和共性,可以在特征描述之前应用。我们这里的目的是说明而不是禁止或限制所选择的方法。

表 2-1 。应用于不同视觉流水线的可能的图像预处理增强和校正

image

局部二元特征处理点对的像素强度比较。这使得比较对光照、亮度和对比度相对不敏感,因此可能不太需要图像预处理来获得良好的结果。文献中描述的当前局部二元模式方法通常不需要太多的图像预处理;它们依赖于一个简单的比较阈值,该阈值可以根据光照或对比度进行调整。

光谱描述符,如 SIFT(作用于局部区域梯度)和 SURF(使用具有局部区域上的积分像素值的 HAAR-like 特征),提供了不同的预处理机会。使用图像金字塔的方法通常对图像金字塔执行一些图像预处理,以使用高斯滤波来平滑金字塔的较高层,从而创建数据的尺度空间表示。在计算梯度之前,基本的照明校正和过滤可能有助于增强图像,例如,增强可能包含特征的梯度边缘信息的强度带内的对比度。但是一般来说,文献没有报道用于在特征提取之前预处理图像数据的任何特定方法的好的或坏的结果,并且其中存在机会。

基础空间要素通常是全局的或区域性的,跨越一个规则形状的多边形-例如,在整个图像或块上计算的傅立叶变换。然而,基空间特征可以是局部特征的一部分,例如 LBP 直方图的傅立叶谱,其可以在局部描述符的直方图面元值上计算以提供旋转不变性。另一个例子是傅立叶描述符,用于计算显示特征圆度的径向线段长度的多边形因子,以提供旋转不变性。参见第三章,尤其是图 3-19 。

最复杂的描述符族是基于多边形形状的描述符,它可能需要几个图像预处理步骤来分离图像中的多边形结构和形状以进行测量。多边形形状描述流水线可能涉及从图像增强到结构形态学和分割技术的所有内容。设置面要素形状提取的预处理通常比任何其他方法都需要更多的工作,因为阈值和分割需要微调才能获得良好的结果。还要注意,多边形形状描述符不是局部模式,而是更大的区域结构,其特征跨越数十甚至数百个像素,因此处理也可以更密集。

在某些情况下,需要对图像进行预处理,以纠正否则会对特征描述产生不利影响的问题;我们接下来看看这个。

修改

在图像预处理期间,在特征测量和分析之前,图像中可能存在应该被校正的伪像。这里有各种候选人进行更正。

  • 传感器校正。在第一章中讨论过,这些包括坏点校正、几何镜头失真和渐晕。
  • 灯光校正。照明可以引入使局部纹理和结构模糊的深阴影;此外,场景中不均匀的照明可能会扭曲结果。候选校正方法包括等级滤波、直方图均衡化和 LUT 重映射。
  • 噪音。这有多种形式,可能需要特殊的图像预处理。有许多方法可供选择,本章将对其中一些方法进行概述。
  • 几何校正。如果整个场景被旋转或从错误的视角拍摄,在特征描述之前校正几何图形可能是有价值的。正如在第四章、第五章和第六章中所讨论的,一些特征比其他特征对几何变化更具鲁棒性。
  • 颜色校正。重新分配色彩饱和度或校正亮度通道中的照明伪像可能会有所帮助。通常,色调是较难校正的属性之一,使用简单的伽马曲线和 sRGB 色彩空间可能无法进行校正。我们将在本章后面介绍更精确的比色法。

提高

增强功能用于优化特定的功能测量方法,而不是修复问题。常见的图像处理增强功能包括锐化和色彩平衡。以下是一些图像增强的一般示例,以及它们对特征描述的潜在好处。

  • 比例-空间金字塔。当使用倍频程标度和像素抽取对图像进行子采样以创建金字塔来构建金字塔时,会引入子采样伪像和锯齿状像素过渡。尺度空间金字塔构建过程的一部分涉及将高斯模糊滤波器应用于子采样图像,这将移除锯齿状伪像。
  • 照明。一般来说,光照总是可以增强的。可以使用简单的 LUT 重映射和像素点操作以及直方图均衡化和像素重映射来增强全局照明。可以使用梯度滤波器、局部直方图均衡化和等级滤波器来增强局部照明。
  • 模糊和对焦增强。在预处理阶段,可以采用许多公知的锐化和模糊滤波方法。例如,为了补偿由旋转引入的像素混叠伪像,其可能表现为模糊精细细节的模糊像素,可以在梯度计算之前使用锐化滤波器来增强边缘特征。或者相反,旋转伪影可能太强,可以通过模糊来消除。

在任何情况下,预处理增强或校正取决于使用图像的描述符和应用。

为特征提取准备图像

每个特征描述方法家族对于流水线的预处理阶段具有不同的目标。让我们看看每个系列的几个例子,并检查每个系列可能的图像预处理方法。

本地二进制族预处理

局部二元描述符族主要与点对强度值比较有关,几种点对模式在第四章的中进行了说明,用于 FREAK、BRISK、BRIEF 和 ORB 等常用方法。如图图 2-4 所示,点与点之间的比较差(<、>、=)才是最重要的,因此几乎不需要任何图像预处理。基于上述讨论,以下是两种图像预处理方法:

  1. 保持像素不变。除了使用像素值差比较阈值之外什么也不做,例如在 Census 变换和其他方法中所做的,因为阈值负责过滤噪声和其他伪像。

    *if(|point1–point2|>threshold)*
    
  2. 使用过滤。除了使用比较阈值之外,应用合适的过滤器来移除局部噪声,例如平滑或等级过滤器。或者,采取相反的方法,使用锐化过滤器来放大微小的差异,也许随后是平滑过滤器。根据数据和应用,这两种方法都可能奏效。

图 2-1 使用 3x3 局部区域中的中心相邻点对比较来说明局部阈值和局部二进制模式 LBP 的预处理操作之间的差异,如下所示:

  • 左图:原始未处理的局部 3x3 区域数据;比较阈值= 5,暗像素距离中心像素> 5。
  • 左中图像:比较阈值= 10;注意,通过简单地改变阈值,图案形状是不同的。
  • 右侧中心图像:在对 3x3 区域应用拉普拉斯锐化滤波器后,请注意中心像素值从 52 变为 49,因此在比较阈值设置为 5 的情况下,图案现在不同于左侧的原始图案。
  • 右图:拉普拉斯滤波数据的阈值设置为 10;请注意不同的结果二进制模式。

9781430259299_Fig02-01.jpg

图 2-1 。LBP 如何受到预处理的影响,显示了比较阈值的影响。(左)比较阈值= 5。(中间偏左)比较阈值= 10。(中右)应用拉普拉斯算子后的原始数据。(右)对拉普拉斯滤波数据比较阈值= 5

光谱族预处理

由于光谱类别中的方法范围很广,因此很难概括可能有用的潜在预处理方法。例如,SIFT 涉及在每个像素计算的梯度信息。SURF 关注的是 HAAR 小波或积分像素值的局部矩形区域的组合,这降低了单个像素值的重要性。

对于使用类似 HAAR 特征的基于积分图像的方法,例如 SURF 和 Viola Jones,这里有一些假设的预处理选项。

  1. 什么也不做。简单地通过对局部区域像素值求和,从积分图像计算 HAAR 特征;在总和中没有保留局部像素中的精细结构,因此一种选择是对图像预处理不做任何事情。
  2. 噪声去除。这在 HAAR 预处理阶段似乎不需要,因为局部区域中的积分图像求和具有滤除噪声的趋势。
  3. 光照问题。这可能需要预处理;例如,如果训练数据的照明不同于当前帧,对比度增强可能是个好主意。在这种情况下,一种预处理方法是为训练集中的图像计算全局对比度度量,然后在每一帧中计算相同的全局对比度度量,并且如果对比度偏离超过阈值,则调整图像对比度以更接近期望的全局对比度度量。对比度增强的方法包括 LUT 重映射、全局直方图均衡和局部自适应直方图均衡。
  4. 模糊不清。如果模糊是当前帧中的问题,它可能表现为类似于局部对比度问题,因此可能需要局部对比度增强,例如锐化滤波器。计算诸如 SDM 的全局统计度量作为地面实况数据的一部分来测量局部或全局对比度可能是有用的;如果当前图像在对比度上偏离太多,可以应用合适的对比度增强作为预处理步骤。

注意在图 2-2 中,增加局部区域对比度会导致更大的梯度和更明显的边缘。依赖于局部梯度信息的特征描述符受到局部对比度的影响。

9781430259299_Fig02-02.jpg

图 2-2 。局部对比度对梯度和边缘检测的影响:(左)原始图像和 Sobel 边缘。(右)对比调整后的图像,放大局部区域细节和生成的 Sobel 边缘

对于使用局部区域梯度的 SIFT 类型描述符,预处理可能有助于在计算之前增强局部梯度,从而影响某些特征:

  1. 模糊不清。这将抑制梯度幅度计算,并可能使确定梯度方向变得困难,因此可能应采用局部等级滤波器、高通滤波器或锐化滤波器。
  2. 噪音。这将加剧局部梯度计算,使它们变得不可靠,因此应用几种现有的噪声去除算法之一可能会有所帮助。
  3. 对比。如果局部对比度不够高,梯度计算就很困难且不可靠。也许可以应用局部直方图均衡化、LUT 重映射、等级滤波器或者甚至锐化滤波器来改善结果。

基空间族预处理

根据我们在这项工作中遵循的分类法,不可能对基空间方法的图像预处理进行归纳,因为它们是非常多样的。如第四章、 5 和 6 所述,基空间方法包括傅立叶、小波、视觉词汇、KTL 等。然而,这里我们提供一些关于预处理的一般观察。

  1. 傅立叶方法,小波,斜变换,沃什·哈达玛,KLT。这些方法将数据转换到另一个领域进行分析,在不了解预期应用的情况下,很难提出任何预处理建议。例如,计算傅立叶频谱会产生幅度和相位,相位在特征描述中非常有用,可以提供对模糊的不变性,正如在第六章中描述的 LPQ 线性相位量化方法中所报告的,因此在这种情况下,模糊的图像可能不是问题。
  2. 稀疏编码和视觉词汇。这些方法依赖于局部特征描述符,其可以是 SURF、SIFT、LBP 或从空间域中的像素导出的任何其他期望的特征。因此,特征描述的方法将决定预处理的最佳方法。例如,使用相关和原始像素块作为稀疏码的方法可能不需要任何预处理。或者也许可以使用一些最小的预处理,例如平衡对比度的照明归一化、局部直方图均衡化或 LUT 对比度重新映射。

在图 2-3 中,对比度调整对傅立叶方法没有太大影响,因为图像中没有主导结构。傅立叶频谱典型地揭示了主导结构和功率被限制在象限移动 2D 图中心的较低频率。对于具有主要结构的图像,例如线条和其他形状,傅立叶功率谱将显示该结构,并且预处理可能更有价值。此外,傅立叶功率谱显示按对数值缩放,并不线性显示所有细节,因此线性频谱渲染可能会显示缩放和放大的较低频率,以便更好地擦除视图。

9781430259299_Fig02-03.jpg

图 2-3 。在这个例子中,如傅立叶频谱所示,预处理没有任何好处;(左)之前。(右)对比度调整后的输入图像

多边形形状族预处理

当考虑图像预处理步骤时,多边形形状可能是要求最高的特征,因为如表 2-1 所示,潜在预处理方法的范围相当大,并且所采用方法的选择非常依赖于数据。可能是因为多边形形状测量的挑战和预期用例,它们仅用于各种利基应用,如细胞生物学。

在多边形形状测量之前,最常用的图像准备方法之一是物理校正照明并选择主体背景。例如,在自动化显微镜应用中,用荧光染料制备包含细胞的载玻片,以突出细胞中的特征,然后在放大下仔细调整照明角度和位置,以在待测量的每个细胞特征下提供均匀的背景;由此产生的图像更容易分割。

如图图 2-4 和图 2-5 所示,如果预处理错误,得到的形状特征描述符用处不大。在基于形状的特征提取之前,这里有一些比较突出的预处理选项,然后我们将在本章的后面介绍一系列其他方法。

9781430259299_Fig02-04.jpg

图 2-4 。使用阈值处理来解决图像预处理期间的问题,以准备用于多边形形状测量的图像:(左)原始图像。(中间)已设定阈值的红色通道图像。(右)阈值以上的周界追踪

9781430259299_Fig02-05.jpg

图 2-5 。多边形形状测量之前的另一系列形态学预处理步骤:(左)原始图像。(中间)范围阈值和扩大的红色通道。(右)阈值以上的形态周长形状

  1. 照明校正。通常对定义二元特征的形状和轮廓至关重要。例如,如果周界跟踪或边界分割是基于边缘或阈值的,不均匀的照明将会引起问题,因为边界定义变得模糊。如果照明不能被校正,那么其他不基于阈值的分割方法是可用的,例如基于纹理的分割。
  2. 模糊和聚焦校正。由于对象边界和形状的分割对模糊不太敏感,因此对于多边形形状检测来说,照明可能不那么重要。
  3. 滤波去噪。形状检测对噪声有一定的容忍度,这取决于噪声的类型。散粒噪声或斑点噪声可能不是问题,并且可以使用各种噪声清除方法轻松消除。
  4. 阈值处理。这对于多边形形状检测方法至关重要。采用了许多阈值处理方法,从简单的二进制阈值处理到本章后面讨论的局部自适应阈值处理方法。阈值处理是一个有问题的操作,除了仔细控制光源位置和方向以处理阴影之外,还需要算法参数微调。
  5. 边缘增强。可能对周界轮廓定义有用。
  6. 形态学。为测量准备多边形形状最常用的方法之一,本章稍后会详细介绍。形态学被用来改变形状,大概是为了变得更好,主要是通过腐蚀和膨胀操作的组合或流水线,如图图 2-5 所示。形态学示例包括对象区域边界清理、毛刺去除以及一般的线和周界清理和平滑。
  7. 分割。这些方法使用图像中的结构或纹理,而不是阈值,作为将图像划分为连通区域或多边形的基础。本章稍后将介绍几种常见的分段方法。
  8. 面积/区域处理。在分割之前,诸如锐化或模糊之类的卷积滤波器屏蔽以及诸如等级滤波器或媒体滤波器之类的统计滤波器可能是有用的。
  9. 点加工。逐点对图像数据进行算术缩放,例如将每个像素乘以给定值,然后进行裁剪操作,以及 LUT 处理,通常在分割之前是有用的。
  10. 色彩空间转换。对于准确处理颜色特征至关重要,将在本章稍后介绍。

如图 2-4 所示,范围阈值方法使用红色通道,因为桌子背景有很多红色,可以很容易地用红色进行阈值处理以去除桌面。通过剪切强度带之外的值来对图像进行阈值处理;请注意,右下角的 u 盘在阈值之后消失了,因为它是红色的,低于阈值。还要注意,底部中间的白色 u 盘也几乎不见了,因为它是白色的(最大 RGB 值)并且高于阈值。右图显示了试图追踪阈值以上的周界;它仍然不是很好,因为需要更多的预处理步骤。

图像处理方法的分类

在我们调查图像预处理方法之前,有一个简单的分类法来框架讨论是有用的。建议的分类法是一组操作,包括点、线、区域、算法和数据转换,如图 2-6 所示。图 2-1 中介绍的图像预处理操作的基本类别符合这个简单的分类法。请注意,根据预期用途,视觉流水线的每个阶段可能都有主要任务和相应的预处理操作。

9781430259299_Fig02-06.jpg

图 2-6 。简化的典型图像处理分类,适用于整个视觉流水线

我们在这里提供一个分类法的简要介绍,随后在第五章中有更详细的讨论。注意,分类法遵循图像数据的内存布局和内存访问模式。内存布局尤其会影响性能和功耗。

点操作一次处理一个像素,不考虑相邻像素。例如,点处理操作可分为数学、布尔和像素值比较替换部分,如后面“点过滤”部分的表 2-2 所示其他点处理示例包括颜色转换和数字数据转换。

线条

线操作处理像素或数据的离散线,不考虑前面或后面的线。示例包括 FFT,这是一种可分离的变换,其中像素行和列可以作为 1D FFT 行操作独立地并行处理。如果算法需要数据行,那么可以对图像预处理存储器布局、流水线读/写和并行处理进行优化。优化将在第八章中介绍。

面积

区域操作通常需要局部像素块——例如,通过内核遮罩、卷积、形态学和许多其他操作进行空间过滤。区域操作会产生特定类型的内存流量,并且可以使用细粒度方法进行并行化,例如图形处理器中的通用着色器和粗粒度线程方法。

算法的

有些图像预处理方法是纯串行或者算法代码。并行化这些代码块是困难的,甚至是不可能的。在某些情况下,算法块可以被分割成几个独立的线程以实现粗粒度的并行,或者流水线化,如第八章中所讨论的。

数据转换

虽然这些任务是平凡而显而易见的,但是可以花费大量的时间来进行简单的数据转换。例如,整数传感器数据可以被转换成浮点,用于几何计算或色彩空间转换。在许多情况下,数据转换是图像预处理的重要组成部分。转换示例包括:

  • 整数位深度转换(8/16/32/64)
  • 浮点转换(单精度到双精度)
  • 定点到整数或浮点
  • 浮点数和整数的任意组合,反之亦然
  • 各种颜色空间之间的颜色转换
  • 基空间计算的转换,例如 FFT 的整数和浮点之间的转换

如第八章所述,在设计上关注数据转换和性能是合理的,可以提供良好的投资回报。

比色法

在本节中,我们将简要概述色彩科学,以指导特性描述,并关注色彩准确性、色彩空间和色彩转换。如果特征描述符使用颜色,那么颜色表示和处理应该是精心设计的,准确的,并且适合于应用。例如,在一些应用中,可能仅使用颜色来识别物体,可能使用汽车的油漆颜色来识别汽车,假设供应商每年为每个型号选择了唯一的油漆颜色。通过将颜色与另一个简单的特征(如形状)结合起来,可以设计出一个有效的描述符。

颜色科学是一个由国际标准定义并在文献[249,250,251]中详细描述的众所周知的领域。我们在这里只列出几个资源。

  • 罗彻斯特理工学院的孟塞尔色彩科学实验室是色彩科学和成像领域的领先研究机构之一。它提供了广泛的资源,并与柯达、施乐等行业成像巨头有着密切的联系。
  • 国际照明委员会(CIE)提供了与颜色科学相关的一系列光源的标准照明数据,以及众所周知的颜色空间 CIE XYZ、CIE Lab 和 CIE Luv 的标准。
  • ICC 国际色彩联盟为成像设备提供 ICC 标准色彩描述文件,以及许多其他行业标准,包括彩色显示器的 sRGB 色彩空间。
  • 由行业领导者开发的专有色彩管理系统包括 Adobe CMM 和 Adobe RGB、Apple ColorSync 和 HP ColorSmart 也许最先进的是微软的 Windows 颜色系统,它是基于佳能早期在 CIECAM02 上使用的 Kyuanos 系统。

色彩管理系统概述

计算机视觉应用可能不需要成熟的色彩管理系统,但在处理色彩时,了解色彩管理的方法是至关重要的。如图 2-7 所示,色彩管理系统在设备色彩空间(如 RGB 或 s RGB)和比色色彩空间(如 CIE Luv、Lab、Jch 或 Jab)之间转换颜色,以执行色域映射。由于每个设备只能在特定的色域或颜色范围内再现颜色,因此需要色域映射,使用每个颜色设备的数学模型将颜色转换为最接近的匹配。

9781430259299_Fig02-07.jpg

图 2-7 。具有 RGB 照相机设备模型、sRGB 显示设备模型、CMYK 打印机设备模型、色域映射模块和光源模型的色彩管理系统

发光体、白点、黑点和中性轴

光源 是自然光或荧光灯等光源,根据其光谱成分和光谱功率或色温定义为白点颜色。真实系统中的白点颜色值从来都不是完美的白色,而是一个测量值。白点值和相对的黑点值一起定义了颜色空间的中性轴 (灰度强度)的端点,它不是一个完全直的颜色矢量。

色彩管理依赖于光源或发光体的准确信息和测量。如果没有关于测量颜色的光源的准确信息,颜色就无法表示,因为在荧光灯和自然光下颜色看起来是不同的,等等。CIE 标准定义了标准光源的几个值,例如 D65,如图 2-8 中的所示。

9781430259299_Fig02-08.jpg

图 2-8 。(左)三维颜色空间的表示,中性轴表示白色量,色相角表示原色,饱和度表示存在的颜色量。(右)CIE XYZ 色度图,显示标准光源 D65 OE 作为白点的值,以及 R、G 和 B 的原色值

设备颜色型号

打印机、显示器和相机等真实设备通常会再现颜色,而标准色标是使用校准光源和光谱设备测量的,例如,广泛使用的 Munsel 色标根据标准光源在色调、亮度和色度(HVC)方面定义颜色。为了有效地管理给定设备的颜色,必须为每个设备创建数学模型或设备颜色模型,定义设备色域及其色域范围中的异常。

为了使色彩管理系统准确,必须在实验室中对每个真实设备进行光谱表征和建模,以创建数学设备模型,将每个设备的色域映射到标准照明模型。设备模型用于色彩空间之间的色域转换。

设备通常使用原色和二次色 RGB 和 CYMK 来表示颜色。RGB 是原色、加色空间;从黑色开始,添加 RGB 原色红、绿和蓝来创建颜色。CYMK 是第二颜色空间,因为颜色分量青色、黄色和品红色是 RGB 原色的第二组合;青色=绿色加蓝色,洋红色=红色加蓝色,黄色=红色加绿色。CYMK 也是一个减色空间,因为颜色是从白色背景中减去的,以创建特定的颜色。

色彩空间和色彩感知

色度空间以抽象的术语表示颜色,如亮度、色调或颜色以及颜色饱和度。每个颜色空间都是为不同的原因而设计的,并且每个颜色空间对于不同类型的分析和处理都是有用的。简单色彩空间的例子包括 HSV(色调、饱和度、值)和 HVC(色调、值、色度)。在 CIE 颜色空间的情况下,RGB 颜色分量由标准化值 CIE XYZ 分量代替,作为定义 CIE Luv 和 CIE Lab 颜色空间的基础。

在颜色科学的最高端,我们有更新的 CIECAM02 颜色模型和颜色空间,如 Jch 和 Jab。CIECAM02 不仅仅是光源和色标本身的色度学,它还提供了高级的颜色外观建模考虑因素,包括测量颜色的环境[254,249]。

虽然 CIECAM02 对于大多数应用来说可能有些过分,但还是值得研究一下。由于人们对颜色的感知方式不尽相同,因此颜色感知会因观察颜色的环境、组合的直接照明和环境照明的光谱和角度以及人类视觉系统本身而有很大差异。

色域映射和渲染意图

色域映射是在两个色彩空间之间转换颜色并获得最佳匹配的艺术和科学。由于每个设备的色域不同,色域映射是一个挑战,并且有许多不同的算法在使用,没有明确的赢家。根据渲染的目的,可以使用不同的方法,例如,从相机色彩空间到打印机色彩空间的色域映射不同于映射到 LCD 显示器进行查看。

CAM02 系统提供了详细的指导模型。例如,彩色成像设备可以很弱地捕捉蓝色,而显示器可以很好地显示蓝色。色域拟合方法应该使用颜色裁剪还是拉伸?如何计算色域之间的差异?哪个颜色空间?有关超过 90 种色域映射方法的出色调查,请参见 Morovic 的工作[252]。

在图 2-9 (左图)中,sRGB 色彩空间显示为适合 Adobe RGB 色彩空间,说明 sRGB 没有覆盖像 Adobe RGB 一样宽的色域。每个色域以不同的方式再现颜色,每个颜色空间可能是线性的或内部扭曲的。图 2-9 中的右图说明了一种色域映射方法,该方法使用欧几里德距离和裁剪来确定两个色域中最接近的共同颜色;然而,还有许多其他色域映射距离方法。根据周围的光线和环境,颜色感知会发生变化,从而使色域映射变得更加复杂。

9781430259299_Fig02-09.jpg

图 2-9 。色域映射的中心问题:(左)使用 Gamutvision 软件创建的彩色 sRGB 和 Adobe RGB 色域。(右)色域映射细节

在色域映射中,有源色域和目标色域。例如,源可以是照相机,目的可以是 LCD 显示器。根据色域转换的渲染意图,已经开发了不同的算法来将颜色从源色域转换到目标色域。使用感知意图,色彩饱和度被映射并保持在目标色域的边界内,以努力保持相对色彩强度;并且来自源的色域外颜色被压缩到目标色域中,这允许更可逆的色域映射转换。使用色度意图,颜色可以直接从源色域映射到目标色域,而目标色域之外的颜色则被简单地剪切掉。

一种常见的颜色校正方法是依靠应用于强度通道的简单伽马曲线来帮助人眼更好地可视化数据,因为伽马曲线会使图像的暗区域变亮并压缩亮区域,这与人类视觉系统处理亮区域和暗区域的方式类似。然而,色域校正与真实的传感器数据没有关系,因此建议使用经过校准的色度校正方法。

色彩增强的实际考虑因素

对于图像预处理,颜色强度通常是唯一应该增强的颜色信息,因为颜色强度本身携带了大量信息并且是常用的。此外,在保持相对颜色的同时,颜色处理不能容易地在 RGB 空间中完成。例如,当 RGB 通道被重新组合成单个渲染时,使用锐化滤波器独立增强 RGB 通道将导致莫尔条纹伪像。因此,为了锐化图像,首先 RGB 正向转换到一个颜色空间,如 HSV 或 YIQ,然后锐化 V 或 Y 分量,然后反向转换回 RGB。例如,为了校正彩色照明,诸如 LUT 重映射或直方图均衡化的标准图像处理方法将起作用,只要它们在强度空间中执行。

作为一个实际问题,快速的颜色转换到灰度从 RGB,这里有一些方法。(1)G 颜色通道是灰度信息的良好代理,因为如第一章的传感器讨论所示,光谱中的 RB 波长与 G 波长严重重叠。(2)从 RGB 到灰度强度 I 的简单转换,取 I = R+G+B / 3 即可。(3)在 NTSC 电视广播标准中使用的 YIQ 色彩空间提供了 RGB 和灰度分量 Y 之间简单的向前/向后色彩转换方法,如下所示:

image

image

颜色准确度和精度

如果颜色精度很重要,每个 RGB 颜色通道 8 位可能不够。有必要研究图像传感器供应商的数据手册,以了解传感器到底有多好。在撰写本文时,普通图像传感器每 RGB 通道产生 10 至 14 位的颜色信息。每个颜色通道可能有不同的光谱响应,如第一章中所述。

通常,在大多数设备上,绿色是一个良好且相当准确的颜色通道;红色通常也很好,并且如果从传感器移除 IR 滤光器,还可能具有近红外灵敏度;蓝色始终是一个挑战,因为蓝色波长在较小的硅阱中最难捕获,硅阱接近蓝色波长的尺寸,因此传感器供应商需要特别注意蓝色传感细节。

空间滤波

与使用傅立叶方法的频域滤波相比,对离散像素阵列的滤波被认为是空间滤波、或时域滤波。空间滤波器是频域方法的替代方法,并且在空间域中多种多样的处理方法是可能的。

卷积滤波和检测

卷积是一种基本的信号处理操作,易于计算为离散空间处理操作,对于 1D、2D 和 3D 处理是实用的。基本思想是将两个信号组合或卷积在一起,将源信号改变为更像滤波器信号。源信号是图像中的像素阵列;滤波信号是加权的核掩模,例如梯度峰值形状和定向边缘形状或其他加权形状。有关滤镜内核遮罩形状的几个示例,请参见本章后面讨论 Sobel、Scharr、Prewitt、Roberts、Kirsch、Robinson 和 Frei-Chen 滤镜遮罩的部分。

卷积通常用于滤波操作,如低通、带通和高通滤波器,但许多滤波器形状都有可能检测到 f 特征,如对边缘方向敏感的边缘检测内核,甚至是点、角和轮廓检测器。卷积被用作卷积网络方法中的检测器【85】,如第四章所述。

图 2-10 (中心图像)中的锐化内核遮罩旨在放大与相邻像素相关的中心像素。每个像素乘以其核心位置,结果(右图)显示中心像素是卷积的总和,相对于相邻像素已经增加或放大。

9781430259299_Fig02-10.jpg

图 2-10 。卷积,在这种情况下是锐化滤波器:(从左到右)图像数据、锐化滤波器和结果图像数据

卷积运算之后通常会有一组后处理点运算来清理数据。以下是一些有用的后处理步骤:在本章后面的“点过滤器”一节中有更多的建议。

switch (post_processor)
{
case RESULT_ASIS:
break;
case RESULT_PLUS_VALUE:
sum += value;
break;
case RESULT_MINUS_VALUE:
sum -= value;
break;
case RESULT_PLUS_ORIGINAL_TIMES_VALUE:
sum = sum + (result * value);
break;
case RESULT_MINUS_ORIGINAL_TIMES_VALUE:
sum = sum - (result * value);
break;
case ORIGINAL_PLUS_RESULT_TIMES_VALUE:
sum = result + (sum * value);
break;
case ORIGINAL_MINUS_RESULT_TIMES_VALUE:
sum = result - (sum * value);
break;
case ORIGINAL_LOW_CLIP:
sum = (result < value ? value : result);
break;
case ORIGINAL_HIGH_CLIP:
sum = (result > value ? value : result);
break;
}

switch (post_processing_sign)
{
case ABSOLUTE_VALUE:
        if (sum < 0) sum = -sum;
        if (sum > limit) sum = limit;
        break;
case POSITIVE_ONLY:
        if (sum < 0) sum = 0;
        if (sum > limit) sum = limit;
        break;
case NEGATIVE_ONLY:
        if (sum > 0) sum = 0;
        if (-sum > limit) sum = -limit;
        break;
case SIGNED:
        if (sum > limit) sum = limit;
        if (-sum > limit) sum = -limit;
        break;
}

卷积用于实现各种常见的滤波器,包括:

  • 渐变或锐化滤镜,放大并检测最大值和最小值像素。例子包括拉普拉斯算子。
  • 边缘或线检测器,其中线是显示线段或轮廓的连接梯度。边缘或线检测器可以转向特定的方向,如垂直、对角、水平或全向;在第三章中讨论了作为基集的可控滤波器。
  • 平滑和模糊滤镜,取邻域像素。

内核过滤和形状选择

除了卷积方法之外,可以设计核来捕获像素区域,一般用于统计滤波操作,其中区域中的像素从低值到高值被分类到列表中。例如,假设一个 3×3 内核区域,我们可以设计以下统计过滤器:

sort(&kernel, &image, &coordinates, &sorted_list);

switch (filter_type)
case RANK_FILTER:
        // Pick highest pixel in the list, rank = 8 for a 3x3 kernel 0..8
        // Could also pick the lowest, middle, or other rank
        image[center_pixel] = sorted_list[rank];
        break;
case MEDIAN_FILTER:
        // Median value is kernel size / 2, (3x3=9)/2=4 in this case
        image[center_pixel] = sorted_list[median];
        break;
case MAJORITY_FILTER:
        // Find the pixel value that occurs most often, count sorted pixel values
        count(&sorted_list, &counted_list);
        image[center_pixel] = counted_list[0];
        break;
}

等级过滤器是一种简单而强大的方法,它对区域中的每个像素进行排序,并用所需等级的像素替换中心像素,例如用区域中最高的像素替换中心像素,或者用中值或多数值替换。

形状选择或形成内核

任何区域操作都可以受益于形状选择核来从该区域中选择像素并排除其他像素。形状选择或形成可以作为预处理步骤应用于任何图像预处理算法或任何特征提取方法。形状选择核可以是二进制真值核,以选择来自源图像的哪些像素被用作一组,或者标记应该接受单独处理的像素。形状选择核,如图 2-11 所示,也可以应用于局部特征描述符和检测器;类似但有时更复杂的局部区域像素选择方法通常与局部二进制描述符方法一起使用,如第四章所述。

9781430259299_Fig02-11.jpg

图 2-11 。真实核和形状核:(左)形状核灰色核位置,指示要处理或使用的像素,例如,要在局部二进制模式点对比较检测器之前进行卷积的像素。(右)指定用于区域平均的像素的真实形状内核,支持对角线-T 表示使用此像素,F 表示不使用

点过滤

在进行图像预处理实验时,通常会忽略单个像素的处理。点加工适用于许多优化方法,这将在第八章的中讨论。如上所述,卷积之后通常是点后处理步骤。表 2-2 举例说明了数学运算、布尔运算、比较和替换运算领域中几种常见的像素点处理方法,这些方法看似显而易见,但对探索图像增强方法以增强特征提取非常有价值。

表 2-2 。可能的点操作

|

//数学运算

|

//比较和替代操作

|
| --- | --- |
| 名称 math _ ops[]= {
" src+value->dst "、
"src - value - > dst "、
"src * value - > dst "、
"src / value - > dst "、
(src+dst)* value->dst "、
(src-dst)* value->dst "、
(src * dst)* dst)
“src * src+value->dst”,
“exp(src)+value->dst”,
“log(src)+value->dst”,
“log 10(src)+value->dst”,
“pow(src ^值)- > dst”,
“sin(src)+value->dst”
//布尔运算
名称 bool_ops[] = {
"src 与值- > dst ",
"src 或值- > dst ",
"src 异或值- > dst ",
"src 与 dst - > dst ",
"src 或 dst - > dst ",
"src 异或" | 名称 change _ ops[]= {
" if(src = thresh)value->dst ",
"if (src = dst) value - > dst ",
"if (src!= thresh) value - > dst ",
"if (src!= thresh) src - > dst ",
if(src!= dst)值- > dst ",
"if (src!= dst) src - > dst“,
“if(src>= thresh)value->dst”,
“if(src>= thresh)src->dst”,
“if(src>= dst)value->dst”,
“if(src>= dst)src->dst”,
“如果
“if(src<= dst)src->dst”,
“if(lo<= src<= hi)value->dst”,
“if(lo<= src<= hi)src->dst”,
}; |

噪声和伪像过滤

噪声通常是图像传感器的伪像,但并非总是如此。图像中还可能存在其他几种伪像。噪声去除的目标是在不扭曲底层图像的情况下去除噪声,并且去除伪像的目标是相似的。根据噪声或伪像的类型,可以采用不同的方法进行预处理。第一步是对噪声或伪影进行分类,然后设计正确的图像预处理策略。

  • 散斑,随机噪声。这种类型的噪声显然是随机的,可以使用等级滤波器或中值滤波器去除。
  • 瞬时频率尖峰。这可以使用傅立叶频谱来确定,并且可以使用尖峰上的陷波滤波器来移除;频率尖峰很可能位于频谱的异常区域,并可能表现为图像中的亮点。
  • 抖动和抖动线路噪声。这是视频流特有的伪像,通常是由于电视电影伪像、摄像机运动或图像场景造成的,并且很难校正。它主要面向行,而不仅仅是面向单像素。
  • 运动模糊。这可能由匀速或非匀速运动引起,是一个复杂的问题;有几种去除方法;参见参考文献[305]。

Gonzalez[4]讨论了消除噪声的标准方法。最基本的方法是去除异常值,并且采用各种方法,包括阈值和基于局部区域的统计滤波器,例如等级滤波器和中值滤波器。加权图像平均有时也用于从视频流中去除噪声;假设相机和对象不移动,它可以很好地工作。尽管有时使用去模糊或高斯平滑卷积核来去除噪声,但是这种方法可能导致拖尾,并且可能不是最佳方法。

Buades 等人【511】提供了噪声去除方法的调查和性能比较模型。该来源包括作者的 NL-means 方法的描述,该方法除了使用较大图像区域上的相似加权像素值之间的欧几里德距离度量之外,还使用非局部像素值统计来识别和去除噪声。

整体图像和盒式过滤器

积分图像用于快速找到矩形像素组的平均值。积分图像也被称为总面积表,其中积分图像中的每个像素是当前像素左侧和上方所有像素的积分和。积分图像可以在图像上的单次通过中快速计算。使用来自图像 i(n,m) 的当前像素值,结合先前进入总面积表的条目 s(n,m) ,计算总面积表中的每个值,如下所示:

image

如图图 2-12 所示,从积分图像中求一个 HAAR 矩形特征值,只使用积分图像表 A、B、C、D 中的四个点,而不是从图像中求几十或几百个点。然后,矩形区域的积分图像和可以除以矩形区域的大小,以产生平均值,这也被称为盒式滤波器

9781430259299_Fig02-12.jpg

图 2-12 。图像中的(左)像素。(中间)整体图像。(右)从积分图像中的四个点计算盒状过滤器值的区域:sum = s(A)+s(D)-s(B)-s(C)

积分图像和箱式滤波器用于许多计算机视觉方法,例如 HAAR 滤波器和特征描述符。积分图像也用作小区域的高斯滤波器的快速替代,作为降低计算成本的一种方式。事实上,具有大量重叠区域处理的描述符,如 BRISK [131],有效地利用积分图像来构建描述符,并将积分图像用作快速高斯模糊或卷积的代理。

边缘检测器

边缘检测器的目标是增强图像中的连通梯度,其可以采取边缘、轮廓、线或一些连通的边缘集合的形式。许多边缘检测器被简单地实现为内核操作或卷积,我们在这里考察常用的方法。

核心集 :索贝尔、沙尔、普鲁伊特、罗伯茨、基尔希、罗宾逊、弗赖-陈

Sobel 算子检测边缘检测的梯度大小和方向。这里显示了基本方法。

  1. 使用诸如 3×3 核的基本导数核近似,使用如下值,执行两个方向索贝尔滤波器( xy 轴):

  2. image

    image

  3. 计算总梯度为Gv= |Sx|+|Sy|

  4. 计算渐变方向为θ=ATAN(Sy/Sx)

  5. 计算梯度幅度image

用于 Sobel 边缘检测的核的面积大小和形状存在变化。除了上面示出的 Sobel 核之外,在实践中还使用其他类似的核集合,只要核的值相消并且加起来为零,例如由 Scharr、Prewitt、Roberts、Robinson 和 Frei-Chen 提出的那些核,以及拉普拉斯近似核。Frei-Chen 核被设计成在一个集合中一起使用,因此边是所有核的加权和。有关边缘检测掩模的更多信息,请参见参考文献[4]。一些内核具有指南针方向,例如 Kirsch、Robinson 和其他人开发的那些内核。参见图 2-13 。

9781430259299_Fig02-13.jpg

图 2-13 。几个边缘检测核心掩码

Canny 探测器

Canny 方法[154]类似于 Sobel-style 梯度幅度和方向方法,但它增加了后处理来清理边缘。

  1. 使用选定的卷积核(7x7,5,5 等)对图像执行高斯模糊。),具体取决于所需的低通滤波水平。
  2. 执行两个方向索贝尔滤波器( x & y 轴)。
  3. 在渐变方向上执行非最大值抑制,将不在边缘上的像素(最小值)设置为零(0)。
  4. 沿梯度方向在一个值带(高、低)内执行滞后阈值处理,以消除边缘混叠和异常伪像,并创建更好的连接边缘。

变换滤波、傅立叶变换等

本节讨论图像滤波中的基空间和图像变换,最常用和最广泛使用的是傅立叶变换。在第三章的中,提供了特征描述上下文中对基础空间和变换的更全面的处理。Pratt [9]为图像处理环境中的变换滤波提供了一个很好的参考。

为什么要使用转换来切换域?使图像预处理更容易或更有效,或者更有效地执行特征描述和匹配。在某些情况下,除了将图像变换到另一个域,没有更好的方法来增强图像或描述特征,例如,消除作为傅立叶频谱异常频率成分的噪声和其他结构性伪影,或者使用 HAAR 基特征对图像特征进行压缩描述和编码。

傅立叶变换族

傅立叶变换是众所周知的,并在布拉采维尔的标准参考文献[227]中有所涉及,它构成了一系列相关变换的基础。执行快速傅立叶变换(FFT)的几种方法在图像和信号处理库中很常见。傅立叶分析几乎触及了世界事务的每个领域,包括科学、金融、医学和工业,并被誉为“我们一生中最重要的数值算法”[290]。这里,我们讨论傅立叶分析的基本原理,以及傅立叶变换家族的几个分支和图像预处理应用。

傅立叶变换可以使用光学以光速计算[516]。然而,我们对适用于数字计算机的方法感兴趣。

基本原则

傅立叶分析[227,4,9]的基本思想是将周期函数分解成一系列正弦和余弦波 ( 图 2-14 )。傅立叶变换是在周期波和频域中相应的一系列谐波基函数之间的双向变换,其中每个基函数是正弦或余弦函数,与基频间隔整个谐波倍数。正向 FFT 的结果是由序列中每个正弦和余弦分量的幅度和相位数据组成的复数,也称为实数据虚数据

9781430259299_Fig02-14.jpg

图 2-14 。(左)正弦波的调和级数。(右)正弦和余弦波的傅立叶调和级数

任意周期函数可以通过对期望的一组傅立叶基函数求和来合成,并且周期函数可以使用傅立叶变换分解成作为傅立叶级数的基函数。傅立叶变换在离散像素的时域和频域之间是可逆的,其中每个基函数的幅度和相位都可用于滤波和分析,幅度是最常用的分量。

2D 图像或 3D 体积的 FFT 是如何实现的?傅立叶变换是一种可分离变换,因此可以实现为一组并行 1D FFT 线变换 ( 图 2-15 )。因此,对于 2D 图像和 3D 体积,每个维度,例如 x、y、z 维度,可以作为独立的 x 线并行地就地计算,然后下一个维度或 y 列可以作为平行线就地计算,然后 z 维度可以作为平行线就地计算,并且根据变换缩放最终结果。任何好的 1D FFT 算法都可以设置成使用并行化处理 2D 图像或 3D 体积。

9781430259299_Fig02-15.jpg

图 2-15 。傅立叶级数和傅立叶变换概念,表示由一系列傅立叶谐波近似得到的方波

为了从频率空间回到像素的逆变换的精度,FFT 计算将需要两个双精度 64 位浮点缓冲器来保存幅度和相位数据,因为诸如正弦和余弦之类的超越函数需要高浮点精度来保证精度;对图像数据使用 64 位双精度浮点数,可以计算图像的前向变换,然后进行逆变换,与原始图像相比精度没有损失——当然,非常大的图像需要两倍以上的精度。

由于 64 位浮点运算速度通常较慢,功耗也较高,这是由于 ALU 中的计算要求和芯片面积增加,以及存储器带宽负载较重,因此开发了使用整数变换的 FFT 优化方法,在某些情况下还使用定点,这是许多应用的良好选择。

注意在图 2-16 中,应用低通滤波器(中右)主要是为了保护靠近图中心的低频信息,并减少靠近边缘的高频成分,从而在最右边产生滤波后的图像。

9781430259299_Fig02-16.jpg

图 2-16 。基本傅立叶滤波:(左)原图。(中左)傅立叶光谱。(中右)低通滤波器形状用于乘以傅立叶幅度。(右)使用低通滤波器的逆变换图像

一个关键的傅立叶应用是滤波,其中原始图像被正向转换成幅度和相位;幅度分量被显示为幅度数据的傅立叶功率谱,其将图像中的结构显示为直线和块,或者通常是噪声的异常结构或斑点。可以通过各种滤波器形状对幅度进行滤波,例如高通、低通、带通和斑点滤波器,以消除斑点噪声,从而影响频谱的任何部分。

在图 2-16 中,显示了一个圆形对称低通滤波器形状,滤波器系数从 1 到 0 平滑分布,在低频中心有高乘数,在边缘向高频逐渐下降到零。滤波器形状在频域中与幅度数据相乘,以滤除频谱图外部的较高频率分量,然后进行逆 FFT,以提供滤波后的图像。低频分量朝向中心;通常这些是最令人感兴趣的,因此大部分镜像功率包含在低频成分中。可以使用任何其他滤波器形状,例如点滤波器,来去除噪声或光谱特定位置处的任何结构。

傅立叶变换族

傅立叶变换是一系列变换[4]的基础,其中一些是:

  1. 离散傅立叶变换,快速傅立叶变换。傅立叶变换的离散版本,通常作为快速版本或 FFT 来实现,通常用于图像处理。实现 FFT 的方法有很多种[227]。
  2. 正弦变换 仅由正弦项组成的傅立叶公式。
  3. 余弦变换。仅由余弦项组成的傅立叶公式。
  4. DCTDST,MDCT。离散傅立叶变换以几种形式实现:离散正弦变换(DST) 、离散余弦变换(DCT) 和改进的离散余弦变换(MDCT) 。这些相关方法对宏块(例如 16×16 或 8×8 像素区域)进行操作,因此可以针对整数而不是浮点的计算使用进行高度优化。典型地,DCT 在用于视频编码和解码应用的硬件中实现,用于从帧到帧的宏块的运动估计。为了计算效率,MDCT 对重叠的宏块区域进行操作。
  5. 快速哈特莱变换 、DHT。这是大约在 1925 年作为电话传输分析的傅立叶变换的替代公式开发的,被遗忘了许多年,然后被布拉采维尔重新发现并再次推广[227]作为傅立叶变换的替代。哈特利变换是傅立叶变换的对称公式,将信号分解为两组正弦函数,合起来作为一个cosine-and-sinecas( ) 函数,其中 cas(vx) image cos(vx) + sin(vx)。这包括正负频率分量,并完全根据实数进行输入和输出。Hartley 公式避免了傅立叶复指数exp(jωx)中使用的复数。Hartley 变换已经被开发成被称为 DHT 的优化版本,显示出与优化的 FFT 速度相当。

其他转换

其他几种变换可用于图像滤波,包括小波、可控滤波器组以及其他将在第三章的中描述的变换。请注意,变换通常有许多重叠的共同用途和应用,例如图像描述、图像编码、图像压缩和特征描述。

形态学和分段

为简单起见,我们将形态学的目标定义为形状和边界定义,分割的目标是定义具有内部相似性的区域,例如纹理或统计相似性。形态学用于将特征识别为可以用形状度量描述的多边形区域,这将在第三章和第六章中讨论,不同于使用其他方法的局部兴趣点和特征描述符。图像被分割成区域,以允许根据一些策略或处理目标对每个区域进行独立的处理和分析。区域覆盖的面积小于全局图像,但通常大于局部兴趣点特征,因此应用可能将全局、区域和小局部兴趣点度量一起用作对象签名

Haralick 和 Shapiro 的工作[321]对几种分割方法进行了出色的回顾。在实践中,分割和形态学并不容易:结果往往不如预期的有用,需要反复试验,有太多的方法可以提供任何严格的指导,并且每个图像都是不同的。因此,这里我们只调查引入主题和说明复杂性的各种方法。区域分割方法概述见表 2-3 。

表 2-3 。分割方法

|

方法

|

描述

|
| --- | --- |
| 形态分割 | 基于阈值和形态学算子来定义该区域。 |
| 基于纹理的分割 | 区域的纹理用于将相似的纹理分组到相连的区域中。 |
| 基于变换的分割 | 基空间特征用于分割图像。 |
| 边缘边界分割 | 单独使用梯度或边缘来定义区域的边界,在某些情况下使用边缘链接来形成边界。 |
| 颜色分割 | 颜色信息用于定义区域。 |
| 超像素分割 | 内核和距离变换用于对像素进行分组,并将其值更改为公共值。 |
| 灰度/亮度分段 | 灰度阈值或带用于定义区域。 |
| 深度分割 | 深度图和距观看者的距离被用于将图像分割成前景、背景或其他场景间特征的渐变。 |

二元形态学

二进制形态学对二进制图像进行操作,二进制图像是从其他标量强度通道图像创建的。形态学[9]用于通过去除形状噪声或异常值,并通过加强主要特征特性,将特征形状变形为新的形状,以供分析。例如,可以使用形态学去除孤立的像素,细化特征,并且仍然保留主要的形状。请注意,形态学本身是一个相当大的研究领域,可应用于一般对象识别、细胞生物学、医学、粒子分析和自动显微镜。我们在这里介绍二进制图像形态学的基本概念,然后在这一节之后介绍灰度和彩色数据的应用。

二进制形态学从二进制化图像开始,因此通常首先进行阈值处理,以创建具有由 8 位黑白值组成的二进制值像素的图像,0 值=黑色,255 值=白色。在这一章的后面,我们将对阈值处理方法进行探讨,在形态学之前,阈值处理是至关重要的。

二值形态学是一种邻域运算,可以使用带有真值的成形核,如图图 2-17 所示。成形核通过定义哪些周围像素对形态有贡献来指导形态过程。图 2-17 显示了两个形成的内核:内核 a,其中所有接触当前像素的像素都被考虑,内核 b,其中只考虑正交相邻的像素。

9781430259299_Fig02-17.jpg

图 2-17 。3×3 形成核以及使用核的二元腐蚀和膨胀;在给定的应用中,其他内核大小和数据值可能是有用的。(图片由英特尔出版社授权使用,来自构建智能系统)

形态学的基本运算包括布尔与、或、非。用于基本形态学操作的符号用于膨胀侵蚀。在二值形态学中,膨胀是布尔 OR 运算符,而腐蚀是布尔 AND 运算符。在图 2-17 提供的例子中,只有带“1”的核元素用于形态计算,考虑到邻域贡献的变化。对于侵蚀,所有真正形成核心元素下的像素一起进行“与”运算;如果全部为真且像素特征保留,则结果为 1,否则像素特征被侵蚀或设置为 0。

对于中心像素的侵蚀,正在形成的真实内核下的所有像素必须是真实的。侵蚀试图减少稀疏要素,直到只剩下强要素。膨胀试图膨胀稀疏特征以使它们变得更胖,对于中心像素的膨胀,形成的核元素下只有 1 个像素必须为真,对应于布尔 or。

基于简单的腐蚀和膨胀,一系列的形态学操作如下所示,其中9781430259299_unFig02-01.jpg =膨胀,9781430259299_unFig02-02.jpg =腐蚀。

Erode                                  G(f) = f   `b`
`Dilate                                 G(f) = f`   ``b`
`Opening                        G(f) = (f`   ``b)` ` `b`
`Closing                        G(f) = (f`   ``b)`   ``b`
`Morphological Gradient           G(f) = f`   ``b or G(f) = f` ` `b – f` ` `b`
`Morphological Internal gradient G i(f) = f  -  f` ` `b`
`Morphological External gradient        G e(f) = f` ` `b -  f`
      ``````py````

``灰度和颜色形态和

灰度形态学有助于将像素合成并组合成具有相似强度值的均匀强度带或区域。灰度形态学可用于各个颜色分量,以提供影响各种颜色空间中的色调、饱和度和颜色强度的颜色形态学。

对于灰度形态学或彩色形态学,基本操作是最小值、最大值和最小最大值,其中最小值以上的像素变为相同的值,最大值以下的像素变为相同的值,而最小最大值范围内的像素变为相同的值。最小值和最大值是阈值的一种形式,而最小最大值允许像素值的带合并成相等的值,形成同质区域。

形态学优化和改进

除了简单形态学[9],还有其他使用自适应方法的形态学分割方法[254,255,256]。简单形态学方法依赖于在整个图像的每个像素上使用固定的核,并假设阈值已经应用于图像;而自适应方法将形态学操作与基于局部像素强度统计的可变核和可变阈值相结合。这允许形态学适应局部区域强度,并且在某些情况下,产生更好的结果。自动阈值和自适应阈值方法将在本章稍后讨论,并在图 2-24 和图 2-26 中说明。

欧几里得距离图

距离图或欧几里德距离图(EDM)将二进制图像中的每个像素转换为每个像素到最近背景像素的距离,因此 EDM 需要输入二进制图像。EDM 对于分割很有用,如图 2-18 中的所示,其中 EDM 图像根据 EDM 值设定阈值——在这种情况下,类似于腐蚀操作符。

9781430259299_Fig02-18.jpg

图 2-18 。预处理序列:(左)阈值处理和腐蚀后的图像。(中间)EDM 显示与像素到黑色背景的距离相对应的灰度级。(右)简单的二进制阈值 EDM 图像

超像素分割

一种超像素分割方法[257,258,259,260,261]试图将局部区域中的相似像素折叠成具有相等像素值的更大的超像素区域,因此相似值被归入更大的超像素中。超像素方法通常用于数字摄影应用,以创建缩放或水彩特效。超像素方法将每个像素视为图中的一个节点,基于相邻像素的相似性和图距离来确定区域之间的边。参见图 2-19 。

9781430259299_Fig02-19.jpg

图 2-19 。各种超像素分割方法的比较(图片 Radhakrishna Achanta 博士,经许可使用)

可以基于超像素设计特征描述符,包括超像素值直方图、每个多边形超像素的形状因子以及相邻超像素值的空间关系。显然,在基于超像素的描述符方面做的工作很少;然而,几种程度的鲁棒性和不变性的潜力似乎很好。接下来,我们调查一系列超像素分割方法。

基于图形的超像素方法

基于图的方法基于像素与相似值像素区域的质心特征或边缘特征的距离将像素组织成树。计算复杂度因方法而异。

  • SLIC 方法 [258]简单线性迭代聚类(SLIC)基于 5D 空间创建超像素,包括 CIE Lab 原色和 XY 像素坐标。SLIC 算法将所需数量的超像素作为输入,以生成并很好地适应灰度和 RGB 彩色图像。聚类距离函数与超像素的期望数量的大小相关,并且使用欧几里德距离函数将像素分组为超像素。
  • 归一化切割 [262,263]使用基于局部纹理和区域轮廓的递归区域分割方法来创建超像素区域。
  • GS-FH 方法【264】基于图形的 Felzenszwalb 和 Huttenlocher 方法试图使用基于感知或心理线索的边缘来分割图像区域。该方法使用图树结构中像素之间的最小长度来创建超像素区域。计算复杂度为 O(n Log n),相对较快。
  • SL 方法【265】超像素点阵(SL)方法使用图形切割方法在平铺图像区域或像素带内找到区域边界。

基于梯度上升的超像素方法

梯度上升方法迭代地改进超像素聚类以优化分割,直到达到收敛标准。这些方法使用树形图结构根据一些标准将像素关联在一起,在这种情况下,这些标准可以是像素的笛卡尔坐标的 RGB 值,然后应用距离函数或其他函数来创建区域。因为这些是迭代方法,所以性能可能会很慢。

  • 均值偏移【266】基于基于内核的均值平滑方法,通过配准区域质心来创建相似像素的区域。
  • 快速移动 [267]类似于均值移动方法,但不使用均值模糊内核,而是使用基于 RGB 值和 XY 像素坐标从图形结构计算的距离函数。
  • 分水岭【268】从局部区域像素值极小点开始,寻找定义分水岭的基于像素值的轮廓线,或者流域轮廓,在其中相似的像素值可以被替换以创建同质像素值区域。
  • turbo pixels【269】使用小的圆形种子点,这些种子点放置在图像上的均匀网格中,超像素围绕这些种子点被收集到指定的区域中,然后超像素边界被逐渐扩展到未指定的区域中,使用几何流方法使用受控的边界值扩展标准来扩展边界,以便将更多的像素聚集到具有相当平滑和均匀的几何形状和大小的区域中。

深度分割

深度信息,如图 2-20 所示的深度图,是基于距离分割对象的理想选择。深度图可以通过各种各样的深度传感器和方法来计算,包括单个相机,正如在第一章中讨论的。深度相机,如微软 Kinect 相机,正变得越来越常见。深度图是 2D 图像或阵列,其中每个像素值是距离或 Z 值。

9781430259299_Fig02-20.jpg

图 2-20 。来自米德尔伯里数据集的深度图像:(左)原始图像。(右)对应深度图。数据由 Daniel Scharstein 提供,经许可使用

计算机视觉中的许多不确定性源于在二维图像阵列中定位三维对象的问题,因此向视觉流水线添加深度图是一项巨大的资产。使用深度图,图像可以很容易地分割成前景和背景,并能够分割特定的特征或对象,例如,通过简单的深度阈值分割。

取决于深度感测方法,深度图通常非常模糊且有噪声,因此可能需要图像预处理。然而,深度图清理没有完美的过滤方法。许多从业者更喜欢双边滤波器[302]及其变体,因为它保留了局部结构,并且在处理边缘过渡方面做得更好。

颜色分割

有时颜色可以单独用于分割和阈值处理。使用正确的颜色分量可以很容易地从图像中过滤出特征。例如,在图 2-6 中,我们从 RGB 集合中的红色通道图像开始,目标是从桌子背景中分割出 u 盘。由于桌子是棕色的,包含很多红色,红色通道与 USB 记忆棒形成了有益的对比,允许通过红色进行分割。可能需要对图像进行色彩校正以获得最佳效果,例如色域校正或提高每种颜色的色调或饱和度以突出差异。

阈值处理

阈值处理的目标是以一定的强度水平分割图像,以揭示诸如前景、背景和特定对象等特征。存在从全局到局部自适应的多种阈值方法。在实践中,阈值处理非常困难,并且其本身通常不令人满意,必须针对数据集进行调整,并与视觉流水线中的其他预处理方法相结合。

阈值处理中的一个关键问题是照明不均匀,因此需要阈值处理的应用,如细胞生物学和显微镜,需要特别注意细胞制备、样本间距和光线位置。由于许多图像对涉及简单方法的全局阈值处理没有很好的响应,所以通常需要局部方法,其使用局部像素结构和统计关系来创建有效的阈值。这里讨论了阈值处理的全局和局部自适应方法。阈值可以有几种形式:

  • 地板允许的最低像素强度
  • 上限允许的最高像素强度
  • 斜坡地板和天花板之间像素斜坡的形状,如线形或原木形
  • 可以是没有下限、上限或斜坡的二元阈值点

全局阈值

在全局确定的阈值水平上对整个图像进行阈值处理有时是开始探索图像数据的好地方,但是通常局部特征会受到影响,并且结果是难以理解的。可以使用统计方法来确定最佳阈值水平,从而改进阈值处理。可以构建查找表(LUT ),在统计矩的指导下创建地板、天花板和斜坡以及对图像执行快速 LUT 处理的函数,或者对图像进行假色以便可视化。

直方图峰值和谷值,以及滞后阈值

我们再次转向老的备用图像直方图。直方图中的峰值和谷值 可以指示用于分割和阈值处理的阈值【319】。一个滞后区域标记了具有相似值的像素,在直方图中很容易被发现,如图图 2-21 所示。此外,许多图像处理程序具有交互式滑块,允许使用指针设备设置阈值点甚至区域。 1 花些时间,通过直方图了解图像数据,并熟悉使用交互式阈值方法。

9781430259299_Fig02-21.jpg

图 2-21 。用箭头标注的直方图显示了峰和谷,虚线显示了使用滞后阈值定义的相似强度的区域

如果直方图峰值之间没有明显的谷,那么建立两个阈值,在谷的每一侧一个,是一种定义滞后区域的方法。滞后区域内的像素值被视为在对象内部。此外,可以使用滞后范围和形态学将像素一起分类为一个区域,以确保区域连通性。

LUT 变换,对比度重新映射

简单查找表(lut)对于对比度重映射和全局阈值处理非常有效,交互式工具可用于创建 lut。一旦使用交互式实验找到最佳下限、上限和斜坡函数,就可以将 lut 生成为表数据结构,并用于在 fast 代码中设置阈值。使用伪彩色 lut 对图像进行假着色是常见的,对于理解数据中的阈值非常有价值。可以设计各种 LUT 形状和斜坡。使用线性斜坡函数的示例见图 2-22 。

9781430259299_Fig02-22.jpg

图 2-22 。对比度校正:(左)原始图像显示棕榈叶细节压缩成一个狭窄的强度范围模糊细节。(中间)全局直方图均衡恢复了一些细节。(右)LUT 重映射功能将亮度值扩展到更窄的范围,以显示棕榈叶的细节。对角线下的直方图部分被拉伸以覆盖右图像中的全部强度范围;其他强度区域被剪切。当用诸如 Sobel 的梯度算子处理时,对比度校正的图像将产生更多的梯度信息

直方图均衡化和规范

直方图均衡化使用对比度重映射功能在地板和天花板之间分布像素值,目的是创建一个直方图,使近似相等的面元计数接近直线分布。参见图 2-23 。虽然此方法适用于灰度图像,但彩色图像应在所选色彩空间(如 HSV V)的强度通道中进行均衡。单独均衡每个 RGB 分量并重新渲染会产生彩色莫尔条纹。直方图均衡化使用固定区域和该区域中所有像素的固定重新映射;然而,自适应局部直方图均衡方法是可用的[314]。

9781430259299_Fig02-23.jpg

图 2-23 。(左)原始图像和直方图。(右)直方图均衡化图像和直方图

可以创建所需的直方图形状或值分布,称为直方图规范 ,然后重新映射源图像的所有像素值,以符合指定的直方图形状。可以直接创建该形状,或者可以使用来自第二图像的直方图形状来重新映射源图像以匹配第二图像。对于一些图像处理包,直方图规定可以是交互式的,并且可以放置和调整曲线上的点以创建期望的直方图形状。

全局自动阈值处理

已经设计了各种方法来基于图像直方图的统计特性自动寻找全局阈值[320,513,514,515],并且在大多数情况下,结果不是很好,除非在自动阈值处理之前进行一些图像预处理。表 2-4 提供了自动阈值方法的简要概述,而图 2-24 显示了每种方法的效果图。

表 2-4 。从基本直方图特征导出的选定的少数全局自动阈值方法[303]

|

方法

|

描述

|
| --- | --- |
| 默认 | IsoData 方法的变体,也称为迭代中间方法。 |
| 黄 | 黄的模糊阈值法。 |
| 【生】节间部 | 迭代直方图平滑。 |
| 迭代自组织数据分析 | 对高于和低于阈值的值进行迭代像素平均,以导出高于复合平均值的新阈值。 |
| 里 | 迭代交叉熵阈值处理。 |
| 最大熵 | Kapur-Sahoo-Wong(最大熵)算法。 |
| 平均 | 使用平均灰度作为阈值。 |
| 米诺尔 | 来自 Kittler 和 Illingworth 的迭代方法收敛于最小误差阈值。 |
| 最低限度 | 假设双峰直方图,迭代直方图平滑。 |
| 朋友圈 | Tsai 阈值化算法旨在阈值化和保持原始图像矩。 |
| 大津 | 通过最小化方差来设置局部阈值的 Otsu 聚类算法。 |
| 百分位 | 根据前景和背景像素的预设分配调整阈值。 |
| 雷尼熵 | 另一种基于熵的方法。 |
| 山巴哥 | 使用模糊集度量来设置阈值。 |
| 三角 | 使用图像直方图峰值,假设峰值不在中心,在峰值两侧的最大区域设置阈值。 |

9781430259299_Fig02-24.jpg

图 2-24 。所选自动阈值方法的渲染(使用 ImageJ 自动阈值插件生成的图像[303])

局部阈值

局部阈值方法从局部像素区域获取输入,并分别对每个像素进行阈值处理。下面是一些常用的有用的方法。

局部直方图均衡

局部直方图均衡化将图像分成小块,如 32×32 像素,并为每个块计算直方图,然后使用直方图均衡化重新渲染每个块。然而,对比度结果可能包含对应于所选直方图块大小的块伪影。局部直方图均衡有几种变化,包括对比度受限的自适应局部直方图均衡(CLAHE) [304]。

积分图像对比度滤波器

与直方图相关的方法使用积分图像来计算局部区域统计,而不需要计算直方图,然后相应地重新映射像素,这样速度更快,并且达到类似的效果(图 2-25 )。

9781430259299_Fig02-25.jpg

图 2-25 。来自 ImageJ 的积分图像滤波器,用于重新映射局部区域的对比度,类似于直方图均衡化:(左)原始。(中间)20x20 个区域。(右)40x40 区域

本地自动阈值方法

局部阈值处理基于图像中每个目标像素周围的紧邻区域来调整阈值,因此局部阈值处理更像是标准区域操作或过滤器[513,514,515]。标准软件包中提供了局部自动阈值方法。 2 图 2-26 提供了一些自适应局部阈值方法的例子,总结在表 2-5 中。

9781430259299_Fig02-26.jpg

图 2-26 。使用 ImageJ 插件呈现选定的几个局部自动和局部阈值方法[303]

表 2-5 。选定的几个局部自动阈值方法[303]

|

方法

|

描述

|
| --- | --- |
| 伯恩森 | 使用圆形窗口代替矩形和局部中间灰度值的 Bernsen 算法 |
| 平均 | 使用局部灰度平均值作为阈值 |
| 中位数 | 使用局部灰度平均值作为阈值 |
| Grey 医生 | 使用局部区域灰度均值- C(其中 C 是常数) |
| 尼布莱克 | 尼布莱克的算法是:p = (p >均值+ k 标准差- c)?对象:背景 |
| 索沃拉 | 索沃拉尼布莱克变奏:p = (p >均值
(1 + k *(标准差/ r - 1)))?对象:背景 |

摘要

在这一章中,我们考察了作为预处理步骤的图像处理,它可以改进图像分析和特征提取。我们开发了一种图像处理方法的分类法来构建讨论,并将该分类法应用于四个基本视觉流水线中的示例,这将在第五章的分类法中开发,包括(1)局部二进制描述符,如 LBP、ORB、FREAK(2)光谱描述符,如 SIFT、SURF(3)基空间描述符,例如 FFT、小波;以及(4)多边形形状描述符,例如斑点对象面积、周长和质心。讨论了图像预处理的常见问题和机会。从照明、噪声和伪像消除开始,我们讨论了一系列主题,包括分割变化,如深度分割和超像素方法、二进制、灰度和彩色形态学、卷积空间滤波和统计区域滤波,以及基础空间滤波。


1 参见开源包 ImageJ2,菜单项 Image image调整-亮度/对比度进行交互式阈值处理。

2 参见开源包 Imagej2,菜单项 Image image调整image自动本地阈值|自动阈值。``

三、全局和区域特征

量两次,切一次。

—木匠的说法

本章涵盖一般特征描述的度量,通常用于整个图像和图像区域,包括纹理、统计、基于模型和基础空间方法。纹理是图像处理中的一个重要指标,通常分为结构方法和统计方法。结构方法寻找边缘和形状等特征,而统计方法关注像素值关系和统计矩。也存在对图像纹理建模的方法,主要用于图像合成而非描述。基空间,如傅立叶空间,也用于特征描述。

很难在图像处理和计算机视觉中的相关主题之间建立清晰的划分,这些主题属于全局、区域和局部特征度量;大多数指标的应用有相当大的重叠。然而,对于这一章,我们沿着合理的边界划分这些主题,尽管这些边界可能看起来是任意的。同样,此处关于全局和区域特征的讨论与第二章关于图像处理的和第六章关于局部特征的中讨论的主题也有一些重叠。简而言之,许多方法被用于局部、区域和全局特征描述,以及图像处理,例如傅立叶变换和 LBP。

但是我们首先简要介绍一下纹理分析和一般视觉度量领域的一些关键概念。

特征的历史调查

为了比较和对比全局、区域和局部特征度量,调查和跟踪用于描述机器视觉特征的关键思想、方法和手段的发展是有用的。该调查包括图像处理(纹理和统计)和机器视觉(局部、区域和全局特征)。从历史上看,由于计算性能、内存和传感器技术的限制,功能指标的选择仅限于当时可计算的指标。随着时间的推移和技术的发展,这些指标的计算变得越来越复杂,消耗了更多的内存。图像正变得多模态,结合了强度、颜色、多光谱、深度传感器信息、多重曝光设置、高动态范围图像、更快的帧速率,以及在 x、yZ 深度上更精确和准确。因此,内存带宽和计算性能的提高带来了描述特性指标和执行分析的新方法。

已经尝试了许多纹理分析的方法;这些分为以下几类:

  • 结构,通过一组称为纹理元素的微观纹理图案来描述纹理。示例包括自然纹理的数字描述,如织物、草和水。边缘、线和角也是结构模式,并且区域内的边缘特征,例如边缘方向、边缘计数和边缘梯度幅度,作为纹理度量是有用的。边缘特征的直方图可以用来定义纹理,类似于 SIFT 等局部特征描述符中使用的方法(在第六章中描述)。
  • 统计,基于灰度统计矩描述点像素区域属性,包括共生矩阵或 SDM 等方法。例如,颜色强度在相近范围内的图像区域可以被认为具有相同的纹理。具有相同直方图的区域可以被认为具有相同的纹理。
  • 基于模型的,包括分形模型、随机模型、各种半随机场。通常,模型可以用来生成合成纹理,但可能无法有效识别纹理,我们不包括纹理生成。
  • 基于变换或基的,包括诸如傅立叶、小波、Gabor 滤波器、Zernike 和其他基空间的方法,其在此被视为统计方法(统计矩)的子类;然而,基空间也用于图像处理和滤波的变换中。

关键理念:全局、区域和本地

让我们简单看看特性度量研究中的几个主要趋势和里程碑。虽然这份简要概述并不打算对所有关键事件和研究进行精确、全面的审视,但它描述了主流行业思维和学术活动的一些总体趋势。

20 世纪 60 年代、70 年代、80 年代——整体目标方法

在此期间,度量主要描述整个对象、更大的区域或图像;通过 FFT 频谱方法和相关性对大目标进行模式匹配;识别方法包括物体、形状和纹理度量;简单的几何图元用于对象合成。NTSC、PAL 和 SECAM 等低分辨率图像很常见——主要是灰度级,在有足够内存的情况下会有一些颜色。军方可以获得一些分辨率更高的卫星图像,如美国宇航局的陆地卫星图像和法国的 SPOT 图像。

模式识别的一些早期工作开始使用局部兴趣点和特征:值得注意的是,Moravic[520]在 1981 年开发了局部兴趣点检测器,1988 年 Harris & Stephens[156]开发了局部兴趣点检测器。商业系统开始出现,特别是 20 世纪 80 年代初的 View PRB,它使用数字相关和尺度空间超像素进行粗到细的匹配,实时图像处理和模式识别系统通过成像技术引入。机架安装成像和机器视觉系统开始被工作站和高端电脑所取代,这些电脑带有附加的成像硬件、阵列处理器以及 Krig Research 等公司的软件库和应用。

20 世纪 90 年代早期——部分物体方法

计算能力和内存不断增加,使人们能够更多地关注局部特征方法,如 Shi 和 Tomasi[157]改进 Harris 检测器方法的开发,Kitchen 和 Rosenfeld[208]开发灰度级角点检测方法,以及 Wang 和 Brady[213]的方法。1990 年,Khotanzad 和 Hong[276]使用 Zernike 多项式计算了多边形形状的图像矩。Lindberg[520]将尺度空间理论应用于计算机视觉,许多其他研究人员沿着这一思路走向未来,例如 Lowe [161]在 2004 年。

描述更小的对象或对象组件和图像部分的度量;地方特色和兴趣点的使用越来越多。使用了大量的子模式或基本向量,并开发了相应的度量标准。颜色信息的使用越来越多;越来越多的方法似乎可以改善缩放、旋转或仿射变化的不变性;和识别方法是基于用适当的度量找到对象的部分而开发的。更高的图像分辨率、更大的像素深度和彩色信息越来越多地用于公共部门(尤其是医疗应用),此外还有新的经济型图像传感器,如 KODAK MEGA-PLUS,它提供 1024x1024 的图像。

20 世纪 90 年代中期—局部特征方法

更多的注意力放在识别图像中兴趣点周围的小的局部特征的度量上。特征描述符从每个特征周围的窗口或补丁添加更多细节,识别基于搜索特征集并将描述符与更复杂的分类器匹配。描述符光谱包括梯度、边缘和颜色。

20 世纪 90 年代后期—分类不变局部特征方法

开发并改进了新的特征描述符,使其对比例、亮度、旋转和仿射变换的变化不变。Schmidt 和 Mohr[348]提出并推广了局部特征描述方法。特征充当字母表,用于拼出复杂的特征描述符或向量,由此向量用于匹配。使用神经网络和其他机器学习方法对特征匹配和分类阶段进行了改进,以提高速度和有效性[142]。

21 世纪初—场景和对象建模方法

场景和对象被建模为具有良好构造的描述符的特征组件或模式的集合;特征之间的空间关系被测量并用于匹配;新的复杂分类和匹配方法使用 boosting 和相关方法来组合强和弱特征,以便更有效地识别。Lowe 的 SIFT [161]算法发表;Bay 等人[160]也发表了 SURF,采用不同的方法,使用 HAAR 特征而不仅仅是梯度。Viola-Jones 方法[504]发表,使用 HAAR 特征和增强的学习方法来分类,加速匹配。用于计算机视觉的 OpenCV 库由 Bradski 在英特尔开发,并以开源形式发布。

2000 年代中期—更精细的特性和公制组合方法

这一领域的研究人员数量开始激增;Czurka 等人[234]开发了各种特征和度量组合(特征包),使用 Sivic [521]描述的关键点来描述场景和对象;创建了新的局部特征描述符并改进了旧的描述符;人们对商业应用中的实时特征提取和匹配方法越来越感兴趣。对更好的局部度量和特征描述符进行分析、测量,并一起使用以提高模式匹配的准确性。此外,特征学习和稀疏特征码书被开发来减少模式空间,加快搜索时间,并提高准确性。

2010 年后—多模态特征度量融合

鲁苏和布拉德斯基等人越来越多地使用深度传感器信息和深度图来分割图像和描述特征,并创建体素指标【398】;2D 纹理度量在三维空间中表示;3D 深度感测方法激增,增加了高分辨率图像和高动态范围(HDR)图像的使用,以提高特征精确度;更大的位深度和彩色图像的准确性允许有价值的基于颜色的度量和计算成像。增强的处理能力和廉价、充足的内存在低成本计算平台上处理更大的图像。使用二进制模式的更快更好的特征描述符已经被开发出来,并使用汉明距离快速匹配,例如 Alahi 等人的 FREAK[131]和 Rublee 等人的 ORB[131]。多模态和多变量描述符由具有其他传感器信息的图像特征组成,例如加速度计和位置传感器。

当存在足够的计算和存储容量来执行旧方法时,未来的计算研究甚至可能会回到起点,例如使用并行和固定功能硬件方法实时进行跨多个尺度和几何视角的相关。这将消除当前对局部特征的小不变集的一些关注,并允许协同地一起使用几种方法。因此,这一领域的发展历史值得了解,因为它可能会以不同的技术形式重演。

由于没有单一的解决方案来获得正确的特性度量集,所以随着时间的推移开发的所有方法今天都有应用,并且仍然在使用。

结构分析

最基本的度量之一是纹理,它是对图像通道表面的描述,例如颜色强度,就像高程图或地形图一样。纹理可以在全局或局部区域内表达。纹理可以通过一个区域内相邻像素间的统计关系来局部地表达,也可以通过一幅图像或区域内像素值的汇总关系来全局地表达。有关涵盖各种纹理方法的文献示例,请参见参考文献[13,59,60,310,16–20,312,313]。**

**根据 Gonzalez [4],在图像分析中有三种基本的纹理类别:统计的、结构的和光谱的。统计测量包括直方图、散点图和 SDM。结构技术更关注图像中的定位模式或结构基元,如平行线、规则模式等。这些技术在[11,1,5,8]中有描述。频谱纹理来源于分析数据的频域表示。也就是说,使用快速傅立叶变换来创建数据的频域图像,然后可以使用傅立叶技术对其进行分析。

直方图揭示了整体像素值分布,但没有说明空间关系。散点图本质上是二维直方图,不揭示任何空间关系。参考文献[315]给出了一个很好的调查结果。

纹理已被用于实现几个目标:

  1. 基于纹理的分割(在第二章的中讨论)。
  2. 图像区域的纹理分析(包含在本章中)。
  3. 纹理合成,使用合成纹理创建图像(本书未涉及)。

在计算机视觉中,纹理度量被设计成通过使用离散方法来描述纹理的感知属性。例如,纹理已被描述为感知的几个属性,包括:

  • 对比
  • 颜色
  • 粗糙
  • 方向性
  • 线状的
  • 粗糙
  • 坚定不移
  • 分组
  • 分割

如果可以识别纹理,则可以基于纹理分割图像区域,并且可以使用形状度量(如面积、周长和质心)来测量相应的区域(将在第六章的中讨论)。第二章介绍了分割方法,其中一些是基于纹理的。对于计算机视觉应用,可以识别和比较分割的纹理区域。局部区域的微观纹理,例如在第六章中详细讨论的 LBP,可以用作特征描述符,而宏观纹理可以用于描述一个区域的同质纹理,例如一个湖或一片草地,因此可以自然地应用于图像分割。总之,纹理可用于描述全局图像内容、图像区域内容和局部描述符区域内容。特征描述符和纹理度量之间的区别可能很小。

与过去的计算和存储能力相结合的传感器限制已经将纹理度量的发展限制为主要是 2D 灰度度量。然而,随着普及计算摄影技术的进步,每台相机都提供了更高分辨率的图像、更高的帧速率、更深的像素、深度成像、更多的内存和更快的计算,我们可以预计纹理度量将会取得相应的新进展。

这里是一个简单的纹理度量的历史调查。

20 世纪 50 年代到 70 年代——全局统一纹理度量

自相关或互相关由 Kaiser[34]于 1955 年开发,作为一种在航空摄影中寻找随机性和重复模式特征的方法,其中自相关是一种将信号或图像与其自身的时移版本相关联的统计方法,产生一种计算简单的方法来分析地面覆盖和结构。

Bajcsy[33]于 1973 年开发了傅立叶频谱方法,在频域中使用各种类型的滤波器来分离各种类型的重复特征作为纹理。

Haralick 于 1973 年开发并使用了灰度级空间相关性矩阵、GLCMs、SDMs 或共生矩阵[6],以及 SDMs 的一组汇总统计指标,以帮助对纹理进行数字分类。一些(但不是全部)汇总指标被证明是有用的;然而,SDM 的分析和新 SDM 指标的开发仍在继续,包括空间区域内 SDM 数据的 2D 可视化和过滤等方法[26],以及添加新的 SDM 统计指标,其中一些将在本章中讨论。

20 世纪 80 年代—基于结构和模型的纹理分类方法

虽然早期的工作集中在描述相邻像素的小核之间的统计度量的微观纹理,但是宏观纹理被开发来处理更大区域内的纹理结构。K. Laws 在 1979 年和 1980 年开发了纹理能量检测方法【35–37】,以及纹理分类器,它们可以被认为是一些现代分类器概念的先驱。Laws 方法可以被实现为并行流水线中的纹理分类器,该并行流水线具有通过高斯滤波图像上的一组卷积掩模来获取梯度以隔离纹理微观特征的阶段,随后是处理噪声的高斯平滑阶段,随后是来自组合梯度的能量计算,随后是匹配纹理描述符的分类器。

特征滤波器由 Ade【38】于 1983 年开发,作为梯度法或能量法和 SDMs 的替代方案;使用局部 3×3 像素区域强度的协方差矩阵表示来实现特征滤波器,这允许基于协方差矩阵中的特征向量内的方差进行纹理分析和聚合到结构中。

结构方法由 Davis[39]于 1979 年开发,旨在关注纹理的总体结构,而不是图元或微观纹理特征。霍夫变换于 1972 年由杜达和哈特[228]发明,作为一种寻找直线和曲线的方法,1988 年被艾希曼和卡斯帕里[40]用于提供不变纹理描述。

分形方法和马尔可夫随机场方法被开发成纹理描述符,虽然这些方法对于纹理合成可能是好的,但是它们不能很好地映射到纹理分类,因为分形和马尔可夫随机场方法都使用随机场,因此当应用到非随机的真实世界纹理时存在局限性。

20 世纪 90 年代—纹理度量的优化和改进

在 1993 年,Lam 和 Ip[41,47]使用金字塔分割方法来实现空间不变性,其中使用 Voronoi 多边形镶嵌和不规则金字塔分割技术在取自二进制阈值图像的 Q 点周围将图像分割成同质区域;为每个多边形计算五个形状描述符:面积、周长、圆度、方向和长/短轴比,组合成纹理描述符。

局部二元模式 (LBP )于 1994 年由 Ojala 等人【173】开发,作为一种编码模式和对比度以定义纹理的新方法【43,44,15,16】;自那以后,数百名研究人员在理论基础、2D 和 3D 推广、面部检测中使用的特定领域兴趣点描述符以及运动分析的时空应用等领域对 LBP 文献进行了补充[42]。LBP 的研究在这个时候仍然相当活跃。LBP 在第六章中有详细介绍。强大的 LBP 方法有许多应用,如纹理度量、特征描述符和图像处理算子,后者在第二章中讨论过。

2000 年到今天—更健壮的不变纹理度量和 3D 纹理

特征度量研究正在研究对尺度、旋转、光照、透视等不变的纹理度量,以接近人类纹理辨别的能力。实际上,纹理在某些圈子里被交替用作特征描述符。Pun 和 Lee[45]的工作是开发旋转不变纹理度量以及尺度不变性的一个例子。不变性属性在第五章的通用分类法中讨论。

正在开发的下一波度量标准将越来越多地利用 3D 深度信息。一个例子是由 Spence [46]在 2003 年开发的表面形状度量,其提供了用于仿射不变纹理识别和具有比例和透视不变性的纹理描述的凹凸贴图类型度量。第六章还讨论了一些相关的 3D 特征描述符。

统计方法

统计方法的主题是广泛的,我们只能让读者参考我们选择的文献。一个有用且全面的资源是在线的 NIST 国家科学技术研究所工程统计手册, 1 包括示例和附加资源和工具的链接。

可以在任何时候利用统计方法来生成新颖的特征度量。任何特征,例如像素值或局部区域梯度,都可以通过任何数量的方法统计地表示。简单的方法,如图 3-1 所示的直方图,是非常宝贵的。在第二章(图 2-22)所示的直方图中,可以很容易地看到最小值、最大值和平均值等基本统计数据。我们在这里调查统计方法在计算机视觉中的几种应用。

9781430259299_Fig03-01.jpg

图 3-1 。带有线性刻度值(黑色)和对数刻度值(灰色)的直方图,说明相同的数据如何根据图表刻度进行不同的解释

纹理区域度量

现在我们来详细看看基于纹理的特征描述的具体度量。纹理是研究最多的度量标准之一。可以从表面的角度来考虑,例如,与丝绸面料相比,粗麻布包。有许多可能的结构关系和签名可以在一系列领域中设计出来,新的结构关系和签名一直在开发中。在本节中,我们将介绍一些最常用的计算纹理度量的方法:

  • 边缘度量
  • 交叉相关
  • 傅立叶光谱特征
  • 共现矩阵,哈拉里克特征,扩展 SDM 特征
  • 定律纹理度量
  • 镶嵌
  • 局部二进制模式
  • 动态纹理

在一幅图像中,每个图像区域都有一个纹理签名,其中纹理被定义为该区域中的一个公共结构和图案。纹理特征可以是位置和强度关系的函数,如在空间域中,或者基于一些其他函数基和特征域中的比较,如使用傅立叶方法的频率空间。

纹理度量可用于分割和描述区域。基于纹理同质性来区分区域,因此,纹理作为区域分割的方法非常有效。纹理也是一种很好的特征描述度量,因此它对于特征检测、匹配和跟踪很有用。

附录 B 包含几个真实情况数据集,带有用于计算纹理度量的示例图像,包括哥伦比亚大学的 CUReT 反射率和纹理数据库。一些关键论文描述了针对 CUReT 数据集[21,48–50]使用的指标,包括作为双向反射分布函数(BRDF)和双向纹理函数(BTF)的表面外观。

这些指标旨在测量纹理作为方向和照明的函数,以捕捉每个表面的粗略细节和精细细节。如果表面纹理包含在单个像素或像素组中不明显的重要子像素细节,BRDF 反射度量可以捕捉粗略反射细节。如果表面包含逐像素的差异细节,BTF 会捕捉到精细纹理细节。

边缘度量

边缘、线条、轮廓或脊是基本的纹理特征[316,317]。仅仅通过分析图像中区域的边缘结构,就可以设计出各种简单的度量。文献中有许多边缘度量,这里举例说明了一些。

计算边缘可以被认为是从兴趣点到边缘的连续方法,其中兴趣点可以是梯度最大值或最小值处的单个像素,几个连接的梯度最大值像素组成角、脊线段或轮廓。综上所述,梯度点是退化边缘,边缘是连通梯度点的集合。

可以对图像区域局部或全局计算边缘度量,如下所示:

  • 计算每个像素处的梯度 g(d) ,选择适当的梯度算子 g() 并选择适当的内核大小或距离 d 来瞄准微观或宏观边缘特征。
  • 距离 d 或内核大小可以变化以实现不同的度量;许多研究人员已经使用了 3x3 内核。
  • 通过将每个边缘的宁滨梯度方向计算成直方图来计算边缘方向;例如,在 0 度、45 度、90 度、135 度、180 度、225 度、270 度总共使用 8 个 45 度角度增量仓。

可以使用其他几种方法来计算边缘统计数据。这里显示了代表性的方法;参见 Shapiro 和 Stockton [517]的标准参考。

边缘密度

边缘密度可以表示为一个区域中梯度幅度 g m 的平均值。

image

边缘对比度

边缘对比度可以表示为梯度幅度的平均值与该区域中最大可能像素值的比值。

image

边缘熵

边缘随机性可以表示为梯度幅度的香农熵的度量。

image

边缘方向性

边缘方向性可以表示为梯度方向的香农熵的度量。

image

边缘线性度

边缘线性使用梯度方向测量共线边缘对的共现,如图 3-2 中边缘 a-b 所示。

image

9781430259299_Fig03-02.jpg

图 3-2 。用于说明边缘度量关系的边缘 a、b、c、d 的梯度方向

边缘周期性

边缘周期性使用梯度方向测量同向边缘对的共现,如图 3-2 中的边缘 a–c 所示。

image

边缘尺寸

边缘尺寸使用梯度方向测量方向相反的边缘对的共现,如图 3-2 中的边缘 a-d 所示。

image

边缘图元总长度

边缘图元长度测量沿同一方向的所有梯度幅度的总长度。

image

互相关和自相关

互相关【34】是显示两个信号之间具有时间位移的相似性的度量。自相关 是信号与其自身的时间位移版本的互相关。在关于信号处理的文献中,互相关也被称为滑动内积或滑动点积。通常,这种方法用于在大信号中搜索较小的模式。

image

使用维纳-钦钦定理作为一般互相关定理的特例,互相关可以简单地写成函数 f v 的绝对平方的傅立叶变换,如下所示:

image

在计算机视觉中,用于相关的特征可以是像素或梯度幅度的 1D 线、2D 像素区域或 3D 体素体积区域。通过使用互相关导数比较来自当前图像帧和先前图像帧的特征,我们获得了有用的纹理变化相关度量。

通过将图像的位移版本与其自身进行比较,我们获得了一组局部或全局自相关纹理度量。自相关可用于检测图像中的重复图案或纹理,也可用于根据精细或粗糙来描述纹理,其中粗糙纹理比精细纹理显示更慢的自相关函数下降。参见第六章和图 6-20 中的相关性讨论。

傅立叶频谱、小波和基签名

诸如 FFT 之类的基变换将信号分解成一组基向量,根据这些基向量可以合成或重构信号。将这组基向量视为一个频谱是理解图像纹理和创建签名的一种有价值的方法。本章讨论了几种基空间,包括傅立叶、哈尔、小波和泽尼克。

虽然计算成本高且占用大量内存,但快速傅立叶变换(FFT) 通常用于产生频谱签名。FFT 频谱对许多问题都很有用。根据变换的基数,计算通常限于固定大小的矩形区域(见布拉采维尔[227])。

如图图 3-3 所示,傅里叶频谱图揭示了明确的图像特征,有助于图像的纹理和统计分析。例如,图 3-10 显示了 LBP 模式度量的 FFT 频谱。注意傅立叶谱有很多有价值的属性,比如旋转不变性,如图图 3-3 所示,其中纹理图像旋转 90 度,对应的 FFT 谱表现出相同的属性,只是旋转了 90 度。

9781430259299_Fig03-03.jpg

图 3-3 。(顶行)带纹理的示例图像。(底行)在相应的 FFT 功率谱中揭示的纹理和形状信息

小波【227】类似于傅立叶方法,并且在纹理分析中变得越来越流行【311】,这将在基础空间章节中讨论。

请注意,作为纹理度量或描述符的 FFT 频谱是旋转不变的,如图 3-3 的左下图像所示。可以在矩形 2D 区域上获取 FFT 频谱。此外,诸如围绕物体形状的周界所取的形状的环形或笛卡尔坐标的 1D 阵列可以被用作 FFT 的输入和 FFT 描述符形状度量。

共现矩阵,Haralick 特征

Haralick[6]提出了一组从相邻像素之间的方向差异计算的 2D 纹理度量,称为共生矩阵、或空间依赖矩阵 (SDM),或灰度共生矩阵(GLCM) 。通过评估在 x、y、对角线 x 和对角线 y 方向上相邻像素之间的差异来计算一组完整的四(4)个矩阵,如图 3-4 中的所示,并进一步用图 3-5 中的所示的 4x4 图像和相应的同现表进行说明。

9781430259299_Fig03-04.jpg

图 3-4 。四个不同的矢量用于 Haralick 纹理特征,其中绘制图像中每个像素的差异以揭示图像的纹理

9781430259299_Fig03-05.jpg

图 3-5 。(a) 4x4 像素图像,灰度值在 0-3 范围内。(b)对应于 SDM 表的最近邻角。(c)(d)(e)(f)每个角度的邻域计数

SDM 作为纹理度量的一个好处是它很容易在图像上一次通过就计算出来。SDM 对于旋转也是相当不变的,这通常是难以获得的鲁棒性属性。在分割区域内或兴趣点周围,SDM 图本身可以是有价值的纹理度量,因此对于纹理分析、特征描述、噪声检测和模式匹配是有用的。

例如,如果一台摄像机有数字电路读出噪声,只有在沿 x 方向从传感器中一次扫描出一条线时,它才会出现在 x 方向的 SDM 中,因此使用 SDM 信息将使智能传感器处理能够消除读出噪声。然而,应该注意的是,SDM 指标并不总是单独有用,应该用附加的特征信息来限定。SDM 主要关注空间关系,即空间方位和出现频率。因此,它主要是一种统计方法。

在四个方位计算 SDM,如图图 3-4 所示。由于 SDM 只涉及相邻的像素对,这四种计算涵盖了所有可能的空间方向。通过使用延伸到 5×5、7×7、9×9 和其他维度的成形核,SDM 可以延伸到 2×2 区域之外。

一个空间相关性矩阵基本上是一个给定像素值与另一个像素值相邻出现的次数的计数。图 3-5 说明了这个概念。例如,假设我们有一个 8 位图像(0。255).如果 SDM 显示像素值 x 频繁出现在范围 x +1 到 x -1 内的像素附近,那么我们会说在该强度下存在“平滑”纹理。然而,如果像素值 x 频繁出现在范围 x +70 到 x -70 的像素附近,我们可以说在该强度下有相当多的对比度,如果不是噪声的话。

使用 SDMs 的一个关键点是,对小图像区域和大图像区域采样时获得的不同结果保持敏感。通过在更小的区域(比如 64x64 像素)内对 SDM 进行采样,SDMs 中原本模糊不清的细节将得以展现。样本图像区域越大,填充的 SDM 就越多。采集的样本越多,SDM 图像中的细节就越有可能被模糊。实际上,使用 SDMs 时,较小的区域(即 64x64 像素)是一个很好的起点,因为较小的区域计算速度更快,并且会揭示很多关于局部纹理的信息。

图 3-6 中显示了 Haralick 指标。

9781430259299_Fig03-06.jpg

图 3-6 。哈拉里克纹理度量。(图片由英特尔出版社授权使用,来自构建智能系统)

一些研究人员扩展了 SDM 的统计特征,以增加更有用的度量[26],许多研究人员将 SDMs 应用于 3D 体积数据,取得了良好的结果[25]。

扩展的 SDM 指标

作者[26]开发了哈拉里克指标的扩展,主要是受图 3-7 所示的 SDM 图的视觉研究的启发。扩展 SDM 度量的应用包括纹理分析、数据可视化和图像识别。SDMs 的视觉图本身就是像素强度关系的有价值的指标,值得与直方图一起使用来了解数据。

扩展的 SDM 度量包括质心、总覆盖范围、低频覆盖范围、总功率、相对功率、轨迹长度、轨迹平均密度、面元平均密度、包容度、线性度和线性强度。扩展的 SDM 指标捕捉关键信息,最好通过查看 SDM 图来观察。在许多情况下,扩展 SDM 度量被计算四次,每个 SDM 方向 0、45、90 和 135 度一次,如图 3-5 所示。

从图像的角度来看,SDM 本身非常有趣和有用。在查看和理解 SDM 之后,许多建议的纹理度量是显而易见的;其他的既不明显也不明显有用,直到对 SDM 图像情节的视觉解释有了基本的了解。接下来,我们调查以下内容:

  • 显示四个方向 SDM 图的 SDM 示例:一套完整的 SDM 将包含四个不同的图,每个图对应一个方向。解读 SDM 图直观地揭示了有用的信息。例如,具有平滑纹理的图像将产生同现值的窄对角线带;具有宽纹理变化的图像将产生更大范围的值;有噪声的图像将产生在极值处具有异常值的共生矩阵。在某些情况下,噪声可能只分布在图像的一个轴上——可能分布在各行或 x 轴上,这可能表示从传感器中读取每一行时的传感器读出噪声,这表明视觉流水线中有一个面向行或线的图像准备阶段来补偿摄像机。
  • 扩展的 SDM 纹理度量:在 Haralick 提出的度量基础上增加了 12 个其他有用的统计度量。
  • 一些代码片段:这些说明了扩展的 SDM 计算,完整的源代码显示在附录 D 中。

在图 3-7 中,可以很容易地看到几个扩展的 SDM 度量,包括包容度和轨迹平均密度。注意,右边的图像没有大量的大纲图强度点或噪声(良好的包容性);大部分能量集中在对角线上(紧密轨迹),显示了一组相当平滑的图像像素过渡和纹理,而左侧图像显示了更大范围的亮度值。对于某些图像,较宽的范围可能是噪声在整个光谱中传播(较差的抑制),显示较宽的能量带和相邻像素之间的对比度。

9781430259299_Fig03-07.jpg

图 3-7 。在对应于顶行中图像的底行中的 64 个面元上计算的一对图像同现矩阵图(x 轴图)

度量 1:质心

为了计算质心,对于每个 SDM 仓 p(i,j) ,仓的计数乘以 x,y 的仓坐标,并且总仓计数被求和。质心计算被加权以基于实际的箱计数来计算质心,而不是仅基于箱数据的存在来确定宁滨区域的中心的未加权的“二进制”方法。结果是 SDM 面元上的加权质心。

image

image

image

指标 2:总覆盖率

这是对宁滨分布范围的一种度量。小的覆盖百分比将指示具有较少灰度级的图像,这在某些情况下对应于图像平滑度。例如,随机图像将具有非常大的覆盖数,因为所有或大多数 SDM 箱将被命中。覆盖特征度量(2,3,4)与下面建议的线性特征(11,12)一起,可以给出图像平滑度的指示。

image

image

指标 3:低频覆盖范围

对于许多图像,SDM 中面元计数小于阈值(例如 3)的任何面元都可以被认为是噪声。低频覆盖度量或噪声度量提供了多少宁滨在该范围内的概念。随着图像区域的样本区域的增加,这可能尤其如此。对于整个图像,阈值 3 已经被证明对于确定面元是否包含数据范围 0-255 的噪声是有用的,并且在较小的局部内核区域上使用 SDM 可以使用所有的值,而不需要阈值处理。

image

image

指标 4:修正的覆盖率

校正覆盖率是去除噪声后的总覆盖率。

image

指标 5:总功率

功率度量提供了对图像中相邻像素之间的摆动值的测量,并在四个方向上进行计算。平滑图像的幂数值较低,因为像素之间的差异较小。总功率和相对功率是相互关联的,相对功率是使用总填充仓(z)和总差分功率(t)计算的。

image

image

指标 6:相对功率

使用非空的 SDM 频段基于缩放的总功率来计算相对功率,而总功率使用所有频段。

*image

指标 7:轨迹平均密度

对于许多图像,在面元轴周围有一个高强度宁滨的“轨迹”区域(轨迹轴是相邻像素具有相同值 x=y 的地方),对应于从 SDM 图左上角画出的对角线。轨迹区域周围的聚集程度表示图像的平滑程度。来自噪声图像的宁滨将被散射,与轨迹区域几乎没有关系,而更清晰的图像将显示以轨迹为中心的图案。

image

image

基因座平均密度是基因座区域内 bin 值的平均值。该轨迹是中心对角线周围的区域,在穿过每个 SDM 中心的同一条线( x=y )两侧的 7 个像素带内。然而,数字 7 并不特别,但根据经验,它只是给出了整个图像所需特征的良好指示。该特征有利于指示平滑度。

指标 8:轨迹长度

轨迹长度测量对角线周围的轨迹浓度范围。位点长度的算法是对位点区域中的容器进行简单计数;已经发现关于该轨迹的 7 个像素的阈值带是有用的。

y=length=0;
while (y < 256) {
   x=count=0;
   while (x < 256) {
      n = |y-x|;
      if (p[i,j] == 0) && (n < 7) count++;
      x++;
   }
   if (!count) length++;
   y++;
}

指标 9:容器平均密度

这只是非空箱的平均箱数。

image

image

指标 10:遏制

包容度用于衡量 SDM 的宁滨在 SDM 的边界或边内的包容程度,有四个边或边界,例如,假设数据范围[0..255],沿着行 0 和 255 以及沿着列 0 和 255 有包含边界。典型地,容器计数 m 是 256 个容器,或者可能更少,例如 64 个。为了测量包容度,基本上检查 SDM 箱的周边以查看是否发生了任何宁滨,其中 SDM 的周边区域箱表示与某个其他值相邻的极值。图 3-7 中的左图比右图的包含度低,尤其是低值。

image

image

image

image

image

如果经常遇到极值,这可能表示某种溢出情况,如数值溢出、传感器饱和或噪声。宁滨未被加权处理。高包含数表示所有宁滨都发生在 SDM 的边界内。较低的数字表示有一些出血。这一特征在 SDM 图中看起来非常好。

公制 11。线性度

线性特性可能仅在 SDM 的单个方向上可见,或者通过比较 SDM 可见。例如,图 3-8 中的图像揭示了 SDM 组中的一些线性变化。这与使用的图像传感器(旧的管式摄像机)一致。

image

image

image

9781430259299_Fig03-08.jpg

图 3-8 。旧管式摄像机的 SDMs 显示传感器的线性变化,包括全套 0、45、90 和 135 度 SDM。(公共领域图片来自国家档案馆)

指标 12:线性强度

线性强度的算法如指标 11 所示。如果在给定的 SDM 角存在任何线性,则该角度的线性强度和线性将比其他 SDM 角相对更高(表 3-1 )。

表 3-1 。来自的扩展 SDM 指标图 3-8

image

定律纹理度量

Laws metrics【52】为纹理分析提供了一种结构方法,使用一组掩蔽核来测量固定大小的局部区域内的纹理能量或变化,类似于 2x2 区域 SDM 方法,但使用更大的像素区域来实现不同的度量。

基本法则算法包括使用几个基本步骤,根据局部能量将图像中的每个像素分类到纹理中:

  1. 从每个像素中减去来自每个核邻域的平均强度,以补偿光照变化。
  2. 使用一组核在每个像素处对图像进行卷积,每个核求和为零,然后对结果求和以获得每个核窗口上的绝对平均值。
  3. 测量卷积图像和原始图像之间的差异,揭示能量度量的规律。

Laws 定义了一组九个可分离的核来产生一组纹理区域能量度量,并且在实践中一些核比其他核工作得更好。内核是通过矩阵乘法由一组四个矢量掩码 L5、E5、S5 和 R5 组成的,如下所述。内核最初被定义为 5x5 掩码,但也使用了 3x3 近似值,如下所示。

5x5 form
L5      Level Detector          [ 1      4      6        4      1 ]
E5      Edge Detector           [-1     -2      0        2      1 ]
S5      Spot Detector           [-1      0      2        0      1 ]
R5      Ripple Detector         [ 1     -4      6       -4      1 ]

3x3 approximations of 5x5 form
L3      Level Detector          [ 1     2        1 ]
E3      Edge Detector           [-1     0        1 ]
S3      Spot Detector           [-1     2       -1 ]
R3      Ripple Detector         [*NOTE: cannot be reproduced in 3x3 form]

为了创建 2D 掩码,向量 Ln、En、Sn 和 Rn (如上所示)作为可分离的对被卷积在一起成为核;几个例子显示在图 3-9 中。

9781430259299_Fig03-09.jpg

图 3-9 。L3E3 内核组成示例

请注意,Laws 纹理度量已扩展到 3D,用于体积纹理分析。[51][52]

LBP 局部二元模式

与纹理分析的各种结构和统计方法相比,LBP 算子[18,58]将每个区域周围的局部纹理计算为 LBP 二进制代码,或微纹理,允许简单的微纹理比较,以基于相似的微纹理分割区域。(详见第六章中关于 LBP 的详细论述和参考文献,尤其是图 6-6 。)LBP 操作符[173]用途广泛,易于计算,占用内存量低,可用于纹理分析、兴趣点和特征描述。因此,LBP 算子在本书的几个地方都有讨论。

如图 3-10 所示,由本身旋转不变的可能 LBP 的子集组成的 LBP 算子的统一集合可以被分箱到直方图中,并且相应的分箱值作为 1D 阵列通过 FFT 以创建 FFT 谱,这产生了具有强旋转不变性的稳健度量。

9781430259299_Fig03-10.jpg

图 3-10 。(左)纹理图像。(中间)LBP 直方图。(右)直方图的 FFT 频谱图揭示了 LBP 直方图的旋转不变性。注意,虽然旋转图像的直方图宁滨看起来不同,但是 FFT 频谱看起来几乎相同。(图像来自使用局部二进制模式的计算机视觉的斯普林格出版社伦敦有限公司)

动态纹理

动态纹理是一个概念,用于描述和跟踪纹理区域,因为它们在帧与帧之间动态变化和变形[53,13,15,14]。例如,动态纹理可以是运动中的纹理,如海浪、烟雾、风中的树叶、火、面部表情、手势和姿势。通常在图像帧的时空集合中跟踪这些变化,其中连续的帧被堆叠到体积中作为一组进行分析。这三个维度是 XY 帧尺寸,Z 维度是从连续帧 n-2,n-1,n. 的堆叠中导出的

与动态纹理研究密切相关的领域是活动识别(在第六章中讨论),其中特征是组成活动的移动对象的一部分——例如,对手臂和腿部的特征进行逐帧跟踪,以确定运动或活动的类型,如行走或跑步。活动识别和动态纹理之间的一个相似之处是特征或纹理随着时间逐帧改变,因此对于活动识别和动态纹理分析,跟踪特征和纹理通常需要时空方法,该方法涉及具有过去和当前帧的历史缓冲区的数据结构,其提供数据的体积表示。

例如,VLBP 和 LBP-TOP(在第六章的中讨论)提供了动态纹理分析的方法,通过使用构造成在体积结构中的三维上操作的 LBP,其中体积包含堆叠到体积中的图像帧 n-2、n-1 和 n

统计区域度量

根据像素的统计度量来描述纹理是一种常见且直观的方法。通常,一个简单的区域直方图就足以很好地描述许多应用的纹理。直方图也有许多变化,这有助于广泛的纹理分析。因此,这是检验直方图方法的好时机。由于统计数学是一个广阔的领域,这里只能介绍题目,把讨论分为图像矩特征和点度量特征。

图像瞬间特征

图像矩 [518,4]是标量,类似于常见的统计测量,如均值、方差、偏斜和峰度。矩非常适合于描述多边形形状特征和一般的特征度量信息,例如梯度分布。图像矩可以基于标量点值或基函数,如傅立叶或 Zernike 方法,稍后在基空间部分讨论。

矩可以描述函数在基空间上的投影——例如,傅立叶变换将函数投影到调和函数的基上。注意,在形状描述的上下文中,1D 矩和 2D 矩之间存在概念上的关系。例如,1D 平均值对应于 2D 质心,1D 最小值和最大值对应于 2D 长轴和短轴。1D 最小值和最大值也对应于 2D 多边形形状周围的 2D 边界框(参见图 6-29 )。

在这项工作中,我们将图像矩分类在分类法中的术语多边形形状描述符下(参见第五章)。关于用于 2D 形状描述的几个图像矩的细节将在第六章的“斑点和物体的物体形状度量中介绍。

1D 分布和 2D 图像背景下的矩的共同属性包括:

  • 第 0 阶矩是平均值或 2D 质心。
  • 中心矩描述了平均值或 2D 质心附近的变化。
  • 1 st 阶中心矩包含关于 2D 面积、质心和大小的信息。
  • 2 阶中心矩与方差相关并测量 2D 椭圆形状。
  • 3 rd 阶中心矩提供了关于 2D 形状或偏斜度的对称信息。
  • 4 中心矩测量 2D 分布为高、矮、瘦、矮或胖。
  • 可以设计更高级别的矩,并由矩比组成,例如协方差。

矩可用于创建对若干鲁棒性标准不变的特征描述符,例如比例、旋转和仿射变化。稳健性和不变性标准的分类在第五章中提供。对于形状描述,在 1961 年,胡开发了用于字符识别工作的七个平面矩的理论集,其使用不变代数导出,在缩放、平移和旋转下是不变的[7]。一些研究者扩展了胡的工作。关于这个主题的一个很好的资源是 Jan Flusser 等人的【模式识别中的矩和不变矩

点度量特征

点度量可用于以下目的:(1)特征描述,(2)分析和可视化,(3)阈值和分割,以及(4)通过可编程 LUT 函数进行图像处理(在第二章中讨论)。点度量经常被忽略。使用点度量来理解图像数据的结构是设计图像预处理流水线以准备用于特征分析的图像的第一个必要步骤。同样,从直方图分析开始,如图图 3-1 和图 3-11 所示。基本点度量可以直观地确定,例如最小值、最大值、峰值和谷值。使用颜色查找表对图像中的直方图区域进行着色,很容易对数据可视化的直方图区域进行假着色。

9781430259299_Fig03-11.jpg

图 3-11 。并排的两个图像直方图,用于分析

以下是统计点数指标的汇总:

  • 分位数、中值、重新标度:通过将像素值分类到有序列表中,如在直方图过程中,可以找到各种四分位数,包括中值。同样,可以从列表中重新调整像素,并用于像素重映射功能(如第二章所述)。
  • Mix,max,mode :最小值和最大值,以及直方图分析,可用于指导图像预处理,以设计阈值方法,从数据中去除异常值。众数是像素排序列表中最常见的像素值。
  • 平均值、调和平均值和几何平均值:平均值的各种公式有助于了解主要的光照水平(暗或亮),以指导图像预处理,从而增强图像以供进一步分析。
  • 标准差、偏斜度和峰度:这些矩可以通过查看 SDM 图来可视化。
  • 相关:这个主题在本章前面的互相关和自相关中已经讨论过了。
  • 方差,协方差:方差度量提供了像素分布的信息,协方差可以用来比较两幅图像之间的方差。方差在一定程度上可以在 SDM 中被可视化,也如本章所示。
  • 比率和多元指标:点指标本身可能是有用的,但是使用简单点指标的多元组合或比率也可能非常有用。根据应用的不同,比率本身形成了特征描述符的关键属性(如第六章所述)。例如,平均值:最小值,平均值:最大值,中值:平均值,面积:周长。

全局直方图

全局直方图处理整个图像。在许多情况下,通过全局直方图的图像匹配是简单有效的,使用距离函数,如 SSD。如图图 3-12 所示,直方图揭示了像素强度的定量信息,但不是结构信息。该区域中的所有像素都对直方图有贡献,与任何特定点或特征的距离无关。正如在第二章中所讨论的,直方图本身是直方图修改方法的基础,允许根据需要拉伸、压缩或剪裁直方图的形状,然后用作反向查找表来重新排列图像像素强度级别。

9781430259299_Fig03-12.jpg

图 3-12 。不同图像的 2D 直方图形状

局部区域直方图

直方图也可以在像素的局部区域上计算,例如矩形或多边形,以及在特征属性集合上计算,例如梯度方向和幅度或其他光谱。为了创建多边形区域直方图特征描述符,首先可以使用形态学分割一个区域,以在感兴趣的区域周围创建屏蔽形状,然后只有被屏蔽的像素被用于直方图。

像素强度值的局部直方图可用作特征描述符的属性,也可用作将像素值从一个直方图形状重新映射到另一个直方图形状的基础,如第二章中的所述,通过重新整形直方图并相应地重新处理图像。第六章讨论了一系列特征描述符,如 SIFT、SURF 和 LBP,它们利用特征直方图来绑定梯度大小和方向等属性。

散点图、三维直方图

散点图 可用于可视化两个图像数据集之间的关系或相似性,用于图像分析、模式识别和特征描述。可以在散点图中比较两个图像或图像区域的像素强度,以显示这些值的对应程度。散点图可以在有限的平移不变性下用于特征和模式匹配,但是它们对于仿射、缩放或旋转不变性不太有用。图 3-13 显示了一个使用散点图在图像中寻找图案的例子,目标图案在不同的偏移量下进行比较,偏移量越小,对应性越好。一般来说,更紧密的峰特征组表明强的结构或模式对应性;数据越分散,对应性越弱。模式偏移移动得越远,对应性就越低。

9781430259299_Fig03-13.jpg

图 3-13 。图像和目标图案在不同位移下的散点图,呈现为 3D 直方图。顶行:(左)图像,(中)图像中的目标图案,(右)图案本身的 SDM。中间一行:(左)目标和图像偏移 1,1(右)目标和图像偏移 8,8,底行:(左)目标和图像偏移 16,16,(右)目标和图像偏移 32,32

注意,通过分析峰值特征与低频特征的比较,可以将对应关系可视化。图 3-14 显示了两幅独立图像的散点图。沿着轴的峰的缺乏和数据中扩散的存在显示了低的结构或模式对应性。

9781430259299_Fig03-14.jpg

图 3-14 。两个不同图像的散点图显示沿对角线的低对应关系

可以从两幅图像逐个像素地制作散点图,其中像素对形成用于散点图的笛卡尔坐标,使用图像 1 的像素强度作为 x 坐标,图像 2 的像素强度作为 y 坐标,然后像素对对应的计数被装入散点图中。为了可视化,每个坐标的面元计数可以是假彩色的。图 3-15 提供了一些示例代码。

9781430259299_Fig03-15.jpg

图 3-15 。代码说明宁滨 8 位数据的散点图比较两个图像的像素和宁滨的结果绘图

对于特征检测,如图 3-12 所示,散点图可以在粗平移步骤揭示足够的对应关系,以减少某些特征检测和模式匹配应用中对图像金字塔的需求。例如,模式搜索和比较的步长可以通过跨越或跳过像素来优化,以 8 或 16 个像素的间隔搜索图像,而不是在每个像素搜索,从而减少特征检测时间。此外,散点图数据可以首先被阈值化为二进制图像,被屏蔽以仅显示峰值,被转换为位向量,并使用汉明距离测量对应性以提高性能。

多分辨率、多尺度直方图

多分辨率直方图【10】已用于纹理分析【54】,也用于特征识别【55】。第六章的中描述的 PHOG 描述符利用了特征光谱的多尺度直方图——在这种情况下,是梯度信息。注意,多分辨率直方图为特征描述提供了尺度不变性。对于纹理分析[54],使用图像金字塔构建多分辨率直方图,然后为每个金字塔等级创建直方图并连接在一起[10],这被称为多分辨率直方图。该直方图具有算法简单、快速计算、低存储需求、噪声容限以及跨空间和旋转变化的高可靠性的期望属性。参见图 3-16 。在 Zhao 和 Pietikainen [15]的方法中使用了金字塔的变体,采用了来自体积的多维金字塔图像集。

9781430259299_Fig03-16.jpg

图 3-16 。多分辨率直方图图像序列。注意,在试图创建更不变的特征描述符时,在各种高斯模糊水平上获取多个直方图

创建和使用多分辨率直方图的步骤如下:

  1. 对图像应用高斯滤波器。
  2. 创建一个图像金字塔。
  3. 在每个级别创建直方图。
  4. 使用 L1 范数归一化直方图。
  5. 创建累积直方图。
  6. 创建差异直方图或狗图像(金字塔等级之间的差异)。
  7. 使用差异直方图重新归一化直方图。
  8. 从该组差异直方图创建特征向量。
  9. 使用 L1 范数作为直方图之间比较的距离函数。

径向直方图

对于某些应用,使用源自形状质心的径向样本计算直方图可能很有价值[136][137]。为了做到这一点,从形心到形状的周边投射一条线,沿着每条线记录像素值,然后将其装入直方图。参见图 3-17 。

9781430259299_Fig03-17.jpg

图 3-17 。径向直方图插图[136][137]

轮廓或边缘直方图

对象的周界或形状可以是形状直方图的基础,形状直方图包括被装入直方图的对象周界上的每个点的像素值。除了记录沿周界的实际像素值,将在第六章中讨论的链码直方图(CCH)显示了连接边缘点坐标处的周界方向。总之,CCH 和轮廓直方图提供了有用的形状信息。

基础空间度量

可以在基空间中描述特征,该基空间涉及将像素转换到备选基中,并在所选基中描述特征,例如频域。什么是基空间,什么是变换?考虑以 10 为基数的十进制系统和以 2 为基数的二进制系统。我们可以通过变换在两种数字系统之间转换数字。傅立叶变换使用正弦和余弦作为频率空间中的基函数,使得傅立叶变换可以在时域像素空间和频率空间之间移动像素。基空间矩描述了函数在基空间上的投影[518]—例如,傅立叶变换将函数投影到调和函数的基上。

基空间和变换对于广泛的应用是有用的,包括图像编码和重建、图像处理、特征描述和特征匹配。如图图 3-18 所示,图像表示和图像编码与特征描述密切相关。可以使用编码方法特征描述符 来描述图像,也可以从编码或特征描述符中重构图像。存在许多方法来从可选的基础空间编码重建图像,范围从无损 RLE 方法到有损 JPEG 方法;在第四章的中,我们提供了仅从局部特征描述符重建的图像的插图(参见图 4-16 和图 4-17 )。

9781430259299_Fig03-18.jpg

图 3-18 。基础空间选项的过度简化范围,显示特征集大小以及描述和重构的复杂性

如图 3-18 所示,可以想象一系列基空间,从具有无限复杂性的连续实函数或现场场景,到完整的光栅图像、JPEG 压缩图像、频域或其他基表示,下至局部特征描述符集。注意,从基础空间表示中提供和使用的细节越多,真实场景可以被识别或重建得越好。因此,折衷是在最佳基空间中找到最佳表示或描述,以使用最少量的计算和内存达到不变性和准确性目标。

变换和基空间是数学和信号处理中的一个广阔领域,在其他著作中有很好的介绍,因此这里我们只介绍对图像编码和特征描述有用的常见变换。我们描述了它们的主要优点和应用,并让读者在阅读过程中参考文献。参见图 3-19 。

9781430259299_Fig03-19.jpg

图 3-19 。图像处理和计算机视觉中使用的各种基变换

由于我们在处理计算机视觉中的离散像素,我们主要对离散变换感兴趣,尤其是那些可以用优化软件或固定功能硬件加速的变换。然而,我们也讨论了一些积分变换方法,它们可能计算速度较慢,使用较少。以下是一个概述:

  • 全局或局部特征描述。可以使用图像的变换和基础空间表示作为全局特征描述符,允许场景和较大的对象被识别和比较。2D FFT 频谱只是一个例子,使用 SAD 或 SSD 距离度量来比较 FFT 频谱特征是很简单的。
  • 图像编码和压缩。许多变换已被证明对图像编码和图像压缩是有价值的。基本方法包括将图像或图像的块区域变换到另一个基空间。例如,将图像的块变换到傅立叶域允许图像区域被表示为正弦波和余弦波。然后,基于该区域中的能量数量,可以存储或编码数量减少的频率空间分量来表示图像。能量大部分包含在低频成分中,这可以在傅立叶功率谱中观察到,如图图 2-16 所示;高频分量可以被丢弃,而重要的低频分量可以被编码,因此在细节损失很小的情况下实现了一些图像压缩。存在许多新颖的图像编码方法,例如在图像金字塔上使用缩放拉普拉斯特征的基础。[318]

傅立叶描述

在第二章的中,在图像预处理和滤波的背景下,详细介绍了傅立叶变换族。然而,傅立叶频率分量也可以用于特征描述。使用前向傅立叶变换,图像被变换成频率分量,其可被选择性地用于描述变换的像素区域,通常用于图像编码和压缩,以及用于特征描述。

傅立叶描述符提供了几个不变性属性,如旋转和缩放。任何值数组都可以输入 FFT,以生成描述符,例如直方图。图 3-20 显示了一个常见的应用,描述了一个形状的圆度,并找到了长轴和短轴,作为正弦波的极值频率偏差。一个相关的应用是通过将谐波级数的 FFT 幅值拟合为笛卡尔空间中直线的极坐标来找到周长上的平坦线段的端点。

9781430259299_Fig03-20.jpg

图 3-20 。围绕左侧圆的奇数形状多边形的傅立叶描述符

在图 3-20 中,一个复杂的波被绘制成一个深灰色的圆,围绕着一个正弦波函数或一个正圆展开。注意,围绕复函数的每个点的长度的傅立叶变换产生周期波的近似,并且复波的形状的傅立叶描述符是可见的。在图 6-29 中显示了另一个说明傅立叶描述符的例子。

沃尔什-哈达玛变换

哈达玛变换[4,9]使用一系列值为+1 或-1 的方波,非常适合数字信号处理。它易于优化,因为只需要有符号加法来对基向量求和,使得这种变换比正弦基变换快得多。谐波哈达玛级数和相应变换的基向量可以通过对沃尔什函数进行采样来生成,这构成了正交基集;因此,这种组合方法通常被称为沃尔什-哈达玛变换;参见图 3-21 。

9781430259299_Fig03-21.jpg

图 3-21 。(左)沃尔什哈拉玛基集。(中心)哈尔基集。(右)倾斜基集

哈尔变换

哈尔变换[4,9]类似于傅立叶变换,除了基向量是类似于方波的哈尔特征,并且类似于小波。哈尔特征,由于它们的正交矩形形状,适合于检测具有接近恒定灰度级的垂直和水平图像特征。HAAR 特征不能很好地解决数据中的任何结构不连续,例如边缘和局部纹理;参见图 3-21 和 6-22 。

倾斜变换

倾斜变换[284],如图 3-21 所示,最初是为电视信号编码开发的,后来应用于一般图像编码[283,4]。除了基函数是一系列斜波、锯齿波或三角波之外,斜波变换类似于傅立叶变换。倾斜基向量适用于图像亮度随函数长度线性变化的应用。倾斜变换适用于数字系统中的离散优化。虽然主要的应用是图像编码和图像压缩,但是倾斜变换适合于特征描述。它与 Karhunen-Loeve 变换和 Slant-Hadamaard 变换密切相关[512]。

泽尼克多项式

1953 年诺贝尔奖获得者 Fritz Zernike 在研究衍射光栅的光学性质和光谱时,在寻求发展相衬显微镜的过程中设计了 Zernike 多项式。Zernike 多项式[272–274]已广泛用于人类视觉系统的光学分析和建模,以及激光手术等医疗程序的辅助。它们提供了一个精确的光波像差模型,表示为一组基多项式,如图 3-22 所示。

9781430259299_Fig03-22.jpg

图 3-22 。前 18 个泽尼克模式。注意完美滤光器的各种像差;左上角的图像是完美的过滤器。(图片由东北州立大学的托马斯·萨尔蒙博士提供,经许可使用)

Zernike 多项式类似于可转向滤波器[388],也包含滤波器形状的定向基集,用于识别定向特征,并利用矩来创建描述符。Zernike 模型使用径向坐标和圆形区域,而不是许多其他特征描述方法中使用的矩形面片。

Zernike 方法广泛用于验光以模拟人眼像差。Zernike 矩也用于图像水印[278]和图像编码和重建[279,281]。Zernike 特征提供了比例和旋转不变性,这部分是由于径向坐标对称性和更高阶多项式内可能增加的细节级别。通过将 Zernike 基特征与目标图像中的圆形斑块进行比较,Zernike 矩可用于计算机视觉应用[276,277]。

存在计算泽尼克多项式和矩的快速方法[275,280,282],其利用基函数围绕 xy 轴的对称性来减少计算,并且还利用递归。

可控滤波器

可控滤波器在这里被松散地认为是基函数,可以用于滤波或特征描述。概念上类似于 Zernike 多项式,方向可调滤波器[388,400]通过在简单变换中合成所选基函数的方向可调或定向线性组合而构成,例如高斯滤波器的正交对和每个函数的定向版本。

许多类型的滤波函数可用作可控滤波器的基础[389,390]。滤波器变换是通过将滤波器组中的基函数组合在一起创建的,如图图 3-23 所示。为每个函数选择增益,对滤波器组中的所有滤波器求和,然后自适应地应用于图像。可以创建金字塔基函数集来进行规模运算。应用包括将定向可控滤波器与目标图像区域进行卷积,以确定滤波器响应强度、方向和相位。其他应用包括基于特征方向过滤图像、轮廓检测和特征描述。

9781430259299_Fig03-23.jpg

图 3-23 。(左)方向可调滤波器基本集显示了一阶高斯滤波器的八个方向。(右图)如何组合方向可调滤波器进行方向滤波。使用 ImageJ Fiji SteerableJ 插件生成的过滤图像,来自使用 Canny-Like 标准进行特征检测的可操纵过滤器的设计,M. Jacob,M. Unser,PAMI,2004 年

对于特征描述,有几种可行的方法,例如,将每个可控基函数与图像面片进行卷积。然后,来自所有方向可调滤波器的最高的一个或两个滤波器响应或矩可以被选择作为集序特征描述符,或者所有的滤波器响应可以被用作特征描述符。作为优化,可以首先在小块中确定兴趣点,并且可以使用兴趣点的方向来选择最接近兴趣点方向的一个或两个方向可调滤波器;然后,最近的可操纵文件被用作计算描述符的基础。

Karhunen-Loeve 变换和 Hotelling 变换和

Karhunen-Loeve 变换(KLT)【4,9】旨在将连续随机过程描述为级数展开,这与描述周期信号的傅立叶方法相反。霍特林后来利用主成分设计了 KLT 的离散等价物。“KLT”是指这两种方法的最常见的名称。

基函数依赖于底层图像的特征向量,并且计算特征向量是一个计算密集型过程,没有已知的已建立的快速变换。KLT 不可分离以优化图像块,因此 KLT 通常用于小数据集的 PCA,例如用于模式分类、聚类和匹配的特征向量。

小波变换和 Gabor 滤波器

小波,顾名思义,是短波或小波[334]。可以把子波想象成一个短持续时间的脉冲,比如地震,开始和结束于零,而不是一个连续的或共振的波。小波与给定信号(如图像)进行卷积,以找到相似性和统计矩。因此,小波可以像空间域中的卷积核一样实现。参见图 3-24 。

9781430259299_Fig03-24.jpg

图 3-24 。使用“墨西哥礼帽”小波基的小波概念。(上)几顶按比例缩小的墨西哥礼帽源自母小波。(下)几个平移的小波

小波分析是一个广阔的领域[291,292],有许多应用和有用的资源,包括小波族和分析软件包库[289]。快速小波变换(fwt)存在于常见的信号和图像处理库中。小波变换的几种变体包括:

  • 离散小波变换
  • 平稳小波变换(SWT)
  • 连续小波变换
  • 提升小波变换(LWT)
  • 平稳小波包变换(SWPT)
  • 离散小波包变换(DWPT)
  • 分数傅里叶变换(FRFT)
  • 分数小波变换

小波是为满足各种目标而设计的,是为特定的应用而制作的;没有单一的小波函数或基。例如,可以设计一组小波来表示音阶,其中每个音符(例如中音 C)被定义为具有八分之一音符小波脉冲的持续时间,然后将该组中的每个小波在信号上进行卷积,以定位音阶中的相应音符。

当设计小波时,母小波是小波族的基础,然后使用母小波的平移、缩放或压缩来导出子小波。理想情况下,一组小波是重叠和互补的,以便无间隙地分解数据,并且在数学上是可逆的。

小波在变换中用作一组非线性基函数,其中每个基函数可以根据需要进行设计,以最佳匹配输入函数中的期望特征。因此,与使用一组统一基函数的变换(如傅立叶变换使用正弦和余弦函数)不同,小波使用一组动态基函数,这些基函数在本质上是复杂且不均匀的。参见图 3-25 。

9781430259299_Fig03-25.jpg

图 3-25 。各种 2D 小波形状:(从左到右)礼帽,香农,Dabechies,Smylet,Coiflett

小波已经被用作尺度和旋转不变特征描述[288]、图像分割[285,286]、形状描述[287]以及显然所有预期种类的图像和信号滤波、去噪、图像压缩和图像编码的基础。可以为特征描述设计一组应用特定的小波。

Gabor 函数

小波可以被认为是早期 Gabor 函数概念的扩展[333,293],它可以作为一组面向 2D 的带通滤波器用于成像应用。Gabor 的工作集中在声音的物理传输和傅立叶方法的问题上,这些方法涉及时变信号,如不能完美地表示为周期性频率信息的警报声。Gabor 提出了一种比傅立叶分析更紧凑的表示方法,使用了一种叫做原子的概念,记录了可以更紧凑地传输的声音系数。

霍夫变换和拉冬变换

许多人认为,霍夫变换[228–230]和拉冬变换[299]是相关的,结果是相同的;[295][300]参见图 3-26 。Radon 变换是一种积分变换,而 Hough 变换是一种离散方法,因此速度更快。霍夫方法广泛用于图像处理,并可通过数据并行方法使用 GPU [298]加速。Radon 算法稍微精确一些,可能在数学上更合理,并且通常与应用于从 x 射线投影重建的 x 射线断层摄影相关联。我们主要关注霍夫变换,因为它在图像处理库中广泛可用。

9781430259299_Fig03-26.jpg

图 3-26 。线检测:(左)原图。(中间)拉冬变换。(右)霍夫变换。变换图像的亮度揭示了累加器的相对强度,正弦曲线交点表示特征的角度方向

霍夫变换和拉冬变换的主要应用是形状检测以及直线、圆和参数曲线的形状描述。主要优势包括:

  • 对噪声和部分遮挡具有鲁棒性
  • 填充明显的线条、边缘和曲线中的间隙
  • 可以参数化以处理各种边缘和曲线形状

缺点包括:

  • 一次查找一种类型或参数化的特征,例如线
  • 共线线段没有被区分和聚集在一起
  • 可能会错误地填充未连接的间隙和链接边
  • 线的长度和位置是不确定的,但是这可以在图像空间中完成

霍夫变换主要是全局或区域描述符,并且在更大的区域上操作。它最初被设计用于检测直线,随后被推广用于检测参数形状[301],例如曲线和圆。但是,向特征添加更多的参数化需要更多的内存和计算。霍夫特征可用于标记由常规参数曲线和直线描述的区域边界。霍夫变换对于一些应用是有吸引力的,因为它可以容忍直线或曲线中的间隙,并且不受噪声或一些遮挡的强烈影响,但是通过其他方法的形态学和边缘检测通常是足够的,所以霍夫变换的应用有限。

霍夫变换的输入是已经被阈值化的梯度幅值图像,留下主要的梯度信息。渐变幅度用于构建显示图像中所有参数化要素的地图,例如,给定方向的线或给定直径的圆。例如,为了检测线,我们将像素空间中的每个梯度点映射到霍夫参数空间中,参数化为对应于与原点相距距离 d 处具有方向角 θ 的所有线的单个点( d,θ )。曲线和圆参数化使用不同的变量[301]。参数空间被量化成单元或累加器箱,并且每个累加器通过对经过相同霍夫点的梯度线的数量求和来更新。累加器方法被修改用于检测参数曲线和圆。设定累加器空间的阈值并仅将最高的累加器值重新投影回图像上对于突出显示特征是有用的。

摘要

本章提供了全局和区域指标的部分历史,对局部特征指标的处理推迟到第四章和第六章的章节。提供了一些关于结构和统计纹理度量的发展的历史背景,以及用于特征描述的基础空间,和几个常见的区域和全局度量。纹理分析和统计分析的广泛主题已经被应用到计算机视觉中。

由于很难清晰地划分图像处理和计算机视觉中的所有相关主题,因此在此处和第二章、第四章、第五章和第六章中有一些主题重叠。


1 见 NIST 工程统计在线资源:http://www.itl.nist.gov/div898/handbook/***

四、局部特征设计概念、分类和学习

科学,我的孩子,是由错误组成的,但这些错误是有益的,因为它们会一点一点地通向真理

—儒勒·凡尔纳,地心之旅

在这一章中,我们研究了与局部特征描述符设计相关的几个概念,即局部模式、形状、光谱、距离函数、分类、匹配和对象识别。主要焦点是局部特征度量,如图图 4-1 所示。本讨论遵循将在第五章中介绍的一般视觉分类法,包括理解兴趣点检测器和特征描述符的关键基础,如将在第六章中调查的,包括检测器和描述符方法共有的选定概念。请注意,修改以及混合和匹配检测器和描述符以获得最佳结果的机会总是存在的。

9781430259299_Fig04-01.jpg

图 4-1 。愿景流水线中的各个阶段;本章将关注局部特征度量和分类及学习

地方特色

我们关注于局部特征描述符的设计,以及它们如何用于训练、分类和机器学习。讨论遵循第五章中提出的特征分类法,如图图 5-1 所示。主要元素有:(1) 形状(例如长方形或圆形);(2) 模式(密集采样或稀疏采样);以及(3) 光谱(二进制值、标量、稀疏码或其他值)。密集模式特征将使用局部区域中的每个像素,例如矩形中的每个像素,而稀疏特征将仅使用该区域中的选定像素。

除了形状和图案的许多方法之外,还有许多用于光谱的方法,从基于梯度的补丁方法到稀疏局部二进制图案方法。这里涉及的主要主题包括:

  • 探测器,用于定位图像中感兴趣的特征。
  • 描述符,用于描述感兴趣特征周围的区域。
  • 描述符属性,如特征鲁棒性和不变性。
  • 分类,用于创建特征和最佳特征匹配的数据库。
  • 识别,用于将目标图像中检测到的特征与训练好的特征进行匹配。
  • 特征学习,或机器学习方法。

基于本章介绍的概念,第五章中提供的视觉分类法提供了一种总结和分析特征描述符及其属性的方法,从而能够在不同方法之间进行有限的比较。

检测器、兴趣点、关键点、锚点、地标

一个探测器 在图像中发现有趣的特征。文献中讨论“感兴趣的特征”的术语包括几个可互换的术语,如关键点界标、兴趣点、锚点,所有这些术语都是指诸如角点、边缘或图案之类的能够以高可能性重复发现的特征。在第六章的中,我们将探讨许多探测器方法,以及各种设计方法。在某些情况下,关键点检测器用于确定周围特征描述符的方向向量,例如,通过计算拐角的整体梯度方向。不确定或低质量的关键点通常在特征描述之前被过滤掉。注意,许多关键点方法在较小的像素区域上操作,例如 LBP 的 3x3 和 FAST 的 7x7。

关键点位置本身可能不足以进行特征匹配;然而,这里讨论的一些方法仅依赖于关键点,没有特征描述符。特征描述提供了关于每个关键点的更多信息,并且可以在更大的区域和多个尺度上计算,例如 SIFT 和 ORB。

描述符、特征描述、特征提取

可以在每个关键点计算特征描述符??,以提供关于关键点周围像素区域的更多信息。然而,在跨固定大小像素网格计算特征的方法中,例如 Viola Jones 方法[146],不需要兴趣点,因为网格定义了描述符区域。特征描述通常使用颜色或灰度强度通道的某种组合,以及诸如梯度和颜色的局部信息。特征描述发生在形状上,例如正方形或圆形。在某些情况下,像素点对样本模式用于计算或比较选定的像素值,以产生一个描述符向量——例如,如稍后在图 4-8 中所示。

通常,兴趣点提供一定程度的不变性和鲁棒性,例如,在缩放和旋转方面。在许多情况下,描述符的方向是从兴趣点确定的,并且描述符提供了其他不变性属性。将兴趣点与描述符相结合提供了更大的不变性属性集。并且如果来自同一对象的几个描述符相关联在一起,则对象识别是可能的。

例如,描述符可以包含在几个强度通道、多个几何尺度和多个视角上计算的多元、多维和多几何量。一个多元描述符可以包含 RGBD 数据(红色、绿色、蓝色和 Z 深度数据);多维描述符可以包含图像金字塔中不同缩放级别的特征描述;并且多几何描述符可以包含跨局部图像块或区域的仿射变换计算的一组特征描述。

设计功能的方法没有对错之分;采取了许多方法。例如,包括对象的区域形状、区域纹理和区域颜色的一组度量在定位水果的应用中可能是有帮助的,而另一个应用可能不需要颜色或形状,而是可以依赖于兴趣点、特征描述符及其空间关系的集合。事实上,将几个较弱的描述符方法组合成一个多元描述符通常是最好的方法。

从图像中计算特征描述符通常被称为特征提取

稀疏局部模式方法

虽然一些方法在整个图像的规则采样网格内密集地描述特征,例如在第六章中讨论的 PHOG [191]方法,但是其他方法,例如 FREAK [130]使用稀疏局部模式对锚定在兴趣点的像素进行采样,以创建描述符。根据不同的方法,可以通过设计来训练、学习或选择形状,并且目前使用许多形状和图案的拓扑结构。

为了构建关于稀疏局部模式和描述符方法的讨论,请注意与全局和区域描述符方法的对比,后者通常而不是依赖于稀疏局部模式。相反,全局和区域方法通常使用较大形状(如矩形或其他多边形)的密集采样。例如,多边形形状描述符,如将在第六章中讨论的,可以使用密集方法(如数学形态学和区域分割)描绘或分割特征区域。在第三章中讨论的全局和区域描述符度量,如纹理度量、直方图或 SDM,通常是在内聚的密集区域而不是稀疏区域中计算的。

局部特征属性

这一部分讨论了如何选择特征来提供特征良好性的期望属性,例如不变性和健壮性。

选择特征描述符和兴趣点

必须选择兴趣点检测器和特征描述方法 一起工作,并且对于正在处理的图像类型工作良好。对于检测器和描述符对,必须考虑鲁棒性属性,例如对比度、比例和旋转。如附录 A 所示,每个兴趣点检测器都是为寻找特定类型的特征而设计的,因此没有一种方法适用于所有类型的图像。

例如,FAST 和 Harris 方法通常找到许多小的单尺度兴趣点,而其他方法,如 SIFT 中使用的方法,找到更少、更大和微调的多尺度兴趣点。期望对感兴趣点检测器参数进行一些调整,以便使它们能够工作,或者可能需要对图像进行一些预处理,以帮助检测器首先找到感兴趣点。(第六章提供了兴趣点方法和背景数学概念的概述。)

特征描述符和特征匹配

特征描述是特征匹配 的基础,导致图像理解、场景分析和物体跟踪。特征匹配中的中心问题包括如何确定一个特征是否与其他相似特征相区别,以及该特征是否是更大对象的一部分。

由于许多原因,确定特征匹配的方法是关键的;这些原因包括计算成本、内存大小、可重复性、准确性和鲁棒性。虽然完美匹配是理想的,但在实践中,相对匹配是由距离函数确定的,其中输入的特征描述符集与已知的特征描述符进行比较。但是我们将在本章后面讨论几个距离函数。

善良的标准

可以一次对一个属性进行测量。稍后在表 4-2 中提供了特征地标的良好属性的一般列表。请注意,这个列表主要是关于不变性和健壮性:这些是关键概念,因为性能可以使用各种优化方法来调整,正如将在第八章中讨论的。当然,在一个给定的应用中,善良的一些属性比其他的更重要;这将在第七章的中结合真实情况数据进行讨论。

我们如何知道一个特性对于应用来说是好的呢?我们可以将讨论分为兴趣点方法和描述符方法,以及两者提供的组合鲁棒性和不变性属性(见表 4-1 )。特征锚定的兴趣点至关重要,因为如果锚定不好且无法轻松重复地找到,则生成的描述符将在次优位置计算。

表 4-1 。好的特征描述符和兴趣点的一些属性。(一般鲁棒性标准参见图 5-2 )

|

良好的特性度量属性

|

细节

|
| --- | --- |
| 比例不变性 | 应该能够找到不同比例的特征 |
| 透视不变性 | 应该能够从视野中的不同角度找到特征 |
| 旋转不变性 | 该特征应该在图像平面内的各种旋转中被识别 |
| 翻译不变性 | 这一特征应该在 FOV 的不同位置得到承认 |
| 反射不变性 | 该特征应该被认为是其自身的镜像 |
| 仿射不变性 | 该特征应该在仿射变换下被识别 |
| 噪声不变性 | 该特征在存在噪声的情况下应该是可检测的 |
| 光照不变性 | 该特征在包括亮度和对比度变化在内的各种照明条件下应该是可识别的 |
| 计算效率 | 特征描述符应该能够高效地计算和匹配 |
| 特殊性 | 该特征应该是独特和可检测的,具有低的误匹配概率,适合于从特征数据库中进行匹配 |
| 描述简洁 | 该特征应该不需要大量的存储器来保存细节 |
| 遮挡鲁棒性 | 当部分特征或特征集被遮挡时,可以描述和检测该特征或特征集 |
| 聚焦或模糊鲁棒性 | 可以在不同的聚焦程度下检测特征或特征集(即,图像金字塔可以提供这种能力的一部分) |
| 杂乱和异常鲁棒性 | 可以在存在异常特征和杂乱的情况下检测该特征或特征集 |

请注意,在许多情况下,图像预处理是创建良好特征的关键 ( 图 4-1 )。如果图像数据存在可以纠正或改进的问题,则应在图像预处理之后进行特征描述。请注意,许多特征描述方法依赖于描述符创建期间的局部图像增强,例如关键点周围区域的高斯模糊以消除噪声,因此图像预处理应该补充描述符方法。每种预处理方法都有缺点和优点;图像预处理信息参见表 2-1 和第二章。

9781430259299_Fig04-02.jpg

图 4-2。(左)在原始图像上计算的 SURF 特征描述符。(右)在特征提取之前,已经使用直方图均衡化对图像进行了预处理,因此发现了一组不同但重叠的特征

可重复性,容易还是难发现

理想情况下,该特征在图像中容易找到,这意味着该特征描述包含足够的信息,在各种条件下(如表 4-1 所示)都是鲁棒的,例如对比度和亮度变化、比例和旋转。重复性特别适用于兴趣点检测,因此兴趣点检测器方法的选择至关重要。(附录 A 包含显示几种常见兴趣点检测器有趣的不可重复异常的示例图像。)

一些描述符,如 SIFT [161,178],已知在许多成像条件下是鲁棒的。这并不令人惊讶,因为 SIFT 被设计为在多个维度上进行区分,例如尺度和旋转,使用精心组成的局部区域梯度集,并应用加权因子来增加靠近特征中心的梯度的重要性。但是鲁棒性和可重复性是以计算成本为代价的。SIFT [161,178]是计算量最大的方法之一;然而,第六章调查了各种 SIFT 优化和变化。

明显与不明显

描述符在以下情况下是独特的:

  • 该特征可以与图像的其他类似特征区域相区别。
  • 不同的特征向量在特征集中是唯一的。
  • 使用合适的距离函数可以有效地匹配该特征。

如果不能区分相似的特征,则特征是模糊的;这可能是由于缺少合适的图像预处理、描述符中的信息不足或者为匹配阶段选择的距离函数不合适造成的。当然,将信息添加到更简单的描述符中以使描述符成为混合多元或多尺度描述符可能是提高独特性所需要的全部。例如,可以添加颜色信息来区分肤色。

相对和绝对位置

位置信息(如坐标)对于要素的良好性至关重要。例如,为了使用对人眼的角位置的约束将特征关联在一起,需要兴趣点坐标。作为智能匹配过程的一部分,通过使用眼角位置之间的距离和角度,这些能够更准确地识别和定位眼睛。

随着深度传感器的使用越来越多,简单地在描述符本身中提供特征的 Z 或深度位置可能足以容易地将特征与背景区分开。深度场中的位置是一种强有力的信息,并且由于计算机视觉通常涉及在 2D 图像场中寻找 3D 信息,因此 Z 深度信息可以是特征良好性的无价属性。

匹配成本和对应关系

特征匹配是使用距离函数(本节接下来讨论的)测量两个或多个特征之间的对应性。请注意,特征匹配在内存和计算时间方面是有代价的。例如,如果特征描述符由 8 位字节的数组组成,例如 18×18 像素相关模板,则特征匹配成本是将两个 18×18(324)像素区域相互比较所需的计算时间和存储器,其中使用的匹配方法或距离函数可以是 SAD、SSD 或类似的差异度量。另一个例子涉及本地二进制描述符,例如 LBP(线性二进制模式),其被存储为比特向量,其中匹配成本是执行汉明距离函数的时间,汉明距离函数通过布尔 XOR 比较两个二进制向量来操作,随后是比特计数以提供匹配度量。

通常,距离函数是应用于计算机视觉的众所周知的数学函数;然而,就可计算性和对特定视觉任务的应用而言,一些比另一些更适合。例如,SSD、SAD、余弦距离和汉明距离度量由于其广泛的适用性,已经在一些架构中作为计算机机器语言指令在硅中实现。因此,选择一个在硅中加速的距离函数可能是一个优势。

特征数据库是匹配成本的另一个组成部分,因此数据库的组织和特征搜索对成本有贡献。我们将在本章后面简要地谈到这个话题。

距离函数

本节提供了用于聚类、分类和特征匹配的距离函数的一般讨论。注意,距离函数可以在几个维度上取值,例如,用于特征描述符匹配的 2D 图像阵列,用于点云匹配的 3D 体素体积,以及用于多元描述符的多维空间。由于这是一个简短的概述,Pele[548]提供了更深入的治疗。

注意,本章后面讨论的核机器[361,362]提供了一个自动框架来分类特征空间和替换选择的距离函数核。

距离函数的早期工作

1968 年,Rosenfeld 和 Pfaltz[121]开发了确定图像特征之间距离的新方法,他们称之为“图片的给定子集”,其中他们工作中使用的特征形状包括菱形、正方形和三角形。他们研究的距离度量包括一些今天不再常用的方法:

  • 离单点的六边形距离(笛卡尔阵列)
  • 单点的六边形距离(交错阵列)
  • 离单点的八边形距离
  • 城市街区与空白区域的距离
  • 空白区域的平方距离
  • 距离空白区域的六边形距离
  • 离空白区域的八角形距离
  • 从一个点到欧几里得距离的最近整数

Rosenfeld 和 Pfaltz 的这项早期工作非常有趣,因为用于渲染图像的输出设备是打印在 CRT 终端或行式打印机上的 ASCII 字符,如图 4-3 所示。

9781430259299_Fig04-03.jpg

图 4-3 。Rosenfeld 和 Pfaltz 的早期渲染图,使用行式打印机作为输出设备来说明距离函数(在本例中为平方距离)。(图片转载自 Rosenfeld 和 Pfaltz,《模式识别》(牛津:佩加蒙出版社,1968),1:33-61。经爱思唯尔许可使用)

欧几里德或笛卡尔距离度量

欧几里德距离度量包括笛卡尔坐标空间中的基本欧几里德几何恒等式;总的来说,这些都是简单明了的用法。

欧几里德距离

这是两点之间的简单距离。

image

9781430259299_unFig04-01.jpg

平方欧几里德距离

这样计算速度更快,并且省略了平方根。

image

余弦距离或相似度

这是角距离,或两个向量之间的归一化点积,以产生向量角度的相似性;也适用于 3D 曲面法线和视点匹配。

image

image

9781430259299_unFig04-02.jpg

绝对差值之和(SAD ) 或 L1 常模

矢量元素之间的差被求和,并作为矢量之间的总距离。注意 SAD 相当于曼哈顿距离。

image

平方差和(SSD) 或 L2 范数

向量元素之间的差被求和并被平方,并被取为向量之间的总距离;通常用于运动估计的视频解码。

image

相关距离

这是两个向量之间的相关差系数,类似于余弦距离。

image

image

更长的距离

欧几里得距离的有效替代,为直方图类型的距离度量产生更好的性能和准确性,如 SIFT 的 rootsif[178]优化中所报告的。对于 L1 归一化直方图矢量,海灵格距离被定义为:

image

网格距离度量

这些度量类似于网格上的路径来计算距离。因此,距离是以网格步长测量的。

曼哈顿距离

也称为城市街区差异或直线距离,它通过沿着网格的路径来测量距离;沿着一个网格可能有多条距离相等的路径。

image

9781430259299_unFig04-03.jpg

切比雪夫距离

也称为棋盘差异,这是测量两个向量之间沿网格的最大差异。请注意,在下图中,三角形的每条边的切比雪夫距离或长度为 5,但在欧几里得空间中,其中一条直线(斜边)比其他直线都长。

image

9781430259299_unFig04-04.jpg

统计差异度量

这些度量基于向量的统计特征,因此距离度量不需要映射到欧几里得空间。

运土车距离或 或

土方距离测量将多维向量(如直方图)转换为另一个向量的成本。这类似于一台推土机(推土机)在两组堆之间移动泥土,使每组中的泥土堆大小相同。EMD 假设矢量中的要素之间存在地面距离,例如直方图中条柱之间的距离。EMD 被计算为变换的最小成本,其整合了移动的距离 d *移动的量 f ,服从一些约束【130】。

image

一旦计算出成本,结果就被标准化了。

image

EMD 具有高计算成本,且可用于图像分析,但是 EMD 不是用于特征匹配的有效度量。

马氏距离

也称为二次距离,它使用均值和协方差计算距离;它是比例不变的。

image

image

其中image =特征向量 1 的平均值,image =特征向量 2 的平均值。

布雷柯蒂斯距离

这相当于绝对差之和与和之比,例如曼哈顿距离的范数之比。Bray Curtis 相异度有时用于聚类数据。

image

堪培拉距离

它测量两个等长向量之间的距离:

image

二进制或布尔距离度量

这些度量依赖于集合比较和布尔代数概念,这使得该度量族对于数字计算机上的优化很有吸引力。

l0 定额

L0 范数是向量中非零元素的计数,用于汉明距离度量和其他二进制或布尔度量。

image

汉明距离

这测量相等长度的向量之间的二进制差异或一致性,例如,字符串或二进制向量。二进制位向量的汉明距离可以在数字计算机中用完整的机器语言指令或者作为 XOR 运算后跟位计数运算来有效地实现。汉明距离是匹配本地二进制描述符的首选,如 LBP、FREAK、CENSUS、BRISK、BRIEF 和 ORB。

串距:5 = 0001100111 = compare " HelloThere和" Hel ps Th ing

二进制距离:3 = 10100010 =(01001110)异或(11001100)

(u XOR v)的位计数

Jaccard 的相似性和不相似性

二元集合(0,1 或真,假)的两两相似性与集合元素个数的比率。下面的集合 1 包含具有与集合 2 相同的成对值的两个比特,因此相似度是 2/5,相异度是 3/5。Jaccard 相似度可以结合汉明距离。

| | *设置 1:* | {1,0,1,1,0} | | | *设置 2:* | {1,1,0,1,1} | | | *Jaccard 相似度:* | 2 / 5 = .4 | | | **Jaccard 不同点:** | **3 / 5 = .6** |

描述符表示

本节讨论如何在描述符中表示信息,包括对特征描述和匹配有用的坐标空间,并讨论多模态数据和特征金字塔。

坐标空间,复杂空间

计算机视觉中使用的坐标系有很多,因此能够在坐标系之间转换数据是很有价值的。坐标空间类似于基空间。通常,选择正确的坐标系有利于特征表示、计算或匹配。复杂空间可以包括标量和矢量变量的多元集合,例如像素区域的梯度、颜色、二进制模式和统计矩。参见图 4-4 。

9781430259299_Fig04-04.jpg

图 4-4 。坐标空间,笛卡尔空间、极坐标空间、径向空间和球面空间

笛卡尔坐标

图像通常是在笛卡尔空间的时域中捕获的,并且对于许多应用来说,需要转换到其他坐标空间。人类视觉系统将世界视为复杂的 3D 球面坐标空间,人类可以通过一个小小的奇迹,将 3D 空间映射到近似或相对的笛卡尔坐标中。计算机成像系统捕捉数据并将其转换为笛卡尔坐标,但深度感知和几何精度在转换中丢失。(第一章讨论了深度传感方法和 3D 成像系统,包括几何因素。)

极坐标和对数极坐标

第六章稍后提到的许多描述符使用圆形描述符区域来匹配人类视觉系统。因此,极坐标是组合特征向量的逻辑候选者。例如,GLOH [144]方法对直方图梯度宁滨使用极坐标,而不是原始 SIFT [161]方法中使用的笛卡尔坐标。GLOH 可以用作 SIFT 的改型,并已证明可以提高准确性[144]。由于圆形采样模式往往提供更好的旋转不变性,极坐标和圆形采样是描述符设计的良好匹配。

径向坐标

RIFF 描述符(稍后在第六章的中描述)使用局部径向坐标系来描述旋转不变的基于梯度的特征描述符。径向坐标系基于径向梯度变换(RGT ),该变换对不变宁滨的矢量进行归一化。

如图图 4-4 和图 6-27 所示,RGT 在面片区域 c,内建立一个局部坐标系,并建立相对于面片上任意一点 p 的两个正交基向量( r,t ),径向向量为 r ,切向向量为 t 。在所有点 p 处测量的梯度 g 被投影到径向坐标系( r,t )上,使得梯度以相对于小块中心的兴趣点 c 局部不变的方式被表示。当面片围绕 c 旋转时,梯度也旋转,不变表示保持不变。

球面坐标

球面坐标,也称为 3D 极坐标,可以应用于 3D 成像和深度感测领域,以增加描述和分析的准确性。例如,今天的深度相机通常只为每个样本提供( x,y)Z 深度信息。然而,遗憾的是,这不足以描述空间的复杂几何形状,包括翘曲、径向扭曲和样本之间的非线性距离。第一章讨论了 3D 空间、深度测量和坐标系统的复杂性。

仪表坐标

G-SURF 方法[188]使用局部区域规范坐标系的微分几何概念[190]来计算特征。仪表坐标对于图像特征是局部的,并且它们具有几何精度的优势。规范导数是旋转和平移不变的。

多元空间,多模态数据

多元空间结合了几个量,比如结合了标量和向量值的张量空间,常用于计算机视觉。虽然原始图像数据可能只是标量值,但是许多特征描述符计算每个像素的局部梯度,因此像素标量值和梯度向量的组合形成了张量或多元空间。例如,色彩空间(参见第二章)可以将色彩表示为一组标量和矢量,例如图 2-9 中所示的色调、饱和度和值(HSV)色彩空间,其中矢量包括 HS ,其中 H 色调作为矢量角度, S 饱和度作为矢量幅度。 V 是另一个有两个用途的矢量,首先作为轴原点的 HS 矢量,其次作为颜色强度或灰度矢量 V 。为了便于分析,将原始的 RGB 数据转换到这样的颜色空间通常是有用的,例如,能够统一地改变所有颜色的颜色强度,从而影响亮度或对比度。

一般来说,通过增加特征空间的维度,可以增加更多的区分度和鲁棒性。例如,稍后在第六章中描述的 LBP 模式可以通过添加旋转不变表示(RILBP)等特征扩展成多个变量;或者通过在 RGB 彩色通道上复制 LBP,如彩色 LBP 描述符中所示;或者通过将 LBP 模式扩展到时空 3-空间,像 LBP-TOP 那样增加几何失真不变性。

随着内置 GPS、指南针、温度、高度计、惯性和其他传感器的移动设备的激增,多模式传感器数据变得越来越普遍。多模态、多变量描述符的一个例子是 SIFT-GAFD [245]方法,如图 4-5 中的所示,它以重力矢量的形式将加速度计信息添加到 SIFT 描述符中。重力矢量称为全局方向,SIFT 局部像素区域梯度称为局部方向

9781430259299_Fig04-05.jpg

图 4-5 。在 SIFT-GAFD 方法[245]中使用的特征描述符中,使用重力矢量形式的加速度计数据的多模态描述符。全局定向的重力矢量可以用于相对于环境的特征定向

特征金字塔

许多特征描述符仅使用给定尺度的像素值以单尺度方式计算,然后为了特征检测和匹配,在尺度空间图像金字塔中搜索特征。然而,通过在多个尺度下计算描述符并将多个缩放的描述符一起存储在特征金字塔中,可以在具有尺度变化的单尺度图像上检测特征,而无需使用尺度空间金字塔。

对于兴趣点和特征描述符方法,尺度不变性可以通过以下方式解决:(1)在搜索之前缩放图像,如在本章稍后讨论的尺度空间金字塔方法中;或者(2)缩放和金字塔化描述符中特征的多个尺度。由于基于形状的方法依赖于更大的多边形结构和形状度量,因此基于形状的方法本质上比兴趣点和特征描述符方法更具有比例不变性。

描述符密度

根据图像数据,会有不同数量的良好兴趣点和特征,因为一些图像具有更明显的纹理。并且取决于所使用的检测器方法,具有高纹理结构或更宽像素强度范围差异的图像将可能比具有低对比度和平滑纹理的图像产生更多的兴趣点。

一个好的经验法则是,图像中 0.1%到 1%的像素可以产生原始的、未经过滤的兴趣点。FAST 和 Harris 探测器系列等更灵敏的探测器位于该范围的高端(参见附录 A )。当然,检测器参数经过调整,可以减少每个应用中不必要的检测。

兴趣点和描述符剔除

事实上,即使兴趣点看起来不错,在兴趣点计算的相应描述符可能不值得使用,并且在某些情况下会被丢弃。兴趣点和描述符都被剔除。因此,一起调整检测器和描述符是关键的试错过程。使用我们产生有效原始兴趣点的 0.1%到 1%像素的基本假设,我们可以根据视频分辨率估计可能检测到的兴趣点,如表 4-2 所示。

表 4-2 。每幅图像检测到的兴趣点的可能范围

image

根据方法的不同,检测器可以仅在单尺度下运行,或者在图像金字塔尺度空间中的一组尺度图像上运行。对于尺度空间搜索方法,兴趣点检测器在金字塔中每个图像的每个像素上运行。有哪些方法可以用来剔除兴趣点,将兴趣点密度降低到一个可管理的数量?

选择最佳兴趣点的一种方法是使用自适应探测器调谐方法 (如第六章“兴趣点调谐”中所述)。其他方法包括仅选择相距给定阈值距离的兴趣点,例如,一个兴趣点不能与五像素窗口内的另一个兴趣点相邻,最佳候选点在阈值内选择。

另一种方法是改变本章中讨论的搜索策略,例如,在图像金字塔的较低分辨率下搜索特征,识别最佳特征,并记录它们的位置,或者在金字塔的较高层次上搜索以确认特征位置,然后计算描述符。最后一种方法的缺点是默认情况下会丢失精细特征,因为这些特征可能只在全图像分辨率下出现。

另一种方法是每隔一个像素或者在网格大小的区域内寻找兴趣点。以上方法在实践中都有使用,除此之外还有其他方法。

密集与稀疏特征描述

一个密集描述符利用了区域或小块中的所有像素。“密集”是指内核采样模式包括所有像素,因为稀疏内核可以选择使用或忽略特定像素。SIFT 和 SURF 是密集描述符的经典示例,因为矩形区域中的所有像素都对描述符计算有贡献。

许多特征描述方法,尤其是局部二进制描述符方法,正在利用稀疏模式,其中从一个区域而不是所有像素中选择像素。FREAK 描述符通过模拟人类视觉系统、使用圆形搜索区域、利用更靠近区域中心的更精细分辨率采样,以及调整分辨率增加的局部采样模式的层次结构以获得最佳结果,展示了稀疏采样的最巧妙方法之一。稀疏特征不仅可以潜在地使用更少的内存和减少计算,而且稀疏描述符可以扩展到更广的区域,以补偿较小区域中出现的特征异常。

描述符形状拓扑

对于这一讨论,我们着眼于调查用于描述符计算的像素区域的各种形状来查看描述符形状拓扑。拓扑的一部分是形状或边界,另一部分是选择密集还是稀疏采样模式,这将在本章后面讨论。采样和图案化方法的范围从简单的矩形区域到更复杂的稀疏局部二进制描述符图案。正如将在第六章中讨论的,2D 和 3D 描述符都被设计成使用广泛的拓扑结构。让我们来看看一些拓扑设计的考虑因素,如面片形状、子面片、条带和可变形面片。

哪种形状比较好?答案是主观的,我们不试图提供绝对的答案,只是提供一个调查。

关联模板

一个明显的形状是相关模板匹配方法通常使用的简单矩形区域。因此,描述符是模板区域中的面部照片、或实际图像。要选择矩形内的子空间,可以使用遮罩,例如,它可以是边界矩形内的圆形遮罩,以遮蔽外围像素。

补丁和形状

文献通常将特征形状称为,通常假定为矩形。由于易于编码 2D 阵列存储器访问,补丁形状通常是矩形的。圆形面片广泛应用于局部二进制描述符方法中。

然而,许多描述符也计算多个面片或区域的特征,而不仅仅是单个面片。以下是补丁拓扑的一些常见变体。

单个补丁、子补丁

许多描述符将补丁计数限制为单个 2D 补丁。这是第六章中调查的大多数常见描述符的真实情况。然而,一些局部二进制描述符在较大块内的特定点处使用一组积分图像子块——例如,BRIEF 在较大 31×31 像素块区域内的局部二进制模式中的每个采样点处使用 5×5 积分图像子块,因此每个子块的值成为用于点对比较的值。目标是过滤每个点的值以去除噪声。

可变形贴片

不是使用诸如固定大小的矩形或圆形的刚性形状,而是可以在考虑变形的情况下设计特征描述符,诸如比例变形[345,346]和仿射或单应变形[220],以实现更鲁棒的匹配。示例包括 DeepFlow [344,394]深度匹配方法和 RFM2.3,这将在第六章的中讨论。此外,使用全连接或稀疏连接拓扑的 D-NETS [135]方法可以被认为在条形图案的放置的不变性方面是可变形的;参见图 4-7 和第六章中 D 网的讨论。本章稍后讨论的许多特征学习方法也使用变形特征进行训练。

固定的描述符形状,例如刚性矩形和圆形,可以在刚性运动假设下检测运动,其中整个描述符预期以一定量的变化移动,例如在缩放或仿射变换中。然而,对于活动识别和运动,需要更可变形的描述符模型,而 DeepFlow [344,394]弥合了描述符匹配方法和光流匹配方法之间的差距,使用可变形面片和沿着深度学习网络的线进行深度匹配。

多补丁集

SIFT 描述符使用从尺度空间金字塔结构中获取的相邻狗图像的三个面片的多面片集合,如图 6-15 所示。其他几种方法,如图 6-12 中所示的 LBP-TOP 和 VLBP,使用跨卷结构分布的补丁集。LBP-TOP 使用来自相邻平面的面片,而 VLBP 使用三维空间中的相交面片。动态纹理方法使用来自时空图像帧集合的三个相邻片的集合,作为帧 n-2、帧 n-1 和帧 0(当前帧)。

TPLBP,FPLBP

三片 LBP TPLBP 和四片 LBP FPLBP [244]利用新颖的多片采样模式将稀疏局部结构添加到复合 LBP 描述符中。如图 4-6 所示,三补片 LBP 使用由三个补片交替组合而成的一组径向 LBP 模式,而四补片 LBP 使用更大范围内更为分散的补片对。

9781430259299_Fig04-06.jpg

图 4-6 。Wolf 等人开发的新型多补丁集。阿尔[244]。(左)TPLBP 比较环周围三个补丁集合的值,以计算 LBP 代码,总共八个集合,因此每个 LBP 位有一个集合。(右)四补丁 LBP 使用四个补丁来计算比特,使用来自每个环的两个对称分布的补丁来产生 LBP 代码中的每个比特。每个环的半径是一个变量,面片对是一个变量,每个环的面片数是一个变量;这里,每个环有八个补丁

带状和放射状扇形形状

源自特征兴趣点位置或形状质心的辐射状扇形或轮辐可用作描述符采样拓扑——例如,傅立叶形状描述符(如第六章中所述;特别参见图 6-29 。

d-网条形图案

由 Hundelshausen 和 Sukthankar[135]开发的 D-NETS 方法使用了一种连通图形状的描述符模式,其采样模式可能存在变化。作者建议该方法使用三种不同的模式是有效的,如图图 4-7 所示:

  1. 兴趣点处的全连通图
  2. 兴趣点处的稀疏或迭代连通图
  3. 所选网格上的密集采样图

描述符本身由一组 d-tokens,组成,这些 d-tokens 是原始像素值的条带,而不是来自修补区域的值:条带是区域,各种方向的线是图案。沿着条带的采样是在条带长度的 80%和 20%之间,而不是整个长度,省略端点,这被声称是为了减少噪声兴趣点的贡献。被采样的点被组合成一组 s 的均匀像素块,并被归一化和存储到离散的 d-token 描述符中。

9781430259299_Fig04-07.jpg

图 4-7 。D-NETS [135]采样模式的降低分辨率示例。(左)兴趣点的全密集连接。(中心)兴趣点处的稀疏连通性。(右)规则采样网格上的密集连通性。D-NETS 的作者指出,10 像素间距的密集采样网格优于在感兴趣的点进行采样

物体多边形形状

对象和多边形形状方法进行全局和区域扫描,以在整个图像帧或区域中查找形状。目标是找到一个有凝聚力的物体或区域。这里提供了对用于特征描述符的分割多边形形状的基本方法的讨论,包括:

  • 形态学对象边界方法
  • 纹理或区域结构方法
  • 超像素或像素相似性方法
  • 深度图分割

第六章详细介绍了一系列用于统计描述多边形形状特征的对象形状因子和度量。请注意,这个主题在文献中经常被讨论为“图像时刻”;Flusser 等人[518]是一个很好的信息来源。

形态边界形状

定义多边形形状的一种方法是使用形态学。形态学分割是区域描绘的常用方法,无论是作为二进制对象还是作为灰度对象。形态形状有时被称为斑点。在二进制和灰度级的情况下,阈值处理通常被用作定义对象边界的第一步,并且诸如侵蚀和扩张之类的形态整形操作被用于增长、收缩和清理形状边界。形态学分割是阈值和边缘特征驱动的。(第三章讨论了用于形态学和阈值处理的方法。)

纹理结构形状

区域纹理也用于分割多边形形状。纹理分割是一种常见的用于图像分析和分类的图像处理方法,并且是以非二进制方式进行分割的理想方法。纹理揭示了简单阈值处理忽略的结构。如图图 6-6 所示,LBP 算子可以检测局部纹理,纹理可以用来分割天空、水、陆地等区域。纹理分割基于局部图像像素关系。(在第三章中介绍了几种纹理分割方法。)

超像素相似形状

使用超像素方法分割区域是基于将相似像素折叠在一起的思想,例如,将具有相似颜色的像素折叠在一起形成一个更大的形状。目标是将整个图像区域分割成超像素。超像素方法是基于相似性的。(在第三章的中讨论了几种超像素处理方法。)

局部二元描述符点对模式

局部二进制描述符形状和采样模式,如 FREAK、BRISK、ORB 和 BRIEF 中使用的那些,是为了理解各种权衡和设计方法而研究的好例子。我们将在这里检查局部二进制形状和模式的概念。(第六章对每个描述符进行了更详细的介绍。)

局部二进制描述符使用点对采样方法 ,其中像素对被分配给彼此用于二进制比较。注意,局部二进制描述符和点对比较的缺点是局部区域中图像像素值的微小变化可能表现为二进制伪像。一组像素值中看似微不足道的变化可能会在匹配过程中引起问题,这些问题表现为:(1)有噪声的图像,以及(2)具有恒定灰度级的图像。然而,每个本地二进制描述符方法都试图减轻二进制伪像问题。例如,BRISK(见图 4-10 后面)和 ORB(见图 4-11 后面)计算每个兴趣点周围的过滤区域以在二进制比较之前减少噪声成分。

另一种减轻恒定灰度级的二进制伪像问题的方法用于 LBP 方法的修改,称为局部三进制模式算子,或 LTP 522,它使用 {-1,0,1}三进制值来描述区域。为 LTP 建立阈值带,以将近常数灰度值描述为 0,阈值带以上的值描述为 1,阈值带以下的值描述为-1。LTP 可用于描述恒定灰度级的平滑区域和标准 LBP 中的对比区域。此外,可以调整点对的比较阈值,以补偿噪声、光照和对比度,这在几乎所有的局部二进制描述符方法中都采用了。

图 4-8 (左图)显示了一个假想的描述符模式,包括选定的像素作为黑色值,而中间左侧的图像显示了一个带状的形状和模式,其中描述符沿着一组没有特定对称性的线段计算描述符,如 DNETS [135]方法。

9781430259299_Fig04-08.jpg

图 4-8 。说明各种描述符模式和形状。(左)稀疏。(中间偏左)网或条。(中间偏右)内核。(右)径向辐条

在图 4-8 中,中右图像显示了一个卷积核,其中指定了过滤器形状和过滤器目标,而右图像是一个斑点形状,使用径向像素采样线,从形状质心开始,到斑点周界结束。注意,可以从包含从质心到周长的每个径向线段的长度的阵列中计算 1D 傅立叶描述符来描述形状,或者可以只保留原始像素值的阵列,或者可以计算 D 网。

可以通过一起使用一个或多个形状和图案来设计特征描述符。例如图 4-8 (左图)中假设的描述符图案,一个图案用于靠近兴趣点的像素,另一个图案用于远离中心的像素,捕捉圆形图案信息,另一个图案覆盖几个极值点。调优采样模式的一个很好的例子是 FREAK 描述符,下面将讨论。

畸形视网膜图案

FREAK [130]描述符形状也在第六章中有详细讨论,它使用基于人类视网膜系统的局部二进制模式,如图图 4-9 所示,其中人类视觉系统中受体细胞的密度在中心较大,随着远离中心而减小。在构建本地二进制描述符时,FREAK 遵循类似的模式,称为粗到细描述符模式,精细细节位于面片中心,粗糙细节向外移动。由粗到细的方法还允许描述符在由粗到细的段中进行匹配。首先匹配粗略的部分,如果匹配足够好,也匹配精细的特征部分。

9781430259299_Fig04-09.jpg

图 4-9 。(左)人类视觉系统在中央凹区域中的受体浓度,具有较小的受体密度,向外移动到 Para 和 Peri 的外围视觉区域。(中心)FREAK [130]局部二进制模式采样区域,在距离中心的六个重叠距离环的每一个中有六个区域,环的大小表示比较点平均区域。(右)反常型点对模式的假设示例

在这个框架中,可以用几种模式构建畸形描述符。对于 FREAK,实际的模式形状和点对是在训练阶段设计的,在该阶段,使用类似于 ORB [134]的方法学习最佳点对模式,以找到具有高方差的点对。该模式仅受训练数据的约束;仅使用了来自 32×31 图像补片区域的 45 个点对。

如图 4-9 所示,比较每个线段末端的点对,使用 16 个字节将比较值集合组成一个二进制描述符向量,描述符集合中包含四个独立的 16 字节由粗到细模式的级联。通常,粗略模式单独有效地拒绝了不良匹配,而更精细的模式仅用于限定最接近的匹配。

轻快的模式

BRISK 描述符[131]点对采样形状是对称的圆形,由排列在四个同心圆环上的共 60 个点组成,如图图 4-10 所示。围绕 60 个点中的每一个点的是以蓝色显示的采样区域,采样区域的大小随着距中心的距离而增加,并且与采样点之间的距离成比例。在采样区域内,高斯平滑被应用于像素,并且在平滑区域上计算局部梯度。

9781430259299_Fig04-10.jpg

图 4-10 。(左)轻快的同心采样网格模式。(中间)短线段对。(右)长距离对。请注意,每个选定点的区域(左图)的大小随着距中心的距离而增加,并且二进制比较是从每个高斯采样圆形区域的中心点计算的,而不是从每个单独的中心点计算的。(中间和右边的图片由乔希·格里森[143]许可使用)

像其他本地二进制描述符一样,BRISK 比较成对的点来形成描述符。点对分为两组:(1) 长线段,与区域梯度一起用于确定描述符的角度和方向,角度用于旋转描述符区域,然后应用成对采样模式;(2) 短片段,,可以成对比较并组成 512 位二进制描述符向量。

圆球和简短图案

ORB [134]部分基于 BRIEF 描述符[132,133],因此名字面向 B rief ,因为 ORB 向 BRIEF 方法添加了面向,并且还提供了其他改进。例如,ORB 还通过使用 Harris 角点方法限定快速角点来改进兴趣点方法,并使用 Rosin 的方法[61]来改进角点方向,以便操纵 BRIEF 描述符来改进旋转不变性(已知 BRIEF 对旋转敏感)。

ORB 还提供了一个非常好的点对训练方法,这是对 BRIEF 的一个改进。简而言之,如图图 4-11 所示,在 31×31 补丁区域内,基于中心点的高斯分布,以随机分布模式指定样本点;选择的采样点数是 256。将选定的样本点对相互比较,以形成二元描述符向量。通过积分图像方法计算每个点的值,以将 5×5 区域平滑成点值。

9781430259299_Fig04-11.jpg

图 4-11 。(左)一个大大降低了点对计数分辨率的圆形图案,使用< 32 个点而不是全部 256 个点。(右)使用随机点对的简单样式模式

为了学习描述符点对采样和比较模式,ORB 使用训练算法来寻找训练集中具有高方差的不相关点,并选择最佳的 256 个点来定义用于创建二进制特征向量的成对采样模式。所以形状和图案是非对称的,如图图 4-11 所示,类似于一些 DNETS 图案。ORB 点对模式依赖于训练数据。

注意在图 4-11 中,一个简单样式图案(右图)使用随机点对。开发人员提出了几种随机化点对的方法[132]。在图 4-11 中显示的圆形图案是基于在一个边界 31×31 图像补片中选择具有高统计方差的点对,其中较小的 5×5 灰度图像补片区域位于所选兴趣点的中心。然后,使用积分图像方法平滑每个 5×5 区域,以产生该点的单个值。

描述符辨别

描述符的区分度如何?所谓的区分度是指描述符能够很好地唯一描述和区分其他特征。取决于应用,需要或多或少的辨别,因此有可能通过提供比有用的更多的信息和不变性来过度描述特征,或者通过限制鲁棒性和不变性属性来不足描述特征。对于一组给定的鲁棒性标准,特征描述符鉴别可能是重要和有趣的,但是在某些情况下,鉴别并不总是要解决的正确问题。

在下面的假设下,可以平衡描述符中增加区分度的需要,有利于使用级联的简单描述符,如相关模板。

  1. 假设廉价的大规模并行计算,可变形描述符,如 Taylor 和 Rosin 的 RFM2.3 [220]成为更有吸引力的选择,允许使用简单的弱区分相关模板或像素补丁,并使用 GPU 纹理采样器在硅中实时变形,以进行缩放、仿射和单应变换。使用并行 GPU SIMT/SIMD 计算和卷积内核,可以轻松实现各种姿态变化和光照变化下的匹配和对应。因此,GPU 可以有效地允许简单的相关补丁被扭曲和对比度增强,以用作可变形描述符并与目标特征进行比较。
  2. 假设有大量快速而廉价的内存,例如大型内存缓存系统,许多无差别描述符或训练模式可以存储在内存缓存的数据库中。诸如在神经网络和卷积网络中使用的各种加权方案可以被有效地用来实现期望的一致性和质量。此外,在分类器中可以采用其他提升方案,例如 Adaboost 方法,以从弱区分数据中开发强分类器。

总之,根据目标系统,高鉴别特征描述符和简单弱鉴别特征描述符的级联对于给定的应用可能是正确的选择。

光谱鉴别

特征辨别的一个方面是所选择的用于表示特征的描述符光谱或值。我们将光谱简单地称为光谱内或连续谱上的值。仅使用单个光谱的特征描述符(例如强度值的直方图)将对强度分布有鉴别能力,而对其他属性(例如形状或仿射变换)没有鉴别能力。例如,特征描述符可以通过组合诸如 RGB 颜色、深度和颜色强度的局部区域梯度的多变量光谱集来提高辨别水平。

众所周知[248],人类视觉系统在视网膜上以比例和旋转不变的方式辨别和响应梯度信息,如 SIFT 和许多其他特征描述方法所示。因此,梯度的使用是计算机视觉的常见和优选的光谱。

可以在一系列变量上获得光谱,其中简单标量范围的值只是一种类型的光谱:

  1. 灰度强度
  2. 颜色通道强度
  3. 基本功能域(频域、HAAR 等。)
  4. 2D 或 3D 渐变
  5. 3D 表面法线
  6. 形状因子和形态学测量
  7. 纹理度量
  8. 面积积分
  9. 区域的统计矩
  10. 来自局部二进制模式的汉明码

上述光谱类型中的每一种,以及可以列举的许多其他光谱类型,可以被包括在多变量特征描述符中,以增加区分度。当然,所选应用的鉴别要求将指导描述符的设计。例如,使用颜色通道光谱识别水果颜色,使用形状因子识别水果形状,使用纹理度量识别皮肤纹理,识别水果的应用会更有效。

回答歧视问题的一个方法是查看描述符中包含的信息。描述符是否包含光谱的多元集合,覆盖了多少不变性属性,如方向或尺度?

区域、形状和图案辨别

特征描述符的形状和模式是影响辨别的重要维度。根据应用的不同,每种特征形状都有优点和缺点。令人惊讶的是,甚至单个像素也可以用作特征描述符形状(见图 1-7 )。让我们看看歧视的其他方面。

形状和图案可分类如下:

  1. 单个像素(接下来讨论单个像素描述方法)
  2. 一行像素
  3. 像素的矩形区域
  4. 多边形形状或像素区域
  5. 一种或一组不相连的像素,如视网膜中央凹图案

描述符的形状决定了区分的属性。例如,与圆形描述符相比,矩形描述符将受限于旋转不变性属性。此外,描述符的较小形状将范围限制到较小的区域,并且还限制了比例不变性。描述符区域越大,携带的像素就越多,这可以提高分辨率。

其他几位研究人员已经对描述符形状、像素采样模式、采样区域大小和像素度量进行了调查[128–130]。在本节中,我们将更深入、更广泛地探讨用于特性描述符调整的具体方法,特别关注本地二进制特性描述符,它有望实现低功耗和高性能。

几何辨别因素

形状在很大程度上决定了可能的旋转不变性。例如,矩形形状通常在大约 15 度的旋转辨别中开始下降,而圆形图案通常在旋转变化下表现得更好。注意,通过将一个以上的形状或图案结合到描述符向量中,可以增强任何辨别能力差的形状或图案描述符,并使其更有辨别能力。

Viola Jones 方法中使用的 HAAR 小波之类的形状和图案整合了矩形区域中的所有像素,产生了该区域中所有像素的合成值。因此,在描述符中不包含局部细节图案信息,导致非常有限的局部区域辨别和较差的旋转不变性或辨别。

旋转辨别能力差的另一个例子是矩形相关模板方法,该方法逐个像素地比较两个矩形区域。然而,一些有效的描述符方法使用矩形区域。

一般来说,矩形是旋转不变性的一种限制。然而,SURF 使用确定圆形邻域内的矩形 HAAR 小波特征的主导方向的方法来实现更好的旋转不变性。并且 SIFT 使用一种方法,通过在宁滨阶段期间对矩形区域应用圆形加权函数来提高旋转不变性和准确性。

还应当注意,在目标应用中,具有低区分度的描述符被非常有效地使用,例如用于视频编码中的运动估计的相关方法。在这种情况下,矩形形状与编码问题非常匹配,并且有助于高度优化的固定功能硬件实现,因为在矩形区域中可以很好地捕捉帧到帧的运动,并且对于 30 Hz 的帧速率,帧到帧之间通常几乎没有旋转或比例变化,只有平移。

考虑到这一点,描述符鉴别应该适合应用,因为增加鉴别是以计算和内存为代价的。

特征可视化评估歧视

理解辨别的另一种方式是使用特征描述符本身来仅从描述符信息重建图像,其中我们可以认为描述符的集合是实际图像的压缩或编码版本。图像压缩、编码和特征描述是相关的;参见图 3-18 。接下来,我们研究几个仅从描述符信息重建图像的例子。

基于图像重建的猪判别方法

图 4-12 使用 HOG 描述符可视化重建。细节层次是粗略的,并遵循与 HOG 的预期用途相匹配的线和边结构。HOG 提供的辨别的一个关键方面是在计算描述符之前不对图像使用图像平滑。HOG 的研究表明,平滑图像会导致辨别能力的损失。Dalal 和 Triggs[106]强调了他们避免图像平滑以保留图像细节的故意意图。

*9781430259299_Fig04-12.jpg

图 4-12 。通过猪的形象化描述进行辨别。(图片(c)卡尔·沃德里克,经许可使用。)另请参见“HOGgles:可视化物体探测特征,Carl Vondrick,Aditya Khosla,Tomasz Malisiewicz,Antonio Torralba,麻省理工学院,2013 年 ICCV 会议上的口头报告”

然而,一些研究人员认为,在计算局部区域梯度和边缘等值时,噪声会引起问题,并进一步建议在描述符计算之前通过平滑从图像中消除噪声;这是许多圈子里的传统观念。请注意,有许多方法可以过滤噪声,而不需要诉诸极端的高斯型平滑、卷积模糊和积分图像,这些方法会扭曲图像场。

一些较好的噪声过滤方法包括斑点去除过滤器、等级过滤、双边过滤器和许多其他方法,这些方法在第二章中讨论过。如果输入图像保持原样,或者至少使用了最好的噪声过滤方法,特征描述符将可能对细粒度特征保留更多的辨别能力。

通过局部二值模式的图像重建进行鉴别

如图 4-13 所示,d'Angelo 和 Alahi【127】提供了从 FREAK 和简要的本地二进制描述符重建的图像的可视化。在整个图像上,重建完全从单独的描述符信息中再现。“简短”使用更随机的模式来比较整个区域中的点,而“畸形”使用经过训练的、更中心凹和对称的模式,在靠近区域中心的位置增加细节。d'Angelo 和 Alahi[127]注意到,重建结果类似于原始图像的拉普拉斯滤波版本,这有助于我们理解这些特征的区分似乎在结构上与详细的边缘和梯度信息相关。

9781430259299_Fig04-13.jpg

图 4-13 。使用 512 个点对使用局部二进制描述符重建的图像。(第一行)简介。(中间一排)随机化怪胎(更类似于 BRIEF)。(最下面一行)使用视网膜中央凹图案图像的二元畸形(c)亚历山大·阿拉希,经许可使用

d'Angelo 和 Alahi 重建方法[127]从原始图像上计算的一组重叠描述符补片创建图像。为了重建图像,首先使用新颖的方法重建描述符以呈现小块,然后通过对重叠区域进行平均来合并小块以形成图像,其中小块合并大小可以根据需要而变化。例如,注意图 4-13 对左栏中的芭芭拉图像使用 32x32 的补丁,对中间栏中的摄影师使用 64x64 的补丁。还要注意的是,芭芭拉并不像摄影师那样具有同样的辨别力,他的图像包含了更精细的细节。

通过 SIFT 特征的图像重建进行辨别

另一种近似图像重建的方法[105]证明了 SIFT 描述符的辨别能力;参见图 4-14 。本研究的重建方法首先获取一幅包含著名建筑等场景的未知图像,在图像中找到一组 Hessian-affine 区域检测器,提取相关的 SIFT 特征描述符,然后保存 SIFT 描述符周围的一组椭圆图像块区域。

9781430259299_Fig04-14.jpg

图 4-14 。使用从同一物体的多个视图获取的组合 SIFT 描述符对常见场景进行图像重建,图像(c) Herve Jegou,经许可使用

接下来,搜索包含相同场景的相似并且希望匹配的图像的图像数据库,以在 Hessian-affine 兴趣点处找到最接近的匹配 SIFT 描述符。然后,获取每个 SIFT 描述符周围的一组椭圆形碎片区域。基于场景的先验感兴趣区域几何参数,将数据库中找到的椭圆面片扭曲成合成图像。

通过堆叠和混合重叠的补片以及通过平滑插值将补片缝合在一起。任何剩余的洞都通过平滑插值来填充。该方法的一个显著结果是证明了图像可以从来自不同方向的不同图像的一组补片重建,因为特征描述符是相似的;并且在这种情况下,SIFT 描述符的区分被很好地展示。

精确度,可跟踪性

准确性可以用特定的特征属性或鲁棒性标准来衡量;参见表 4-1 和表 7-4 。一个给定的描述符可能在一个领域优于另一个描述符,而在另一个领域则不然。在研究文献中,每个新特征描述符的准确性和性能通常是以备用方法 SIFT 和 SURF 为基准的。特征描述符的准确性是使用普遍接受的基础事实数据集来测量的,该数据集被设计来测量鲁棒性和不变性属性。(参见附录 B 中关于标准真实情况数据集的调查,以及第七章中关于真实情况数据集设计的讨论。)

这里重点介绍了一些有用的精度研究,说明了测量描述符和兴趣点精度的一些方法。例如,Mikolajczyk 和 Schmid[144]对早期特征检测器和描述符的准确性和不变性进行了最全面的调查,涵盖了一系列描述符,包括 GLOH、SIFT、PCA-SIFT、形状上下文、旋转图像、海森拉普拉斯 GLOH、互相关、梯度矩、复数滤波器、差分不变量和可控滤波器。

在 Gauglitz 等人[145]的文章中,有针对缩放、平移、旋转、透视失真、运动模糊、静态照明和动态照明的多种特征度量的不变性度量,包括 Harris、Shi-Tomasi、DoG、Fast Hessian、Fast 和 CenSurE,这些在第六章的中讨论。还有一些分类器的度量,包括随机化的树和蕨类植物,这将在本章后面讨论。图 4-15 提供了 Gauglitz【145】中特征检测器和兴趣点准确度的一些视觉比较。

9781430259299_Fig04-15a.jpg

9781430259299_Fig04-15b.jpg

图 4-15 。各种不变性准则下特征描述符的准确性。(摘自 Gauglitz 等人[145],图片 Springer Science +Business Media,LLC,经许可使用)

回到最近的本地二进制描述符。艾尔。[130]提供了一组比较,其中 FREAK 在特定数据集和 Mikolajczyk 和 Schmid [144]针对视点、模糊、JPEG 压缩、亮度、旋转和比例等属性开发的一组标准的准确性方面优于 BRISK、SURF 和 SIFT。在 Rublee 等人。艾尔。[120],ORB 显示出比 SIFT、SURF 和 BRIEF 具有更好的旋转不变性。总之,局部二进制描述符在鲁棒性、准确性和计算效率方面被证明是有吸引力的。

精度优化、子区域重叠、高斯加权和池化

采用各种方法来优化特征描述符的准确性,这里讨论几种方法。例如,描述符经常使用重叠的采样模式子区域,如图 4-9 中的异常描述符模式所示。通过重叠采样区域和仔细处理边界,在大多数情况下精确度似乎更好[161,178]。重叠区域直观上是有意义的,因为区域中的每个点都与周围的点相关。对于局部二元模式类型描述符和光谱描述符变体,如 SURF 等[181,144],特征描述中模式子区域重叠的值似乎是显而易见的。当描述符中使用的采样区域不重叠时,识别率不准确[130]。

高斯加权是另一种提高精度的有效方法,可以减少测量中的噪声和不确定性。例如,SIFT [161,178]描述符将基于高斯的加权因子应用于描述符区域中的每个局部区域梯度,以支持更靠近中心的梯度,并减少更远的梯度的加权。此外,SIFT 加权以圆形对称模式应用,这增加了一些旋转不变性;参见图 6-17 。

注意,高斯加权不同于高斯滤波;高斯滤波器既减少了噪声,又消除了图像中的关键细节,但这种滤波在 HOG 方法中被发现是适得其反的[106]。诸如 SIFT 在梯度箱上使用的高斯加权因子可以简单地用于限定数据而不是改变数据。一般来说,加权因子可用于缩放结果并微调检测器或描述符。采样模式中的子区域重叠和高斯加权方案是互补的。

通过将邻近要素组合在一起,而不仅仅是单个要素,可以提高精度。例如,在卷积网络中,几个附近的特征可以被汇集用于联合决策,以通过选择的鲁棒性或不变性标准来增加准确性[347]。汇集概念在文献中也可以称为邻域一致性半局部约束,它可以涉及联合约束,例如局部特征组合集之间的角度和距离【348–350】。

亚像素精度

一些描述符和识别方法可以在匹配特征位置时提供亚像素精度[147–151]。计算亚像素精度的常用方法包括互相关、和绝对差、高斯拟合、傅立叶方法、刚体变换和 ICP。一般来说,亚像素精度在流行的商业应用中并不常见,只有工业检测、航空航天和军事系统等高端应用才需要。

例如,SIFT 为关键点的位置提供亚像素精度。数字相关方法和模板匹配是众所周知的,并被用于对象跟踪的工业应用中,并且可以被扩展以计算一个像素偏移区域范围内的相关性,以产生一组相关性,该组相关性可以被拟合到曲线中并被插值以找到最高匹配,从而产生子像素精度。

亚像素精度通常限于平移。旋转和缩放在亚像素精度方面更难以量化。平移的典型亚像素精度结果仅优于像素分辨率,但分辨率精度可以更精细,在一些方法中,使用 FFT 配准方法,平移精度据称高达像素的 1/20th[151]。

此外,立体视差方法受益于改进的子像素精度,特别是在长距离下,因为 Z 距离测量的粒度随着距离呈指数增加。因此,随着深度场增加,计算的深度场包含更粗糙的信息,并且计算的深度场在 Z 中实际上是非线性的。因此,立体和多视图立体视差计算中的子像素精度对于最佳精度来说是非常理想和必要的。

搜索策略和优化

如图图 5-1 所示,一个特征可能是稀疏的,覆盖一个局部区域,也可能覆盖一个区域或全局。用于隔离这些特征类型的搜索策略是不同的。对于全局特征,没有搜索策略:整个帧被用作特征。对于区域描述符,需要选择或分割一个区域(在第二章中讨论)。对于稀疏的局部特征,搜索策略变得很重要。稀疏局部区域的搜索策略分为以下几个主要类别(也包括在第五章的分类中)。

密集搜索

在密集搜索中,检查图像中的每个像素。例如,在每个像素处计算兴趣点,然后将兴趣点限定并分类到候选列表中,并且为每个候选计算特征描述符。局部二进制描述符和通用描述符(如 SIFT)使用密集搜索。

在立体匹配和深度感测中,以密集的方式搜索每个像素来计算视差和最近点。例如,立体算法使用密集的对应搜索来逐行逐像素地计算视差;单目深度传感方法,如 PTAM [327]使用密集搜索兴趣点,然后稀疏搜索预测位置的已知特征。

密集方法也可以应用于图像金字塔,其中通常首先搜索较低分辨率的金字塔,然后搜索较细粒度的金字塔。当特征位置未知且无法预测时,密集方法通常在准确性和稳健性方面更受青睐。

网格搜索

在网格搜索方法中,图像被分成规则的网格或小块,并且基于小块来定位特征。OpenCV 库中提供了一种新颖的网格搜索方法,使用网格搜索适配器(在第六章和附录 A 中讨论)。这允许在网格区域内重复试验搜索最佳特征,并具有在每次试运行前调整检测机参数的能力。从精度的角度来看,格网搜索的一个可能的缺点是,要素没有排列成格网,因此要素可能会沿着格网边界被遗漏或截断,从而降低整体的精度和鲁棒性。

网格搜索有多种用途。例如,一个规则的网格被用作 D 网网格拓扑的锚点,如图图 4-7 所示。或者,使用网格来形成图像拼贴块,并为每个拼贴块计算描述符,例如在 HOG 方法中,如图图 4-12 所示。Viola Jones 方法[146]也在网格上计算 HAAR 特征。

多尺度金字塔搜索

多尺度影像金字塔搜索背后的理念是通过从较低分辨率开始加速搜索,或者真正提供多尺度影像以允许在适当的尺度下找到特征。缩小图像比例的方法包括像素抽取、双线性插值和其他多采样方法。比例空间是创建影像金字塔的常用方法,下一节将讨论许多变体;参见图 4-16 。

9781430259299_Fig04-16.jpg

图 4-16 。五个八度音阶的金字塔。这幅图片来自阿尔布雷希特·丢勒 1498 年的启示录木刻。请注意,许多方法使用非八度金字塔标度[120]

然而,随着金字塔等级的增加,检测到的特征的数量迅速减少,特别是对于已经被高斯滤波的尺度空间金字塔,因为高斯滤波器减少了图像纹理细节。此外,在较高的金字塔等级中,开始时会出现较少的像素,因此有时会使用小于八度音阶的金字塔比例间隔。有关图像金字塔的详细讨论,请参见参考文献[160]。

缩放空间和图像金字塔

通常,不是使用简单的像素抽取和像素插值来降低图像比例,而是使用高斯滤波方法来建立最初由 Lindberg[547]提出的比例空间【524,523】金字塔表示,以减少缩放伪像并保留斑点状特征。尺度空间是定义多尺度图像集的更正式的方法,通常使用高斯核与图像 f(x,y)卷积如下:

*image

image

或通过等效方法:

image

image

SURF 方法[160]中描述了尺度空间高斯滤波器设计的一个很好的例子。以增加大小的内核实现的高斯滤波器以倍频程间隔的子采样间隔应用于原始图像,以创建尺度空间图像,例如,从 9x9 高斯滤波器开始,增加到 15x15、21x21、27x27、33x33 和 39x39 参见图 4-17 。

9781430259299_Fig04-17.jpg

图 4-17 。以 0,2,4,16,32,64 的比例缩放空间高斯图像。图片来自阿尔布雷特·丢勒的启示录木刻,1498 年

尺度空间的一个缺点是在图像金字塔的较高级别中丢失定位和缺乏准确性。事实上,由于缺乏分辨率和高斯滤波,一些特征在图像金字塔的较高层中完全缺失。有效的尺度空间特征匹配的最佳例子可以是 SIFT,其规定尺度中的第一个第一个金字塔图像是原始分辨率的两倍,以减轻尺度空间问题,并且还提供了良好的多尺度描述符框架。参见图 4-18 。

9781430259299_Fig04-18.jpg

图 4-18 。规模和空间

图像金字塔类似于计算机图形学中使用的纹理贴图。图像金字塔的变化是常见的。使用倍频程和非倍频程金字塔间距,过滤方法也有变化。例如,SIFT 方法[161,178]使用五级八度音阶 n/2 图像金字塔,在尺度空间中具有高斯滤波图像。然后,使用高斯差分(DoG)方法捕获金字塔中相邻图像中的兴趣点极值最大值和最小值。SIFT 使用双比例第一金字塔等级,线性插值像素的原始放大倍数为 2 倍,以帮助保留精细细节。这项技术将稳定关键点的数量增加了大约四倍,这是非常显著的。在 ORB [120]方法中,非八度音阶空间是围绕五级金字塔上的音阶建立的,与两倍的八度音阶相比,这在金字塔等级之间具有更接近的分辨率等级。

要素金字塔

尺度空间金字塔和金字塔搜索的替代方法是使用特征空间金字塔,并建立一组多尺度特征描述符一起存储在数据库中。在这种方法中,描述符本身包含金字塔,不需要尺度空间或图像金字塔。相反,特征搜索直接从单尺度目标图像到多尺度特征进行。在第六章中讨论的 RFM 方法【220】甚至更进一步,包括对每个描述符的每个补丁的多视角变换版本。在表 4-3 中,注意多尺度特征可用于直接匹配目标图像,而单尺度特征更适合用于图像金字塔。

表 4-3 。使用单尺度特征和多尺度特征的一些权衡

image

图 3-16 显示了多分辨率直方图【152】的相关概念,从尺度空间金字塔的图像区域创建,直方图连接在描述符中,用于确定特征匹配的纹理度量。所以在多尺度直方图方法中,运行时不需要金字塔图像集;相反,金字塔搜索使用来自描述符本身的直方图特征来寻找与单尺度目标图像的对应。

各种标量和其他度量可以组成多尺度特征金字塔,例如图像强度片、颜色通道强度片、梯度幅度和梯度方向。已经发现纹理特征的直方图作为更广泛的特征描述符的一部分作为仿射不变度量是有用的[152]。

稀疏预测搜索和跟踪

在稀疏预测搜索流水线中,在下一帧的预期位置搜索在先前帧中发现的已知位置的特定特征。例如,在用于单目深度感测的 PTAM [327]算法中,通过定位一组兴趣点和特征描述符,从来自单个相机的连续视频帧创建稀疏 3D 点云和相机姿态。对于每个新帧,使用先前的相机姿态矩阵,由新图像中相同的兴趣点和特征检测器可能在的坐标构成预测。然后,对于新的帧,开始搜索或跟踪循环,以使用金字塔粗到细搜索策略来定位预测兴趣点的少量。在预测的兴趣点和特征周围的范围内搜索预测的兴趣点和特征,并且基于发现特征的新坐标更新相机姿态矩阵。然后,使用更新的相机姿态预测更大数量的点并且在该组中更精细比例的金字塔图像上进入搜索和跟踪循环。这个过程反复寻找点并改进姿态矩阵。

跟踪区域限制搜索

区域限制搜索的一个例子是视频会议系统,该系统使用立体声麦克风跟踪发言者的位置,以通过三角测量计算粗略位置。一旦知道了粗略的扬声器位置,就移动摄像机来观察扬声器,并且对于进一步的精细定位调整、自动缩放、自动聚焦和自动对比度增强来说,只有面部区域是感兴趣的。在这种应用中,不需要为面部特征搜索或处理整个图像。相反,FOV 的中心是搜索局限于定位面部的区域。例如,如果图像是从具有 1920×1080 分辨率的 HD 相机拍摄的,则仅需要处理图像中心的有限区域,可能是 512×512 像素,以定位面部特征。

分段有限搜索

分割区域可以定义搜索区域,例如具有特定纹理的区域,或者特定颜色强度的像素。在形态学视觉流水线中,可以以各种方式分割区域,例如阈值处理和二进制腐蚀+膨胀来创建二进制形状。然后,二进制形状可以用作掩模,以分割掩模下的相应灰度图像区域,用于特征搜索。图像分割方法在第二章的中介绍。

深度或 Z 有限搜索

随着低成本商用深度传感器出现在移动消费设备上, Z 维度可用于限制搜索范围。参见图 4-19 。例如,通过使用深度分割出图像的背景,前景特征更容易被分割和识别,并且搜索可以被深度段限制。考虑到计算机视觉从 2D 图像中提取 3D 图像信息需要花费多少时间,我们可以期待深度相机以新的方式用于简化计算机视觉算法。

9781430259299_Fig04-19.jpg

图 4-19 。基于深度图的图像区域分割。来自 Middlebury 数据集的深度图像:(来源:D. Scharstein 和 C. Pal“为立体声学习条件随机场”CVPR 会议,2007。作者提供)

计算机视觉、模型、组织

这一部分包含了对所选示例的高级概述,以说明如何在计算机视觉系统中使用特征度量。在这里,我们探索了特征是如何被选择、学习、关联在一起以描述真实对象、分类以进行有效的搜索和匹配以及在计算机视觉流水线中使用的。本节介绍机器学习,但仅在高层次上使用选定的示例。Prince 在[546]中找到了关于机器学习的很好的参考。Szelinski [324]为计算机视觉模型、组织、应用和算法提供了很好的参考。

本节选择并定义了几个术语来讨论计算机视觉模型,即特征空间物体模型约束。本节的主要主题包括:

  • 特征空间和最佳特征的选择
  • 经由包含特征和约束的对象模型的对象识别
  • 优化模式匹配的分类和聚类方法
  • 培训和学习

image 计算机视觉研究期刊和课程中讨论的很多方法都是从其他切线领域借用并应用的,例如,机器学习和统计分析。在某些情况下,计算机视觉正在推动这类切线领域的研究。由于这些领域已经建立并被认为超出了本研究的范围,我们在此仅提供一个简短的主题介绍,并提供完整性参考[546,324]。

特征空间

描述对象所需的所有特征、属性和其他信息的集合和组织可以被称为特征空间。在训练或学习阶段,通常使用基本事实数据作为训练集,将特征组织和分类到特征空间中。所选特征在数据库或一组数据结构(例如树和列表)中被组织和结构化,以允许在运行时进行快速搜索和特征匹配。

特征空间可以包含一种或多种类型的描述符,其使用诸如直方图、二元模式向量的谱作为多元复合描述符。此外,特征空间包含用于将多组特征关联在一起以识别对象和对象类别的约束。特征空间对于任何给定的应用都是唯一的,并且是根据所使用的特征类型和应用的要求来构建的;没有标准的方法。

特征空间可以包含几个用于描述对象的参数;例如:

  • 几种类型的特征描述符,如 SIFT 和简单颜色直方图。
  • 相对于训练图像的每个描述符的笛卡尔坐标
  • 每个描述符的方位
  • 与每个描述符相关联的训练图像的名称
  • 多模态信息,如 GPS、温度、海拔、加速度。
  • 特征集或相关描述符列表。
  • 一组描述符之间的约束,例如彼此之间的相对距离、相对距离阈值、描述符之间的角度关系或者相对于参考点的角度关系。
  • 对象模型收集并关联每个对象的参数。
  • 类别或同类物体的组合,如汽车。
  • 对象或约束的标签

对象模型

对象模型使用来自特征空间的参数描述真实对象或对象类别。例如,对象可能包含描述特定汽车所需的所有参数,如特征描述符集、标签和约束。一类对象可以关联和标记同一类的所有对象,例如任何类型的汽车。没有标准或规范的对象模型可以遵循,因此在本节中,我们将描述计算机视觉对象的总体属性以及如何对它们进行建模。

对象模型可以由多组单独的特征组成;对相关特征的约束,例如目标模型中特征的位置或方向;以及可能用于对象或描述符的其他多模态信息,例如 GPS 信息或时间戳,如图 4-20 中的所示。可以使用监督和非监督学习方法的组合来创建对象模型[403];我们将在本章后面介绍几种方法。

9781430259299_Fig04-20.jpg

图 4-20 。简化的假设特征空间,显示特征、约束和对象的组织和关联

制定对象模型的一个早期尝试被称为基于部件的模型,由 Fischler 和 Elschlager 在 1973 年提出[530]。这些通过首先识别它们的部分来描述和识别更大的物体——例如,由眼睛、鼻子和嘴等部分组成的脸。基于零件的模型有几种变体;例如,参见参考文献[531–533]。机器学习方法也用于创建对象模型[546],并在本节稍后讨论。

一个简单的对象模型可以仅由整个图像的图像直方图、每个相关图像的名称或标签以及可能的一些分类参数(例如图像的主题、GPS 位置和日期)组成。为了识别未知的目标图像,获取目标图像的直方图,并与来自数据库的图像直方图进行比较。使用合适的距离度量(例如 SAD)来测量一致性。在这个简单的例子中,强力搜索或散列表索引可以用于对照目标图像直方图检查数据库中的每个直方图,并且可能来自对象模型的其他参数可以与直方图一起匹配,例如 GPS 坐标。不需要进行复杂的机器学习分类、聚类、数据缩减或数据库组织,因为搜索方法是蛮力的。然而,随着更多的图像被添加到数据库中,寻找对应将变得越来越慢。并且直方图本身没有很强的辨别能力,并且提供很少的不变性。

约束条件

对象识别的关键,约束用于将特征和相关属性关联和限定为对象。在没有附加限定的情况下,单独的特征可能不足以识别对象,包括邻域一致性半局部约束,涉及联合约束,例如局部特征组合集之间的角度和距离【348–350】。约束将对象模型元素关联在一起以描述和识别更大的对象[365,366,379],例如通过确保一起找到对象特征的适当子集所需的最小特征计数阈值,或者通过使用诸如 GPS 位置的多模态数据约束,或者通过投票。

由于创建约束有许多方法,我们只能说明这个概念。例如,Lowe[161]展示了识别示例,说明如何使用 SIFT 特征来识别包含数十个不同特征的对象,在某些情况下,仅使用两个或三个良好特征。如果不能找到描述对象的一些特征,考虑特征方向和比例作为约束,这允许透视和遮挡不变性。另一个例子是宽基线立体匹配,其需要在 L/R 图像中的特征对上的位置和距离约束,假设 L/R 特征对的尺度和方向大约相等;在这种情况下,平移将被限制在基于深度的范围内。

检测器和功能的选择

基于变量的组合来选择特征检测器,例如特征检测器设计方法以及所需的不变性和性能的类型。接下来讨论几种方法或设计方法。

手动设计的特征检测器

一些特征检测器,例如多边形形状描述符和稀疏局部特征(如 SURF ),是使用专业人员的直觉、经验和测试结果手动设计和选择的,以解决应用所需的不变性属性。这包括选择正确的光谱来描述特征,确定特征的形状和模式,以及选择要搜索的区域类型。然而,有些检测器是根据统计和经验设计的,我们将在下一章讨论。

统计设计的特征检测器

统计方法用于设计和创建特征检测器。例如,在 ORB 和 FREAK 等方法中使用的二进制采样模式是基于可能的兴趣点比较对的统计特征从训练数据集创建的。通常,ORB 对每个检测到的兴趣点特征对组合进行排序,以找到与高方差不相关的术语。这是一个统计分类或训练过程,用于设计特征模式,并针对特定的基本事实数据集对其进行调整。更多关于 ORB 的细节见图 4-11 ,也见本章前面关于 FREAK 和 ORB 的讨论。

SIFT 还使用统计方法从训练集中确定最佳兴趣点、每个兴趣点的主导方向以及每个兴趣点的规模。

学到的功能

许多系统学习唯一的特征码本,使用稀疏编码方法在训练阶段对照选择的基本事实数据识别唯一的一组基本特征。所学习的基本特征特定于应用领域或训练数据,并且所选择的检测器和描述符可以仅仅是用作相关性模板的像素区域。然而,可以使用任何描述符,例如 SIFT。神经网络和卷积网络方法普遍用于特征学习,以及稀疏编码方法,这将在本章稍后讨论。

培训概述

机器视觉系统被训练识别期望的特征、物体和活动。然而,训练可能是相当复杂的,并且在机器学习和统计分析领域中被很好地覆盖(我们不详细地覆盖)。训练可以在专家的监督和帮助下进行,也可以在无人监督的情况下进行,如本节稍后讨论的深度学习方法。这里,我们提供了通用步骤的概述,并提供了更多详细信息的参考。训练的一个最简单的例子是获取与每种类型的图像相关联的图像直方图,例如,从不同图像中获取的描述人脸、动物或汽车的一组直方图。

训练包括收集适用于应用领域的图像训练集,然后确定可以调整哪些检测器和描述符以产生最佳结果。在一些情况下,特征描述符本身可以是可训练的并且被设计成匹配训练数据,例如局部二进制模式描述符 ORB、BRIEF 和 FREAK,它们可以使用从训练数据优化和学习的可变像素采样模式。

在特征学习系统中,整个特征集是从训练集中学习的。特征学习方法采用一系列描述符方法,例如包含像素区域的简单相关寺庙,或 SIFT 描述符。通过仅保留与已经在集合中的特征显著不同的特征,减少了学习的特征集合。特征学习方法将在本章后面介绍。

为了在训练期间形成更大的对象,使用约束将特征集合关联在一起,例如几何关系,如特征之间的角度或距离,或者特定区域内给定值的特征计数。对象是在训练期间确定的,这涉及针对所选的基本事实数据运行检测器和描述符以找到特征,然后确定将对象表示为复合特征集的约束。可以通过跟踪特征及其在相邻帧中的位置来识别活动,因此可以将活动视为一种元对象,并将其存储在数据库中。

在任何情况下,通过训练阶段获得的特征被分类到一个可搜索的特征空间,使用广泛的统计和机器学习方法。培训、分类和学习将在本章后面的高级部分讨论。

特征和对象的分类

分类是识别的另一个术语,它包括特征空间组织和训练。分类器是描述从数据中学习结构并识别对象的方法或系统的术语。自动构建分类器有几种方法,包括支持向量机(SVM)、核机器和神经网络。

一般来说,训练集或基础事实数据集的大小是分类器准确性的关键[336–338]。在系统训练期间,首先使用具有基础真实数据的训练集来建立分类器。机器学习社区提供了大量的培训指导,所以我们遵从已有的资源。深入挖掘机器学习和真实情况数据测试的关键期刊包括 NIPS 和 IEEE PAMI,后者可以追溯到 1979 年。机器学习和统计方法用于在训练期间指导特征的选择、分类和组织。如果没有对特征空间进行分类,则特征匹配过程遵循相对于已知特征的新特征的缓慢强力线性搜索。

本节讨论的主要分类问题包括:

  • 相似特征的分组距离和聚类使用一系列最近邻方法来帮助组织、拟合、误差最小化、搜索和匹配,并启用相似性约束,如几何邻近、角度关系和多模态线索。
  • 降维避免过度拟合,清理数据以去除离群值和虚假数据,并减少数据库的大小。
  • 提升和加权增加特征匹配的准确性。
  • 约束描述组成对象的描述符之间的关系,例如姿态估计器和阈值接受/拒绝过滤器。
  • 构建数据库用于快速匹配和强力方法。

组距离:聚类、训练和统计学习

在本讨论中,我们将组距离聚类称为描述数据原子组之间的相似性和差异的方法,有时可以互换,例如特征描述符。组距离和聚类的应用包括误差最小化、回归、异常值去除、分类、训练和特征匹配。

根据 Estivill-Castro[351],聚类不可能在数学意义上定义,因为有如此多不同的方法和途径来描述一个聚类。相关方法汇总见表 4-3 。然而,我们将在计算机视觉的背景下讨论聚类,以解决数据组织、模式匹配和描述对象模型约束(同时试图不冒犯使用不同术语的数学纯粹主义者)。

为了识别一个群体中的相似特征,使用了多种聚类算法或群体距离算法[353],在一些文献中也称为误差最小化回归方法。特征被聚集在一起,用于计算机视觉,以帮助解决基本问题,包括对象建模、在匹配过程中寻找相似的模式、组织和分类相似的数据以及维数减少。

描述聚类的一种方式是通过相似性— 例如,在某种距离度量或回归方法下描述相关特征的聚类。在这个意义上,聚类与距离函数重叠:欧几里得距离用于位置,余弦距离用于方向,汉明距离用于二进制特征向量比较就是例子。然而,两点之间的距离函数在本讨论中不同于组距离函数、聚类和组分布。

在特征空间中有效地组织相似的数据用于搜索和分类是聚类的一种形式。它可以基于特征向量的相似性或距离度量,或者基于对象约束相似性,并且需要加速特征搜索和匹配。然而,商业数据库“和强力搜索”可以按原样用于特征描述符,而不试图进行优化。自定义数据结构可以通过树、金字塔、列表和哈希表进行优化。(我们建议读者参考计算机科学中的标准参考资料,包括数据组织和搜索;参见经典文本唐纳德·克努特的《计算机编程的艺术》或阿霍、乌尔曼和霍普克罗夫特的《数据结构和算法》。)

聚类的另一个方面是特征空间维度和拓扑。由于一些特征空间是多元和多维的,包含标量和张量,因此很难对聚类、误差最小化、回归或距离进行任何严格的定义;这实际上取决于相似性被测量的空间。

群体距离:聚类方法调查,KNN,RANSAC,K-Means,GMM,SVM,其他

可以选择一系列备选方案来聚类和学习数据原子组之间的相似性,从低端开始,使用基本的 C 库搜索和排序功能,并使用统计和机器学习方法(如核机器和支持向量机(SVMs ))达到高端,以构建完整的分类器。核机器允许将各种相似性函数代入一个公共框架,以简化相似性方法和分类的比较。

表 4-4 总结了所选的聚类方法,并为感兴趣的读者提供了一些关键参考。

表 4-4 。聚类、分类和机器学习方法

|

组距离标准

|

方法和参考

|

描述

|
| --- | --- | --- |
| 距离 | k-最近邻[364] | 使用选择的距离函数,基于到训练集中 k 个最近邻的简单距离进行聚类。 |
| 共识模型 | RANSAC [380]散文 C [363] Levenberg-Marquardt [401] | 使用随机样本一致性来估计污染数据集中的模型参数。 |
| 质心模型 | K-均值[354],Voroni 镶嵌,Delauney 三角剖分分层 K-均值,Nister 树[387] | 使用分布的质心作为聚类的基础,这对于大型数据集来说可能非常慢;可以使用词汇(Nister 方法)在分层树结构中制定,以获得更好的性能。 |
| 集群的连通性 | 分层聚类[355] | 在其他集群之间建立连接。 |
| 密度模型 | DBSCAN [395][352]光学[396] | 定位与周围数据相比具有最大和最小密度的分布。 |
| 分销模式 | 高斯混合模型[356] | 求模型参数最大似然的迭代方法。 |
| 神经方法 | 神经网络[360] | 神经方法无视单一的定义,但通常使用一个或多个输入;可以学习和训练的每个输入的自适应权重因子、作用于输入和权重的神经函数、神经函数的偏差因子;产生一个或多个输出。 |
| 贝叶斯定理的 | 天真的贝叶斯[383]随机树[384]蕨类植物[307] | 记录变量之间概率关系的学习模型。 |
| 概率、语义 | [232]潜在语义分析(pLSA)潜在狄利克雷分配(LDA)隐马尔可夫模型,HMM [385][386] | 基于变量间概率关系的学习模型。 |
| 内核方法,内核机器 | 内核机器[361] 1 各种内核[362] PCA [357][358] *SVM 是一个众所周知的内核机器实例。 | 将分布简化为欧几里得空间中一组不相关的、排序的主成分,以便于匹配和聚类。 |
| 支持向量机 | SVM[377359] | SVM 可以产生结构化或多元输出来对输入进行分类。 |

1http://www.kernel-machines.org/

分类框架,缰绳,轻便摩托车

培训和分类分为以下几大类:

  • 监督。在训练过程中,会有人协助确保结果正确。
  • 无人监管。可以从特征数据和参数中自动训练分类器【403】。

将所有的部分放在一起,我们看到训练分类器可以是手动的或自动的,简单的或复杂的,这取决于对象的复杂性和所使用的特征度量的范围。

SVM 或内核机器可能是理想的解决方案,或者问题可能更简单。例如,用于识别水果的机器视觉系统可以包含用于每种类型水果的分类器,其特征包括简单的颜色直方图、形状因子(例如面积和周长以及傅立叶描述符)以及表面纹理度量,并具有关联和量化每种类型水果的所有特征的约束。训练过程包括对每种类型的几片水果进行成像;开发颜色、形状和表面纹理的规范描述符;设计一个顶级的分类器,可能首先辨别颜色,然后辨别表面纹理,最后辨别形状。一个更简单的水果分类器可能只包含每个水果对象的一组精确颜色测量的图像直方图,并且如果在工厂中用高精度彩色相机对每个水果块进行成像,可能足够好地工作。

虽然大多数已发表的研究都是基于为特定应用或展示研究结果而设计的各种非标准分类方法,但一些工作正在朝着更标准化的分类框架进行。

为机器人导航和物体识别开发的潜在标准分类器框架的一个值得注意的例子是 REIN 方法【397】,它允许混合和匹配检测器、描述符和分类器来确定约束。REIN 提供了一个插件架构和接口,允许任何算法(如 OpenCV 检测器和描述符)在并行或串行流水线中组合。REIN 中有两种分类方法可以作为插件模块并行使用:二值化梯度网格金字塔作为新方法引入【397】,还使用了视点特征直方图【398】。

REIN 流水线为(1) 注意力操作符提供接口,以识别感兴趣的 3D 点并减少搜索空间;(2) 检测器,用于创建特征描述符;以及(3) 姿态估计器,用于确定诸如抓取之类的机器人运动的应用的几何约束。REIN 作为开放源码可用于研究;参见参考文献[397]。

另一个研究项目,MOPED【399】,为机器人导航提供了一个规则的架构,包括物体和姿态识别。轻便摩托车包括优化使用所有可用的 CPU 和 GPU 并行计算资源。轻便摩托车为 GPGPU 提供了 SIFT 和 SURF 的优化版本,并大量使用 SSE 指令进行姿态估计。

内核机器

在机器学习中,内核机器 [362]是一个框架,它允许一组用于对模式或特征进行统计聚类、排序、关联和分类的方法实现自动化。内核机器的一个常见例子是支持向量机(SVM) [341]。

内核机器的框架将描述符数据映射到特征空间,其中特征空间中的每个坐标对应于一个描述符。在特征空间内,可以使用核函数有效地进行特征匹配和特征空间缩减。在内核机器框架中使用了各种内核函数,包括 RBF 内核、Fisher 内核、各种多项式内核和图形内核。

一旦特征描述符被转换到特征空间,就可以采用比较、归约和聚类。内核机器的主要优点是内核方法是可互换的,允许针对相同的特征数据评估许多不同的内核。有一个活跃的内核机器社区(见kernel-machines.org)。

增压、加权

Boosting【381】是一个机器学习概念,它允许一组分类器一起使用,组织成组合网络、流水线或级联,并将学习到的权重应用于每个分类器。这导致使用组合的加权分类器的更高的协同预测和识别能力。升压类似于用于神经网络输入的加权因子;然而,boosting 方法更进一步,将分类器网络结合起来,创建一个单一的强分类器。

我们将说明 Viola Jones 方法[146,186]中的 boosting,该方法也在第六章中讨论,它使用 ADA-BOOST 训练方法,通过从许多弱学习器生成强分类器来创建级联模式匹配和分类网络。这是通过在训练阶段确定的动态加权因子来完成的,使用加权因子的方法称为增强

boosting 的想法是首先对检测到的特征(在这种情况下是 HAAR 小波)进行相等的加权,然后将检测到的特征与预期的特征集进行匹配;例如,为特定面部检测的那些特征。每组加权特征是一个分类器。未能正确匹配的分类器称为弱学习器。在训练阶段,对于每个弱学习者,新的加权因子被应用于每个特征,以使分类器正确匹配。最后,所有弱学习器被线性组合成一个级联分类器,它就像一个弱分类器的流水线或漏斗,被设计成在流水线早期拒绝坏的特征。

培训可能需要数小时、数天或数周时间,并且需要一些监督。虽然 ADA-BOOST 解决了二元分类问题,但该方法可以扩展到多类分类[382]。

分类的一些例子

我们在这里列出了一些值得注意和流行的分类方法,它们也列在表 4-5 中。

表 4-5 。各种兴趣点、描述符和分类器概念的比较

image

Note: The FERNS method does not rely on a local feature descriptor, and instead relies on a classifier using constraints between interest points.

随机化树 是一种使用基于贝叶斯概率方法的分层斑块分类器[384]的方法,采用一组由随机单应性参数变形的简单斑块特征。Ozuysal 等人【307】进一步开发了随机化树方法,使用非层级组织形式的蕨类、进行优化,使用二进制概率测试确定斑块分类器成员。使用朴素贝叶斯方法评估匹配。

FERNS training【307】涉及组合来自每个面片的多个视点的训练数据,以添加比例和透视不变性,使用具有 11 个级别的树和每个面片的 11 个版本,使用随机化仿射变形参数进行扭曲;一些高斯噪声和平滑也被应用到变形的片上。然后在每个变形片中定位关键点,并为训练集选择在变形最严重的片中找到的关键点。FERNS 关键点在三个尺度上使用拉普拉斯滤波器的最大值,并且仅保留最强的 400 个关键点。拉普拉斯关键点不包括方向或精细尺度估计。FERNS 不使用描述符,只使用在每组 11 个变形图像上计算的最强拉普拉斯关键点。

虽然 K-means [354]方法可能非常慢,但使用分层 Nister 树[387]进行优化是一种高度可扩展的替代方法,可用于索引分层词汇表树中大量量化或聚类的局部描述符。据报道,该方法具有很强的区分性,并且已经在大型数据集上进行了测试。

二进制直方图交集最小化(BHIM)【322】使用多尺度局部二进制模式(MSLBP)【322】对,以基于 ms LBP 特征对之间的强散度来形成成对耦合的分类器。MSLBP 要素对的直方图相交使用距离函数(如 SAD)来查找直方图距离的最大散度。然后,BHIM 分类器由具有大散度的 MSLBP 直方图“对”的列表组成,并且 MSL BP 被匹配到分类器中。BHIM 使用跨多种规模的训练数据创建的特征。据作者报道,它至少与 ADA-BOOST 一样准确,并且据报道,MSLBP 特征比 LBP 更具鉴别性。

Alahi 等人[391]开发了一种使用级联的一组由粗到细的区域描述符网格进行分类和匹配的方法,这些区域描述符称为对象描述符 (ODs)。目标应用通过一组摄像机跟踪对象,例如大都市地区的交通摄像机。每个 OD 是在多尺度网格上的等尺寸区域中计算的多尺度描述符的集合;网格的范围超过六个刻度,刻度因子相差 25%。任何现有的描述符方法都可以用于 od 方法,例如 SIFT、SURF 或相关模板。作者[391]声称,与使用现有描述符相比,在 OD 中级联描述符可以提高性能。

特征学习,稀疏编码,卷积网络

特征学习方法创建一组基本特征(我们在这里不严格地使用术语基本特征),这些基本特征在训练阶段从真实情况数据中导出。基本特征被收集到一个集合中。本节讨论了创建集合的几种相关方法。

术语:代码簿、视觉词汇、词汇包、功能包

在特征学习文献中使用了几个相关的方法和术语,包括诸如稀疏编码码本单词包视觉词汇的变体。然而,对于新手来说,在各种方法中存在一些概念上的重叠,并且术语是微妙的,描述了用于学习特征和构建分类网络的方法中的微小变化;参见参考文献[114–119]。稀疏码类似于基本特征。活动识别领域的许多研究人员[69,75]正在使用稀疏码书并扩展研究领域。

我们描述了一些术语和概念,包括:

  • 字典、代码簿、视觉词汇、单词包、特征包和特征字母表,包含特征集。
  • 稀疏编码、稀疏编码和最小特征或编码集。
  • 多层稀疏编码和深度信念网络,包含用于分层匹配的多层分类网络;这些要素由小比例、中比例和大比例要素组成-可能有十层或更多层的比例。
  • 单层稀疏编码,没有特征层次,可以建立在多尺度描述符如 SIFT 之上。
  • 无监督特征学习,包括从真实情况数据集学习给定应用的最佳特征的各种方法;特征学习最近在神经信息处理系统(NIPS)社区中受到了很多关注,尤其是在应用于卷积网络时。

稀疏编码

在自然图像的稀疏编码领域中的一些早期工作可以在 Olshausen 和 Field [126]的工作中找到,其形成了概念基础。为了创建稀疏码本,首先选择图像特征域,例如人脸识别或汽车识别。然后,选择一组基项(面片、向量或函数),并基于选择的唯一性函数将其放入码本。稀疏编码的目标是包含实现系统的准确性和性能目标所需的唯一基本项的最小集合。

当在训练阶段向码本添加新特征时,使用合适的距离函数和经验阈值,将候选特征与码本中已经存在的特征进行比较,以确定特征唯一性。如果该特征足够独特,如通过距离函数和阈值所测量的,则新特征被添加到码本中。

在 Bo、Ren 和 Fox[124]的工作中,训练阶段包括使用诸如杯子之类的物体,将杯子放置在一个小的旋转桌上。从多个视点和距离拍摄对象的多个图像,以实现透视不变性,然后产生从各种姿态拍摄的一组补片,从这些补片创建唯一稀疏码字并将其添加到码本。另见参考文献[124,237,225,226]。相关工作包括稀疏码描述符或 HSC [125]的直方图,如第七章所述,用于改进 HOG 描述符。

视觉词汇

视觉词汇类似于文字词汇,它们共享共同的研究[231]。在文档分析领域,基于文档中唯一字数的直方图来分析和描述内容。当然,直方图可以被修剪和重新映射,以减少量化和宁滨。视觉词汇遵循与单词词汇方法相同的方法,通过视觉单词的频率来全局地表示图像,如图图 4-21 所示,其中视觉单词方法使用多种类型的特征描述符。

9781430259299_Fig04-21.jpg

图 4-21 。代表一组视觉单词的假设性简化插图,以及显示给定图像中每个视觉单词使用频率的直方图

为了建立视觉词汇,从真实情况图像中提取和收集独特的特征描述符。要被包括在词汇表中,新特征必须与词汇表中的现有特征具有显著的统计差异,因此只有当特征超过差异阈值函数时,它们才被添加到词汇表中。

为了量化视觉词汇特征以确定它们的唯一性,对特征集执行聚类和分类方法,并且选择唯一的候选特征,以便减少特征空间并有助于匹配速度。可以采用各种统计方法来减少特征空间,例如 K 均值、KNN、SVM、贝叶斯等。

为了收集视觉特征,从业者使用所有可能的特征描述和图像搜索方法,包括在规则网格和兴趣点对图像进行采样,以及尺度空间搜索。词汇表中使用的特征范围从简单的矩形像素区域到 SIFT 特征,以及介于两者之间的一切。视觉词汇的应用范围从分析活动识别的时空图像[232,235]到图像分类[233,234,118,116,235]。

通过卷积滤波器掩码学习检测器

如图 4-22 所示,Richardson 和 Olson【122】开发了一种学习最佳卷积滤波器的方法,作为应用于立体视觉里程计的兴趣点检测器。这种方法使用 DCT 和 HAAR 基特征的组合,使用随机权重形成一组候选的 8×8 像素基函数,每个基函数都根据类似于 2D 条形码的目标特征集进行测试,称为 AprilTags [527]。针对 AprilTags 测量每个 8×8 像素候选,以找到每个 tag 的最佳卷积掩模,从而形成基集。当然,其他目标特征(如角点)也可用于真实情况数据,而不是 AprilTags。

9781430259299_Fig04-22.jpg

图 4-22 。(左)用于办公室、会议室、隔间和大厅的图像的最佳学习卷积滤波器;灰度值表示滤波器系数的大小。(右)顶行中的可比角检测器,左下方的高斯差分,以及作者喜欢的自定义过滤器。(图片为安德鲁·理查森和埃德温·奥尔森,经许可使用)

使用学习的卷积模板,特征检测的步骤如下:(1)在选择的像素处卷积每个模板以获得响应;(2)将卷积响应与阈值进行比较;(3)使用 3×3 空间滤波器窗口抑制非极值响应值。作者报告了在快速检测器数量级上的良好准确性和高性能,但是随着特征计数的增加,组合检测和非最大抑制阶段具有更高性能的好处。

卷积神经网络,神经网络

卷积神经网络,由 le Cun【339】等人首创,是一种基于神经网络理论【360】实现机器学习算法的方法。卷积网络在图像分类和特征匹配方面在学术界和工业界取得了巨大成功[340]。

卷积神经网络是模拟神经网络的一种方法。卷积网络中的主要计算元素是许多并行优化卷积,以及计算单元之间的快速本地内存。运行时分类性能可以非常快,特别是对于硬件优化的实施[528]。

如图 4-23 所示,一种对每个神经元和神经元网络建模的方法包括一组输入、一组应用于每个输入的加权因子、一个组合函数和一个输出。存在许多映射到卷积网络的神经模型,我们请读者参考专家,参见 Lecun [339]。使用几种模型设计了神经网络,但是这个主题超出了本工作的范围[360];更多信息请参见 NIPS 社区研究。

9781430259299_Fig04-23.jpg

图 4-23 。(左)来自人脑的神经元。(右)人工神经网络的许多可能模型之一[360]。注意,每个神经元可以具有几个输入、几个输出、一个偏置因子和输入/输出权重因子(未示出)。左边的人类神经元图像@ Gerry Shaw,经许可使用

神经网络是多层次的,包含若干层和互连。如图 4-23 中的假设神经网络所示,一个偏差输入作为一个加权因子被提供给每个神经功能。一些神经网络配置使用应用于每个单独输入的单独权重,因此权重因子充当卷积核系数。就卷积网络而言,神经网络范例可以被映射到原始像素的局部小块中,作为最低级别的特征输入。例如,小块尺寸可以是 1 像素或 5×5 像素小块,每个输入具有卷积加权因子。

在网络中确定学习的加权因子[85,339],以用作应用于块中每个像素的卷积核值。层的输出被称为特征图。加权因子在网络中学习,并且可以反向传播以在训练期间调整系统。

Lecun [339]提供了卷积网络的标准介绍。在学习过程中,一个关键目标是只保留唯一的特征并减少特征空间;为此,使用稀疏编码。在包含 10 个或更多标度层的深度学习方法【339,340】中,学习到的特征被组合成分级的高级、中级和低级特征的多层结构。网络和像素输入区域可以重叠到相邻的卷积核中。

深度学习、池化、可训练的特征层次

局部特征描述符通常与特定尺度或者甚至几个尺度的匹配有关。然而,正在开发可训练的特征层次方法[402,339],其使用层次或特征的深度集、对特征进行分类,所述层次或特征包含精细尺度的低级特征、中间或中等尺度的特征和粗糙尺度的高级特征——可能在特征检测层次中有八层或更多层——产生更深的表示,这是深度学习 AI 方法的目标[525]。

深度学习方法可能包括几层神经网络,包括隐藏层。为了减少层级的每一级的特征空间,在每一级使用特征学习来汇集[404]相似的局部特征,仅保留独特的特征。各种特征预处理方法被用于汇集,例如特征白化[405],以将特征归一化为在对比或变化下相似。低级特征可以包括局部区域像素细节,高级特征可以类似于区域形状度量。这种可训练的特征分类网络在文献中以许多名称进行了讨论,例如深度信念网络[526]和特征学习。

许多研究人员正在建立依赖于矩形像素块的特征的深度信任网络,并使用卷积或相关的特征匹配方法。使用深度学习的卷积网络被部署在许多成功的商业应用中,如语音识别,或人脸,人和性别识别。它们也被用来赢得一些比赛[340]。据报道,随着特征的分辨率朝着更精细的尺度降低,使用深度学习的卷积网络的准确性增加,这增加了网络的深度。据报道,训练需要几天时间[340],使用一组专用的 GPU。

一个有趣的例子是 Bo、Ren 和 Fox [242]的工作,其中采用分层匹配追踪 HMP 方法(深度方法)在无监督框架中学习特征,并添加到具有两个级别的稀疏码本。RGB-D 数据通道用于计算描述符,包括用于灰度或强度、 RBG 颜色、 Z 或来自深度相机的深度的单独描述符,以及来自深度数据的 3D 表面法线。使用了一些不同的描述符大小,包括用于较高级匹配的 4 像素重叠采样的 16×16 面片,以及用于较低级别的一组不重叠的 5×5 面片。这些特征作为特征学习过程的一部分被汇集在一起。

摘要

在这一章中,我们回顾了用于创建局部特征描述符和兴趣点检测器的背景概念和思想。关键概念和想法也发展成了第五章中建议的愿景分类法。这里讨论了距离函数,以及有用的坐标系统。我们研究了局部描述符的形状和模式,重点是局部二进制描述符,如 ORB、FREAK 和 BRISK,以说明概念。

使用仅来自特征描述符数据的图像重建来说明特征描述符辨别。讨论了搜索策略,如尺度空间金字塔和多级搜索,以及其他方法,如网格限制搜索。涵盖了计算机视觉系统模型,包括特征空间、对象模型、特征约束、统计设计特征和特征学习等概念。使用几种方法来说明分类和训练,包括核心机器、卷积网络和深度学习。为感兴趣的读者提供了几篇参考文献,以便更深入地挖掘。还提供了设计视觉系统的实际观察和考虑。

总之,本章提供了一些有用的背景概念,在阅读第六章中的局部特征描述符时要记住,因为这里讨论的概念主要来自当前使用的局部描述符方法;然而,本章也提出了一些额外的观察和未来研究的方向。**

五、特征描述属性的分类

因为恩特威斯尔夫妇渴望秩序、富足和安宁(他们的意思是东西应该留在他们放置的地方)

—J. R. R .托尔金《指环王》

本章为特性描述开发了一个通用的视觉度量分类法,以便收集概要描述符属性用于高级分析。分类法包括一套通用的鲁棒性标准 用于特征描述和基本事实数据集。本书中介绍和讨论的材料遵循并反映了这一分类法。通过开发分类法中的标准词汇表,术语和技术可以得到一致的交流和更好的理解。在第六章的中的特征描述符方法的调查中,分类法被用来记录‘什么’从业者正在做什么。

如图 5-1 所示,视觉度量分类基于特征描述符维度,使用三个轴——形状和模式、光谱和密度——旨在创建一个简单的分析和讨论框架。在没有标准的地方引入了一些新的术语和概念,例如术语特征描述符系列。这些已经被分解成局部二进制描述符、光谱描述符、基空间描述符和多边形形状描述符的类别;这些描述符家族也在第四章中详细讨论。此外,分类法从文献中借用了一些有用的术语,包括一些关于健壮性和不变性属性的术语。

9781430259299_Fig05-01.jpg

图 5-1 。特征描述符维度的分类法,包括(1)作为全局、区域和稀疏局部的特征密度;(2)用于计算描述符的像素的形状和图案,包括矩形、圆形和稀疏采样图案;(3)光谱,包括特征本身所包含的光谱信息

为什么要创建一个保证是模糊的、包含几个变量的分类法,并且不能完美地表达任何特征描述符的属性呢?目的是提供一个框架来描述用于特性描述的各种设计方法。然而,分类法并不打算用来比较描述符的优点、性能或准确性。

愿景指标分类的三个轴是:

  1. 形状和图案:如何从目标图像中获取像素。
  2. 密度:描述符所需的图像范围,区分局部、区域和全局描述符。
  3. Spectra: 用于度量的标量和矢量,以及算法和计算的摘要分类。

特征描述符系列

特性描述符和度量标准已经沿着几条思路发展成独立的家族。在许多情况下,不同家庭的研究团体在研究不同的问题,很少有交叉授粉或共同利益。例如,细胞生物学和医学应用通常对多边形形状描述符感兴趣,在文献中也称为图像矩。正如在计算机视觉文献中所讨论的,那些涉及流行的移动电话增强现实应用的人可能对本地二进制描述符更感兴趣。在某些情况下,特征检测器和特征描述符有共同的概念,这将在第六章中详细讨论;这些包括梯度和局部二进制模式的使用。

基于图 5-1 所示的分类法,我们将功能分为以下几类:

  • 局部二元描述符。这些采样点对位于局部区域,并创建二进制编码的位向量,每次比较 1 位,服从汉明距离特征匹配。例子包括 LBP,FREAK,ORB,BRISK,Census。
  • 光谱描述符。这些使用广泛的光谱值,如梯度和区域平均值。对可用于这些特征的光谱没有实际限制。检测器中最常用的光谱之一是局部区域梯度,例如在 SIFT 中。梯度也用于几个兴趣点和边缘检测器,如 Harris,Sobel。
  • 基础空间描述符。这些方法将特征向量编码成一组基函数,例如熟悉的正弦和余弦幅度和相位的傅立叶级数。此外,现有的和新的基础特征正在以稀疏码书和视觉词汇的形式被设计(我们不严格地使用术语基础空间)。
  • 多边形形状描述符。这些采用由统计指标测量的物体形状,例如面积、周长和质心。通常,使用形态学视觉流水线和区域算法提取形状,这可能比特征检测器和特征描述符的局部算法更复杂(将在第八章中讨论)。图像矩【518】是文献中经常使用的描述形状特征的术语。

计算机视觉分类学的前期工作

几篇研究论文对稀疏局部特征的各个方面进行了比较和对比,该领域有大量比较关键点检测器[306,93]和特征描述符[145,107]的例子。新的特征描述符方法和改进通常与现有的方法相比较,利用几个鲁棒性和不变性标准。然而,缺乏正式的分类工作来突出影响设计和比较的微妙细节。关于涵盖最先进的计算机视觉方法的良好调查,参见 Szelinski [324]。

需要注意的是,计算机视觉是一个巨大的领域。每年有几千篇研究论文发表,还有几千篇同样有趣的研究论文被会议出版商拒绝。这里有一些值得注意的作品,它们调查并组织了特征度量和计算机视觉领域。

  • 仿射共变兴趣点检测器。Mikolajczyk 等人【153】为仿射协变兴趣点检测器提供了一个很好的分类法。此外,Lindberg [150]广泛研究了与规模无关的兴趣点方法。然而,我们寻求一个更加丰富的分类法来涵盖特性描述符的设计原则,并且我们已经围绕具有共同设计特征的描述符方法家族开发了我们的分类法。
  • 带注释的计算机视觉参考书目。来自南加州大学,由 Keith Price 维护,该资源提供了计算机视觉几个分支的详细分类,以及该领域一些关键研究和计算机视觉资源的链接。 1
  • 进化中的、分布式的、非专有的、在线的计算机视觉纲要。这提供了一个全面而详细的计算机视觉主题列表。该网站由 Robert Fisher 维护,并对维基百科的关键文章进行了索引。这可能是目前最好的在线资源之一。 2
  • 局部不变特征检测器综述。由蒂内·图亚特拉斯和王南钧·米科拉伊奇克[107]编写,该参考资料提供了几种特征描述方法的良好概述,以及对几种方法的局部特征、性能和精度评估、方法类型(角点检测器、斑点检测器、特征检测器)和实施细节的文献讨论。

鲁棒性和准确性

计算机视觉的一个关键目标是鲁棒性,或在各种条件下识别特征的能力。健壮性可以分解成几个属性。例如,检测一个特征应该在对给定应用至关重要的各种标准上是鲁棒的,例如比例、旋转或照明。我们也可以使用术语不变性不变性来描述健壮性。最终目标是在不变性标准下的精确定位、一致性和鲁棒性。

然而,一些鲁棒性属性依赖于与其他变量相结合的特征描述符。例如,许多局部特征描述符方法基于选择的兴趣点方法计算位置和方向,因此描述符的准确性与兴趣点方法相关。距离函数和分类方法也是相互关联的,以确定最终精度。

image 注意因为不可能独立于兴趣点方法、分类器和距离函数来定义特征描述符的鲁棒性或准确性,所以存在混合和匹配众所周知的检测器和描述符以及各种分类器的机会,以产生期望的鲁棒性和准确性。

稳健性和准确性是以下因素的组合:

  1. 兴趣点准确性,因为许多描述符依赖于关键点的位置和方向。
  2. 描述符精度,随着每个描述符方法的不同而不同,并且可以调整。
  3. 分类器和距离函数精度,作为一个差的分类器和匹配阶段会导致错误的结果。

因此,应用面临的部分挑战是逐个属性地定义鲁棒性标准,然后定义所寻求的不变性的界限。例如,从 1 倍到 100 倍放大的比例不变性可能不需要并且几乎不可能,但是从 1 倍到 4 倍的比例不变性可能是所需要的并且更容易达到。

健壮性的几个属性在这里被发展成一个健壮性分类。为了确定实际的稳健性,需要真实情况数据作为检查算法和测量结果的基础。第七章提供了地面实况数据选择和设计的背景。

通用稳健分类法

鲁棒性标准可以用属性来表示,并作为对这些属性的不变性或鲁棒性来度量。(参见第七章、表 7-1 ,了解关于每个鲁棒性标准属性的更多信息,以及创建真实情况数据集的注意事项。)稳健性标准和属性在以下组标题下分组:

  • 照明
  • 颜色
  • 不完全
  • 分辨率和距离
  • 几何失真
  • 歧视和独特性

每个鲁棒性标准组包含几个更细粒度的属性,如图图 5-2 所示。

9781430259299_Fig05-02.jpg

图 5-2 。一般稳健性标准及其属性

让我们来看看这些健壮性属性,以及设计和实现特性描述符的一些实际考虑,以及处理这些属性的相应基础数据。

照明

光是所有成像的来源,在为给定应用设定要求时,它应该是分析和考虑的第一优先领域。照明有几个方面,与颜色和颜色空间分开考虑。在某些情况下,可以通过改变光源或添加或重新定位光源来校正照明。在其他情况下,需要图像预处理来校正光照,以便为进一步分析和特征提取准备图像。

对照明的关注怎么强调都不为过;例如,参见图 4-3 显示了在增加特征提取对比度方面改变照明的预处理效果。关键照明属性是:

  • 照明不均匀:图像包含暗区域和亮区域,有时会模糊依赖于特定范围像素强度的特征。
  • 亮度:总光线过多或过少,影响特征检测和匹配。
  • 对比:强度带过窄、过宽,或包含在几个带中。
  • 晕影:光线分布不均匀,如边缘周围较暗。

颜色标准

使用颜色时,颜色的准确性至关重要。色彩管理和色彩空间将在第二章中讨论,但一些主要考虑事项如下:

  • 色彩空间精确度:应该使用哪种色彩空间——RGB、YIQ、HSV,还是 CIECAM02 Jch 或 Jab 等感知精确的色彩空间?每个色彩空间都有准确性和实用性方面的考虑,例如在色彩空间之间转换色彩的容易程度。
  • 颜色通道:由于相机通常提供 RGB 数据,因此从 RGB 数据中提取灰度级强度通常很重要。有许多方法可以将 RGB 颜色转换为灰度强度,并且有许多颜色空间可供选择。
  • 颜色位深度:颜色信息在使用时,必须足够精确以满足应用要求。例如,8 位颜色可能适用于大多数应用,除非有必要进行颜色辨别,因此可能需要每通道使用 10、12、14 或 16 位的更高精度颜色。

此外,根据所使用的相机传感器,每个颜色通道会有不同的信号特征,如颜色灵敏度和动态范围。对于要求苛刻的颜色关键应用,相机传感器应该很好地理解,并有一个已知的校准方法。在图像预处理过程中,可能需要对个别颜色进行补偿。(参见第一章关于摄像头传感器的讨论。)

不完全

特征并不总是以它们被期望的方式或它们被学习的方式在图像中逐帧呈现。这些特征可能看起来不完整。不完整性的关键属性包括:

  • 杂波:特征被周围的图像特征遮挡,特征混叠并融合到周围的像素中。
  • 遮挡:特征部分隐藏;在许多情况下,应用会遇到被遮挡的要素或要素集。
  • 离群值,接近度:有时只使用某些区域的特征,必须检测并忽略离群特征。
  • 噪声:可能来自雨水、坏的图像传感器和许多其他来源。噪声是一个持续存在的问题,如果理解的话,可以在预处理过程中使用多种滤波方法进行补偿。
  • 运动模糊:如果测量并理解,在预处理期间可以使用滤波来补偿运动模糊。
  • 抖动、抖动:运动伪影、抖动或抖动可以被校正,但并不总是如此;这可能是一个难以满足的鲁棒性标准。

分辨率和精确度

关于分辨率、比例和距离的鲁棒性通常是计算机视觉的一个挑战。当使用依赖于离散像素大小的特征度量时尤其如此,其中像素面积随距离而变化。例如,仅依赖于像素邻域结构的特征度量不能很好地或容易地缩放,例如相关性模板和大多数局部区域核方法。其他描述符,例如基于形状因子的描述符,可以提供像素区域结构无法实现的鲁棒性。根据应用的不同,可能需要不止一种描述符方法来处理分辨率和缩放。

为了应对分辨率和距离鲁棒性的挑战,在实践中采用了各种方法,例如尺度空间图像金字塔集合和特征空间金字塔,它们包含特征的多尺度表示。分辨率和距离稳健性的关键标准包括:

  • 定位精度或位置:在缩放、旋转、噪声和其他标准下,度量需要提供多接近的坐标位置?需要像素精度还是亚像素精度?特征描述的区域精度方法也不能确定位置精度;例如,使用 HAAR-like 特征和积分图像的方法会受到最大的影响,因为在计算 HAAR 矩形时,矩形中的所有像素被加在一起,从而丢弃了对单个像素位置的区分。像素级特征精度也是一个挑战,因为随着特征的移动和旋转,它们会变形,并且像素采样伪像会产生不确定性。
  • 形状和厚度扭曲:距离、分辨率和旋转共同扭曲了像素样本的形状,因此某个特征可能看起来比实际更厚或更薄。失真是一种采样伪像。
  • 焦平面或深度:根据距离的不同,每个像素覆盖的像素区域会改变大小。在这种情况下,当与 RGB 或其他传感器一起使用时,深度传感器可以提供一些帮助。
  • 像素深度分辨率:例如,可能需要使用 float 或 unsigned short int 作为最小值来处理颜色通道以保持位精度。

几何变形

也许图像特征最常见的失真是几何失真,因为随着照相机的移动和物体的移动,几何失真有多种形式。稳健性的几何属性包括以下内容:

  • 标度:距视点的距离一个通常被提及的鲁棒性标准。
  • 旋转:在许多应用中很重要,例如工业检测。
  • 几何扭曲:活动识别和动态纹理分析领域的关键研究领域,详见第四章和第六章。
  • 倒影:将图像翻转 180 度。
  • 径向失真:深度感测中的一个关键问题,通常对于 2D 相机的几何结构也是如此,因为深度场不均匀或不简单;参见第一章。
  • 极畸变:深度传感几何中的一个关键问题;参见第一章。

效率变量、成本和收益

我们认为效率与计算、内存和提供的总不变性属性有关。特征描述符或特征度量的效率如何?创建指标需要多少计算量?存储该指标需要多少内存?指标有多准确?与计算和内存成本相比,提供了多少稳健性和不变性?要回答上述问题非常困难,这取决于如何为应用实施整个视觉流水线,以及可用的计算资源。Vision Metrics 分类法提供了追踪这些问题的信息,但是像往常一样,追踪错误的问题可能会导致错误的答案。

区别和独特性

使用各种方法来选择最佳的、有区别的特征。例如,局部特征检测器方法基于诸如角强度之类的标准,仅过滤出最有区别或唯一的候选;然后在选定的兴趣点上计算描述符作为斑块或其他形状;最后基于唯一性标准接受或拒绝结果描述符。唯一性也是创建第四章中讨论的稀疏码本的关键标准。

如第四章所述,可通过仅根据描述符信息重建图像的能力来衡量辨别能力。具有太少信息以充分重建图像的描述符可能被认为是弱的或无鉴别能力的。

通用视觉度量分类

为了理解特性度量,我们开发了一个由汇总标准组成的视觉度量分类法。选择每个标准时,都要考虑实际的工程观点,以便为评估和具体实施提供信息,例如算法、频谱、内存大小和其他属性。视觉度量分类的基本类别在表 5-1 中显示,并在此以列表形式总结,每个列表项在本章的单独章节中讨论:

  • 特征描述符族
  • 光谱维数
  • 光谱值
  • 兴趣点
  • 存储格式
  • 数据类型
  • 描述符存储器
  • 特征形状
  • 特征模式
  • 特征密度
  • 特征搜索方法
  • 模式对抽样
  • 图案区域大小
  • 距离函数
  • 运行时计算

表 5-1 。视觉度量分类

Table5-1.jpg

分类法中使用的许多背景概念在第四章中讨论,其中分析了关于内部结构的属性和公共特性的目标。此外,在本章后面的特性度量评估(FME) 信息表中说明了这种分类。在第六章特性描述符调查中使用了分类的一个小子集来记录摘要信息。表 5-1 中的分类法是收集和总结信息的指南。没有记录或暗示对良好或性能的判断。

特征描述符系列

如本章开头所述,特性描述符在这种分类法中分类如下:

  • 局部二进制描述符
  • 光谱描述符
  • 基础空间描述符
  • 多边形形状描述符

光谱尺寸

记录在特征描述符中的谱或值是变化的,并且可以包括一种或多种类型的信息或谱。我们将类别划分如下:

  • 单变量:存储单个值,如积分图像或区域平均值,或者只是一组简单的像素梯度。
  • 多元:存储多个光谱;例如,诸如颜色信息、梯度大小和方向以及其他值的光谱的组合。

光谱类型

特征描述符的光谱类型是该分类法的主轴,如图 5-1 中的所示。以下是常见的光谱,它们已经在第三章的中讨论过,也将在第六章的中讨论。

  • 梯度幅度:局部区域纹理或差异的度量,被广泛的基于面片的特征描述符方法所使用。众所周知[248],人类视觉系统在视网膜上以比例和旋转不变的方式响应梯度信息,如 SIFT 和许多其他特征描述方法所示,因此梯度的使用是计算机视觉的首选方法。
  • 梯度方向:一些描述符方法计算梯度方向,而另一些不计算。一些特征描述符和边缘检测方法(包括 Sobel 和 SIFT)使用简单的区域梯度方向方法来提供旋转不变性。
  • 方向向量:有些描述符是有方向的,有些不是。可以通过简单梯度之外的方法来计算方向,例如,SURF 使用对许多梯度方向进行采样的方法来计算整个补片区域的主要梯度方向,作为方向向量。在 RIFF 方法中,计算径向相对方位。在 SIFT 方法中,在主方向的 80%内检测到的任何方向将导致生成额外的兴趣点,因此相同的描述符可以允许多个兴趣点仅在方向上不同。
  • 传感器数据:加速度计或 GPS 信息等数据被添加到描述符中。在 GAFD 方法中,由加速度计计算的重力矢量用于定向。
  • 多重几何:共同存储在描述符中的描述符数据的多重几何变换,例如 RFM2.3 描述符中使用的相同数据的若干不同透视变换;后者包含通过各种几何变换计算的相同面片,以增加缩放、旋转和几何鲁棒性。
  • 多尺度:描述符存储了几个尺度表示的副本,而不是依赖于尺度空间金字塔。在第四章中描述的多分辨率直方图方法是一种在一个尺度范围内近似特征描述的方法,其中尺度使用一个高斯模糊函数范围来近似,并且它们产生的直方图被存储为多尺度描述符。
  • 傅立叶幅值:傅立叶级数的正弦和余弦基函数均可用于描述符中——例如,在描述符的多边形形状族中,如图图 6-29 所示。正弦或余弦的大小本身就是一个有启发性的形状因子,没有相位,如图图 6-6 所示,该图显示了 LBP 通过傅立叶级数产生的功率谱的直方图。这说明了 LBP 直方图功率谱如何提供旋转不变性。与傅立叶级数相关的其他方法可以使用计算的替代方案,例如离散余弦变换(DCT ),其仅使用余弦分量,并且服从于整数计算和硬件加速,如通常为媒体应用所做的那样。
  • 傅立叶相位:相位信息已经被证明对于创建模糊不变特征描述符是有价值的,正如在第六章中讨论的 LPQ 方法中所展示的。
  • 其他基函数:可用于特征描述。由于对函数窗口的更大控制以及将从母小波导出的基函数调整到相关小波族中,小波通常用于代替傅立叶方法。参见第二章讨论小波与其他基函数的比较。
  • 形态形状度量:主要用于多边形形状描述子家族,由形状因子组成,在一些文献中称为图像矩。它们是根据多边形图像区域的总体特征(如面积、周长、质心等)计算的。用于多边形形状描述的视觉流水线和图像预处理可以包括形态学和纹理算子,而不是局部兴趣点和描述符计算。
  • 学习的二进制描述符:通过训练步骤运行基础事实数据来创建,例如在 ORB 和 FREAK 中开发的,以创建一组统计优化的二进制采样点对模式。
  • 字典、码本、来自特征学习方法的词汇:使用各种各样的描述符方法,如简单图像相关补丁或 SIFT 描述符,建立视觉词汇、字典或稀疏码本,作为独特特征的稀疏集合。当组合成一个稀疏集合时,它们代表了在一个应用领域(如汽车识别或人脸识别)的一组基本事实数据中发现的特征。
  • 区域直方图 2D: 用于几种类型的信息,如宁滨梯度方向,如在 CARD、RFM2.3 和 SURF 中;或者用于宁滨线性二进制模式,例如 LBP。直方图梯度信息的 SIFT 方法使用相当大的直方图仓区域,其提供了一些平移不变性,类似于人类视觉系统对视网膜上梯度的 3D 位置的处理[248]。
  • 3D 直方图:用于 SIFT 等方法,将梯度大小和方向一起表示为 3D 直方图。
  • 笛卡尔箱:将局部区域信息宁滨到描述符中的一种常用方法,简单地基于像素在面片中的笛卡尔位置——例如,用直方图表示区域中每个点的像素强度大小。
  • 对数极坐标仓:代替笛卡尔直角排列中的宁滨局部区域特征信息,诸如 GLOH 的一些描述符使用对数极坐标系统来准备直方图宁滨的值,目的是向描述符添加更好的旋转不变性。
  • 区域求和:比如一幅积分图像,一种用来快速求和局部区域像素值的方法,或者 HAAR 特征。区域总和被存储到表示该区域中所有像素的总值的特征中。注意,区域求和对于区域的粗略特征描述可能是好的,但是求和过程消除了精细的局部纹理细节。
  • 区域平均值:一个区域内像素的平均值,也称为箱式滤波器,可以通过卷积运算、缩放积分图像或简单地将数组中的像素值相加来计算。
  • 区域统计:如区域矩,如标准差、方差、最大值或最小值。
  • 二进制模式:诸如二进制值或位的向量——例如,作为在本地二进制描述符族(诸如 LBP、Census 和 ORB)中使用的本地邻域像素值的本地像素对比较计算的结果而存储。
  • DoG (1 比特量化的):如在 FREAK 描述符中所使用的,一组不同大小的 DoG 或带通滤波器特征,在类似于人的视觉系统的视网膜采样模式中的局部二进制区域上获取,成对比较,并量化为直方图向量中的单个比特。
  • DoG(多位):一种使用许多变体实现的带通滤波器,其中将高斯模糊滤波器应用于图像,然后从(a)其自身的移位副本,(b)其自身在另一高斯模糊级别的副本,或(3)其自身在另一图像比例的副本中减去图像,如在 SIFT 描述符方法中。
  • 值的位向量:包含量化为单个位的值序列的位串,如阈值。
  • 3D 表面法线:除 3D 中的模拟 2D 梯度,在 HON4D 方法[198]中使用,以在特征描述符中描述 3D 物体位置的表面。
  • 线段度量:如在 CCH 方法中,用于描述组成物体周长的线段。或者,用作物体的形状因子,在描述符中记录了一组从形心开始延伸到周长的径向线段的长度,可将其输入傅里叶变换以产生功率谱特征,如图图 6-29 所示。
  • 颜色空间信息:一些描述符没有利用颜色信息,在许多情况下,颜色信息可以提供额外的区分和准确性。无论是使用简单的 RGB 通道,如 RGB-D 方法[75,118],还是使用色彩空间转换到更精确的空间,都是非常宝贵的。例如,人脸识别在区分来自不同文化的人脸方面存在问题,并且由于肤色在不同区域有所不同,因此可以测量颜色值并将其添加到描述符中。然而,一些描述符利用颜色信息,例如 S-LBP,其在色度、精确的颜色空间(例如 CIE-Lab)中操作,或者 F-LBP,其计算从中心像素到相邻像素的颜色距离的傅立叶光谱,以及 SIFT 和许多其他颜色变量。
  • 灰度信息:灰度或颜色强度值是几乎所有描述符中的默认光谱。然而,用于从颜色创建灰度的方法,以及用于为分析和测量准备强度的图像预处理,对于视觉流水线至关重要,在第二章中讨论过。

兴趣点

在特征描述中,兴趣点的使用是可选的。一些方法不使用兴趣点,而是在固定的网格上而不是在每个像素上对图像进行采样,例如 Viola Jones 方法使用类似 HAAR 的特征。也可以简单地为每个像素而不仅仅是感兴趣的点创建特征描述符,但是由于对性能的影响是相当大的,所以感兴趣的点通常用于首先找到特征的最佳位置。

在第六章中对几种寻找兴趣点的方法进行了调查和讨论。分类法的兴趣点类别包括:

  • 点、边或角:这些方法通常从定位局部区域最大值和最小值开始;使用的方法包括梯度,局部曲率,哈里斯方法,斑点检测器和边缘检测器。
  • 基于轮廓,周长:一些方法不是在最大值和最小值处开始特征描述,而是在图像中寻找结构,例如轮廓或周长,这主要适用于基于形态学形状的方法。
  • 其他:确定兴趣点位置还有其他可能,比如预测可能的兴趣点或特征位置,或者使用网格或瓦片区域。
  • 无兴趣点:有些方法根本不使用任何兴趣点。

存储格式

存储格式对于内存效率、工程实际系统和设计数据结构来说是一个实际问题。了解存储格式可以在工程和优化过程中为各种编程结构、指令集和内存架构提供指导。

例如,CPU 和 GPGPU 图形处理器通常都提供专用芯片来支持各种存储格式组织,如分散和聚集操作,以及稀疏和密集数据结构支持。了解 GPGPU 的功能可以为设计存储格式提供指导,如第八章中所述。存储格式摘要:

  • 光谱向量:可以是一组直方图,一组颜色值,一组基向量。
  • 位向量:局部二进制模式使用位向量数据类型,有些编程语言包含位向量构造,有些指令集包含位向量处理指令。
  • 多元集合:统计矩或形状因子等一组值。

数据类型

用于特征描述的数据类型对于准确性、内存使用和计算至关重要。但是,值得注意的是,在某些情况下,为了保证准确性,可以更改数据类型。举例来说,将浮点运算转换成定点或整数运算可能更具存储器效率以及功率效率,因为浮点硅 ALU 复合体占据几乎四倍多的裸片空间,因此比整数 ALU 消耗更多的功率。数据类型摘要包括:

  • 浮点:许多应用需要浮点以保证精度。例如,图像的傅立叶变换需要至少 64 位双精度(更大的图像需要更高的精度);目标跟踪等其他应用可能需要 32 位浮点来进行精确的轨迹计算。
  • 整数:像素值通常用 8 位值表示,每像素 16 位是常见的,因为图像传感器提供更好的数据。许多数据结构和数值结果(如积分图像)至少需要 32 位整数。
  • 定点:这是浮点的替代表示,节省了数据空间,可以更高效地在硅片中实现。大多数现代 GPU 支持几种定点格式,也支持一些 CPU。定点格式包括 8 位、16 位和 24 位表示。取决于应用,使用固定点可能足够接近精度。除了定点数据类型,GPU 和一些处理器还提供各种规范化数据类型(参见制造商信息)。

描述符存储器

总描述符内存大小是描述符效率的一部分,计算性能是另一个组成部分。具有较大内存占用、较少不变性属性和繁重计算的描述符是低效的。实际上,我们对内存大小感兴趣。与内存相关的主要属性包括:

  • 固定长度或可变长度:一些描述符允许替代表示。
  • 字节计数:描述符中所有数据的长度。

特征形状

一系列形状用于像素采样模式;在第四章中调查形状,包括以下方法:

  • 矩形块面片:简单的 x,y,dx,dy 范围。
  • 对称多边形区域:可能是八边形,如在责难方法中,或者是圆形区域,如 FREAK 或 DAISY。
  • 不规则分割区域:例如使用形态学方法在分割区域或阈值化周长之后计算的。
  • 体积区域:一些特征利用了类似于体积结构的图像堆叠。如图图 6-12 所示,VLBP 或体积 LBP 和 LBP-TOP 利用了体积数据结构。动态纹理方法和活动识别方法通常使用来自当前帧加上 2 个过去帧的三个相邻片的集合,以时空图像帧历史来组织,类似于体积。
  • 可变形:大部分特征使用刚性形状,比如固定大小的矩形或圆形;然而,一些描述符在设计时考虑了变形,例如比例变形[345,346]和仿射或单应变形[220],以实现更鲁棒的匹配。

特征模式

特征模式是这个分类的主轴,如图 5-3 中的所示,因为它影响内存架构和计算效率。

9781430259299_Fig05-03.jpg

图 5-3 。特征形状。(从左到右)矩形面片、对称多边形区域、不规则分段区域和体积区域

特征形状和图案是相关的。形状指的是边界,图案指的是采样方法。模式包括:

  • 矩形核:有些方法用一个核来定义样本中包含区域中的哪些元素;参见图 5-3 (左图)显示了一个不使用该区域角点像素的内核;参见图 4-10 。
  • 二元比较模式:如 FREAK、ORB、BRISK,将一个区域中的特定像素配对,形成一个复杂的采样模式。
  • DNET 线采样带集合:沿线段点密集采样;参见图 4-8 。
  • 径向线采样模式:从中心点开始的径向线段上的点被密集采样;例如,用于计算多边形区域形状的傅立叶描述符;参见图 6-29 。
  • 周界或轮廓边缘:对形状或区域边缘周围的点进行密集采样。
  • 样本加权模式:如图图 6-17 所示,SIFT 在直方图面元中使用一个圆形加权模式,以减少远离面片中心的点的贡献。D-NETS 方法使用沿线带样本的二进制加权,偏向远离端点的点,忽略靠近端点的点。加权模式可以提供对噪声和遮挡的不变性。

参见第四章关于贴片和形状部分的更多插图。

特征密度

如图 5-1 所示,特征密度是这个分类法的主轴。用于描述符的图像量在该分类法中被称为特征密度。例如,一些描述符旨在使用锚定在兴趣点的局部像素的较小区域,并忽略较大的图像。其他方法使用更大的区域。密度类别包括:

  • 全局:覆盖整个图像,图像中的每个像素。
  • 区域:覆盖图像的相当大的区域,通常在网格上,或在分割的结构或区域周围,不在兴趣点锚定。
  • 稀疏:可以在感兴趣的点,或者在选定点的小区域中进行,例如在简短描述符中的随机点,训练点,例如 FREAK 和 ORB,或者在 RFM2.3 描述符中的稀疏采样网格。

特征搜索方法

在图像中搜索特征的方法对于特征描述符的设计具有重要意义。搜索方法在很大程度上决定了描述符的设计,以及视觉流水线中所需的计算时间。我们在这里列出了几个搜索变体,更详细的描述和图示在第四章中提供。注意,特征描述符可以利用多个搜索标准。功能搜索相关信息总结如下:

  • 由粗到细的图像金字塔:或多尺度搜索,使用原始图像的较粗分辨率副本的金字塔。
  • 尺度空间金字塔:尺度空间金字塔是常规的由粗到细的图像金字塔的变体,其中在每个金字塔尺度图像上计算高斯模糊函数[547]以创建更均匀的搜索空间;参见图 4-17 。
  • 金字塔标度因子:捕捉金字塔标度区间,例如八度音阶或其他标度,例如,ORB 使用约 1.41x 标度。
  • 密集滑动窗口:在图像中的每个像素上进行搜索,通常在以每个像素为中心的滑动矩形区域内。
  • 网格分块搜索:图像被分成固定的网格或分块,因此搜索速度更快,但不如密集方法有区别。例如,参见描述 PHOG 方法的图 6-17 ,该方法在整个图像中以不同的网格分辨率计算描述符。
  • 窗口搜索:将密集搜索限制到特定区域,例如在两个 L/R 帧之间的立体匹配中,对应搜索范围被限制到预期位置。
  • 兴趣点稀疏:使用角点检测器或其他检测器来确定在哪里可以找到有效特征。
  • 预测点稀疏:例如在像 PTAM 这样的跟踪和映射算法中,基于运动或轨迹预测兴趣点的位置,然后在预测点开始特征搜索。
  • 分割区域稀疏:例如,当形态学形状分割方法或阈值分割方法定义一个区域,并且第二次通过该区域寻找特征时。
  • 深度分割区域(Z): 当使用深度相机信息将图像阈值化为前景和背景,并且仅搜索前景区域的特征时。
  • 超像素搜索:类似于图像金字塔方法,但图像的多尺度表示是通过使用超像素整合方法将像素值组合在一起而创建的,如第二章所述。
  • 亚像素搜索:在需要亚像素精度的情况下——例如,对于区域相关性,围绕单个像素进行多次搜索,每次比较都计算亚像素偏移,在某些情况下,在特征匹配之前进行图案的几何变换。
  • 双尺度第一金字塔等级:在 SIFT 尺度-空间金字塔方法中,金字塔的最低等级是从全尺度图像的双 2x 线性插值版本计算的,这具有保留图像金字塔最低等级中的高频信息的效果,并且将稳定关键点的数量增加了大约四倍,这是非常显著的。否则,计算原始图像上的高斯模糊会导致丢弃大部分高频细节。

模式对抽样

对于局部二进制模式,模式对采样设计是创新的关键领域之一。使用诸如使用比较区域阈值的(中心像素<核心像素)的函数来比较点对,然后比较的结果形成二进制描述符向量。请注意,许多局部二进制描述符方法在第四章中进行了讨论和说明,以说明点对采样配置和比较函数的变化。点对采样的视觉分类包括:

  • 中心-边界对:如在 LBP 家族和普查变换中。
  • 随机对分:如在 BRIEF,在 ORB 半随机。
  • 以视网膜中央凹为中心的训练对:如在 FREAK 和 Daisy 中。
  • 训练的点对:许多方法使用真实情况数据来训练点对,以满足客观标准,例如 FREAK 和 ORB。
  • 对称对:如 BRISK,提供对称间隔的长短线段,用于点对比较。

图案区域尺寸

局部模式区域的大小是一个关键的性能因素,即使内存访问可能来自快速寄存器文件和缓存。例如,如果我们执行 3×3 模式区域的卷积,每个内核有 9 次乘法,可能还有一次汇总乘法来缩放结果,每个像素总共有 10 次乘法。对于每次乘法,我们有两次内存读取,一次读取像素,一次读取内核值;我们有十次内存写操作,每次乘法一次。一幅 640x480 的图像有 307200 个像素,假设每像素灰度只有 8 位,那么每帧我们最终得到 3,072,000 次乘法运算、60,720,000 次内存读取和 307200 次写入的结果。更大的内核和更大的图像当然会增加更多的计算量。

有许多方法可以优化性能,我们将在关于视觉流水线工程的第八章中讨论。对于该属性,我们对以下内容感兴趣:

  • 边界框(x 尺寸,y 尺寸):例如,矩形区域、圆形区域或多边形形状区域周围的边界框。

距离函数

计算模式匹配或对应是好的描述符的关键性能标准之一。特征匹配是准确性和性能之间的折衷,关键变量是特征描述符向量的数值类型和大小、距离函数以及特征数据库中的模式和搜索优化的数量。选择一个适合快速匹配的特征描述符是一个好目标。

一般来说,最快的距离函数是二进制族和汉明距离,后者用于局部二进制描述符族。这里列举了距离函数;详见第四章。

欧几里德距离族或笛卡尔距离族

  • 欧几里得距离
  • 平方欧几里德距离
  • 余弦相似性
  • 美国 L1 标准
  • 固态硬盘 L2 标准
  • 相关距离
  • 海灵格距离

网格距离族

  • 曼哈顿距离
  • 棋盘或切比雪夫距离

统计距离族

  • 推土机距离
  • 马哈拉诺比斯距离
  • 布雷柯蒂斯差分
  • 堪培拉距离

二元或布尔距离族

  • L0 范数
  • 汉明距离
  • 雅克卡相似性

特征度量评估

本节从工程和设计的角度,阐述了如何从视觉度量分类中将特征描述符信息概括到实用的特征度量评估框架(FME)中的问题。

image 注意FME 旨在作为一个模板,用于捕获高级信息以进行基本分析。

效率变量、成本和收益

可以用简单的术语来衡量特征描述符的效率,例如计算成本和所使用的内存的好处与以准确性、区分度、鲁棒性和不变性的方式提供的好处的对比。该方法在时间、空间和电力成本方面提供了多少价值?效率指标包括:

  • 成本: 计算、内存、时间、功耗
  • 好处:提供了准确性、健壮性和不变性属性
  • 效率:收益与成本

描述符中包含的数据的有效性各不相同——例如,包含具有很少不变性的描述符的大内存占用量是没有效率的,并且对于少量不变性和准确性的高计算成本也揭示了低效率。我们可以说,有效的特征表示包含最少的字节数和最低的计算成本,提供了最大的区分度、鲁棒性和准确性。局部二进制描述符已经证明了许多鲁棒性属性的最佳效率。

图像重建效率指标

对于特征描述符效率的视觉比较,我们也可以从特征描述符重建图像,然后视觉和统计地分析重建的质量与计算和存储成本。详细的特征描述符可以仅从描述符数据提供原始图像的良好可视化和重建。例如,图 4-15 示出了 HOG 描述符如何使用每 64x128 区域 32780 字节来捕获定向梯度,图 4-16 示出了图像重建,其示出了如何使用每描述符 64 字节来短暂和反常地捕获类似于拉普拉斯或其他边缘滤波器的边缘信息,图 4-17 示出了使用每描述符 128 字节的 SIFT 图像重建。

虽然我们不包括 FME 中的图像重建效率,但该主题在第四章的歧视讨论中有所涉及。

示例特征度量评估

这里有几个例子,展示了如何使用 Vision Metrics 分类法和 FME 来收集摘要描述符信息。

筛选示例

我们使用 SIFT 作为示例基线,因为 SIFT 得到了广泛的认可和精心的设计。

视觉计量分类学 FME

| | *名称:* | *筛选* | | | *功能系列:* | *光谱* | | | *光谱维度:* | *多元* | | | *光谱:* | *梯度大小和方向,狗骨尺度空间最大值* | | | *存储格式:* | *方向和位置,梯度方向直方图* | | | *数据类型:* | *浮点数,整数* | | | *描述符存储器:* | *描述符直方图的 128 字节* | | | *特征形状:* | *矩形区域* | | | *搜索方法:* | *2D 密集的滑动窗口& 3D 3x3x3 影像金字塔* | | | *特征密度:* | *本地* | | | *特征模式:* | *长方形和棱锥立方体* | | | *模式对采样:* | *-* | | | *图案区域大小:* | *16x16* | | | *距离功能:* | *欧几里德距离* |

一般鲁棒性属性

| | *总计:* | *5(缩放、照明、旋转、仿射变换、噪声)* |

LBP 示例

LBP 是一个非常简单的特征检测器,有许多变化,用于纹理分析和特征描述。这里我们用最基本的 3x3 LBP 形式作为例子。

视觉计量分类学 FME

| | *名称:* | *LBP* | | | *功能系列:* | *本地二进制* | | | *光谱维度:* | *单变量* | | | *光谱:* | *像素对与中心像素进行比较* | | | *存储格式:* | *二进制位向量* | | | *数据类型:* | *整数* | | | *描述符存储器:* | *1 字节* | | | *特征形状:* | *以中心像素为中心的正方形* | | | *搜索方法:* | *密集滑动窗口* | | | *特征密度:* | *本地* | | | *特征模式:* | *矩形内核* | | | *模式对采样:* | *中心边界对* | | | *图案区域大小:* | *3x3 或更多* | | | *距离功能:* | *海明距离* |

一般鲁棒性属性

| | *总计::* | *3(使用 RILBP 的亮度、对比度和旋转)* |

形状因素示例

此示例使用二进制阈值多边形区域。对于这个假设的例子,预处理步骤从自适应二进制阈值处理和形态学形状定义操作开始,测量步骤从基于像素邻域的周界开始,以定义周界边缘,接着从周界点进行质心计算,接着确定从质心开始到达周界的 36 条径向线段。然后分析每个线段以找到形状因子,包括傅立叶描述符的长/短轴。测量假设正在测量单个二进制对象,而真实世界的图像可能包含许多对象。

我们还假设存储器占用空间如下:从质心开始以 10 度增量在 360 度周围获取的 36 个角度样本,36 个 FFT 频谱幅度的浮点,36 个线段长度数组的整数,4 个长/短轴方向和长度的整数,4 个边界框( x,y,dx,dy )的整数,1 个周长的整数,2 个质心坐标的整数,总共 364 + 362 + 42 + 42 + 12 * 22 = 238

视觉计量分类学 FME

| | *名称:* | *形状因子* | | | *功能系列:* | *多边形形状* | | | *光谱维度:* | *多元* | | | *光谱:* | *周长跟随、面积、周长、质心、其他图像矩* | | | *存储格式:* | *复杂的数据结构* | | | *数据类型:* | *浮点数,整数* | | | *描述符存储器:* | *变量,可能有几百个字节* | | | *特征形状:* | *多边形形状,矩形包围盒区域* | | | *搜索方法:* | *密集,递归* | | | *特征密度:* | *地区* | | | *特征模式:* | *周界轮廓或边缘* | | | *模式对采样:* | *-* | | | *图案区域大小:* | *整个图像* | | | *距离功能:* | *多种方法,多种比较* |

一般鲁棒性属性

| | *总计:* | *8 或更多(缩放、旋转、遮挡、形状、仿射、反射、噪声、照明)* |

摘要

本章提出了一个分类法,如图 5-1 所示,将特征描述维度描述为形状、模式和光谱。这种分类法用于将特征描述方法分为多边形形状描述符、局部二元描述符和基空间描述符。这种分类法贯穿全书。此外,为了总结高级特征描述符设计属性,如光谱类型、描述符像素区域大小、距离函数和搜索方法,提出了通用视觉度量分类法。此外,基于不变性和鲁棒性标准属性,包括光照、比例、旋转和透视,开发了通用鲁棒性分类来量化特征描述符的良好性,一次一个属性。由于特征描述符方法被设计成仅处理一些不变性和鲁棒性属性,所以当评估给定应用的特征描述符时,应该单独考虑每个属性。此外,稳健性属性可应用于真实情况数据集的设计,如第七章所述。最后,视觉度量分类和鲁棒性分类被组合以形成特征度量评估(FME)表,从而以概要形式记录特征描述符属性。FME 的一个简单子集用于回顾在第六章中调查的几种特征描述符方法的属性。


1

2 http://homepages.inf.ed.ac.uk/rbf/CVonline/CVentry.htm

六、兴趣点检测器和特征描述符调查

“这些都是谁做的?”

——杰克·斯派洛,加勒比海盗

计算机视觉的许多算法依赖于定位每个图像中的兴趣点或关键点,并根据兴趣点周围的像素区域计算特征描述。这与相关、 等方法形成对比,在这些方法中,较大的矩形图案以像素间隔在图像上步进,并在每个位置测量相关性。兴趣点是锚点、,通常为描述符提供比例、旋转和光照不变性属性;描述符增加了更多细节和不变性属性。兴趣点组和描述符一起描述实际的对象。

然而,在特征描述中有许多方法和变化。一些方法使用不锚定在兴趣点的特征,例如在图像中较大的分割多边形结构或区域上计算的多边形形状描述符。其他方法仅使用兴趣点,根本不使用特征描述符。有些方法只使用特征描述符,在图像的规则网格上计算,根本没有兴趣点。

文献中的术语各不相同在一些讨论中,兴趣点可能被称为关键点。用来寻找兴趣点的算法可以称为检测器,用来描述特征的算法可以称为描述符。我们在这项工作中互换使用这两个术语。关键点可以被认为是由(1)兴趣点,(2)角点,(3)边缘或轮廓,以及(4)诸如斑点的较大特征或区域组成的集合;参见图 6-1 。本章概述了设计局部兴趣点检测器和特征描述符的各种方法。

9781430259299_Fig06-01.jpg

图 6-1 。关键点的类型,包括角点和兴趣点。(从左到右)台阶、屋顶、拐角、线或边缘、山脊或等高线、最大值区域

兴趣点调谐

对于给定的应用,什么是好的关键点?哪些最有用?哪些应该忽略?调整探测器并不简单。每个探测器都有不同的参数来调整给定图像的最佳结果,并且每个图像在照明、对比度和图像预处理方面都有不同的挑战。此外,每个检测器都被设计用于不同类别的兴趣点,并且必须相应地调整以过滤结果,为特定特征描述符筛选出一组有用的良好候选。每个特征检测器将与某些描述符一起最佳工作,参见附录 a。

因此,关键点被进一步过滤以对所选择的特征描述符有用。在某些情况下,关键点不适合于产生有用的特征描述符,即使该关键点具有高分和高响应。例如,如果在关键点处计算的特征描述符产生太弱的描述符分数,则关键点和相应的描述符都应该被拒绝。OpenCV 提供了几种使用检测器的新方法,使用户能够在一个通用框架中尝试不同的检测器和描述符,并自动调整参数进行调整和剔除,如下所示:

  • DynamicAdaptedFeatureDetector。该类将使用 adjusterAdapter() 调整受支持的检测器,以仅保留有限数量的特征,并多次迭代检测器参数和重新检测特征,以试图找到最佳参数,仅保留所需数量的最佳特征。一些 OpenCV 检测器提供了一个 adjusterAdapter() ,一些没有;API 允许创建调整器。
  • AdjusterAdapter。这个类实现了剔除和保留兴趣点的标准。标准可包括 KNN 最近邻匹配、检测器响应或强度、到最近的其他检测到的点的半径距离、局部区域内的关键点的数量、以及可被包括用于剔除不能为其计算良好描述符的关键点的其他度量。
  • 金字塔适应特征检测器。该类可用于调整不使用比例空间金字塔的检测器,适配器将创建高斯金字塔并检测金字塔上的特征。
  • GridAdaptedFeatureDetector。该类将图像划分为网格,并调整检测器以找到每个网格单元内的最佳特征。

兴趣点概念

兴趣点可以由各种类型的角、边和极大值形状组成,如图图 6-1 所示。一般来说,一个好的兴趣点必须容易找到,并且理想情况下计算速度很快;希望兴趣点处于计算特征描述符的良好位置。因此,兴趣点是可以围绕其描述特征的限定词或关键点

目前使用的兴趣点方法背后有各种概念,因为这是一个活跃的研究领域。Mikolajczyk 等人[153]对兴趣点检测器进行了最好的分析,其中包括仿射协变兴趣点检测器的比较框架和分类,其中 协变指的是兴趣区域的椭圆形状,这是一种仿射可变形表示。比例不变检测器在圆形区域中被很好地表示。最大值区域和斑点检测器可以采用不规则的形状。参见附录 A 中几个检测器对合成兴趣点和角字母的响应。

检测器一般使用最大值和最小值点,比如梯度峰值和拐角;然而,边缘、脊和轮廓也被用作关键点,如图图 6-2 所示。对于所有应用,没有更好的兴趣点检测方法。Tuytelaars 和 Van Gool [529]提供的简单分类法列出了基于边缘的区域方法(EBR)、最大值或基于强度的区域方法(IBR)、和分割方法 s,以找到可能是具有高熵的斑点或特征的基于形状的区域(SBR) 。

9781430259299_Fig06-02.jpg

图 6-2 。候选边缘兴趣点过滤器。(从左到右)拉普拉斯算子、导数滤波器和梯度滤波器

角通常优于边或孤立的最大值点,因为角是一种结构,可用于计算特征的角度方向。兴趣点是根据颜色分量和灰度亮度计算的。许多兴趣点方法将首先在图像上应用某种高斯滤波器,然后执行梯度算子。首先使用高斯滤波器的想法是减少图像中的噪声,否则噪声会被梯度算子放大。

每个检测器定位对诸如旋转、缩放、透视、遮挡和照明等属性具有不同程度不变性的特征。关于根据标准化数据集的各种鲁棒性和不变性标准测量的兴趣点检测方法的质量和性能的评估,请参见 Mikolajczyk 和 Schmidt [144]以及 Gauglitz 等人[145]。兴趣点检测的一个关键挑战是尺度不变性,因为兴趣点在某些情况下会随着尺度发生显著变化。Lindberg [212]广泛研究了与规模无关的兴趣点方法。

仿射不变量兴趣点已经被 Mikolajcyk 和 Schmid [107,141,144,153,306,311]详细研究过。此外,Mikolajcyk 和 Schmid [519]开发了哈里斯检测器的仿射不变版本。如[541]所示,将几种兴趣点检测方法结合起来形成混合方法通常是有用的,例如,使用 Harris 或 Hessian 来定位合适的最大值区域,然后使用 Laplacian 来选择最佳尺度属性。变化是常见的,基于 Harris 和 Hessian 的检测器可以使用尺度空间方法,而局部二元检测器方法不使用尺度空间。

许多兴趣点方法背后的一些基本概念来自线性代数领域,其中像素的局部区域被视为矩阵。其他概念来自数学分析的其他领域。一些对定位兴趣点有用的关键数学公式包括:

  • Gradient Magnitude. This is the first derivative of the pixels in the local interest region, and assumes a direction. This is an unsigned positive number.

    image

  • Gradient Direction. This is the angle or direction of the largest gradient angle from pixels in the local region in the range +π to -π.

    image

  • Laplacian.This is the second derivative and can be computed directionally using any of three terms:

    image

    image

    image

    然而,拉普拉斯算子忽略第三项,并计算平均方向的有符号值。

    image

  • 黑森矩阵或黑森。 包含描述曲面曲率的二阶偏导数的方阵。Hessian 具有几个有趣的特性,可用于本节讨论的兴趣点检测方法。

  • 最大的粗麻布。与拉普拉斯算子一样,这是基于二阶导数的,但是 Hessian 算子使用二阶导数的所有三项来计算二阶导数作为有符号值最大的方向。

  • 最小的粗麻布。这是基于二阶导数,计算为一个有符号数,并且可能是一个有用的度量,作为最大和最小 Hessian 之间的比率。

  • 黑森取向,最大值和最小值。这是+π到-π范围内最大二阶导数的方向,是一个有符号的值,它对应的是一个没有方向的方向。最小的方向可以通过从最大值中加上或减去π/2 来计算。

  • 黑森行列式,黑森迹,高斯拉普拉斯。这三个名字都用来描述一个矩阵的迹特征,它可以通过绝对值揭示几何尺度信息,通过值的符号揭示方向。矩阵的特征值可以用行列式来求。

  • 特征值,特征向量,特征空间。特征属性对于理解局部像素区域矩阵中的矢量方向很重要。当一个矩阵作用于一个向量,向量方向保持不变,而符号或方向简单颠倒时,向量被认为是一个特征向量,矩阵因子被认为是特征值。因此,特征空间是空间中具有相同特征值的所有特征向量。特征属性对于兴趣点检测、定向和特征检测很有价值。例如,Turk 和 Petland [158]使用通过 PCA 减少到更小的向量集的特征向量进行人脸识别,在他们称为特征脸的方法中。

兴趣点法调查

现在,我们将简要介绍一些常见兴趣点检测器方法的算法和计算方法,包括:

  • 高斯拉普拉斯算子
  • 莫拉瓦茨角探测器
  • 哈里斯和斯蒂芬斯角点检测
  • 史和托马西角点检测器(对 Harris 方法的改进)
  • 高斯人的差异(狗;对数的近似值)
  • 哈里斯方法,哈里斯–海森–拉普拉斯,哈里斯–海森–仿射
  • 黑森行列式
  • 显著区域
  • 苏珊(女子名)
  • 快点,快点,阿加斯特
  • 局部曲率
  • 形态学兴趣点
  • MSER(在多边形形状描述符一节中讨论)
  • *注意:许多特征描述符,如 SIFT、SURF、BRISK 等,都提供了自己的检测器方法和描述符方法,参见附录 A 。

拉普拉斯算子和高斯拉普拉斯算子

图像处理中使用的拉普拉斯算子是一种在像素区域中寻找导数或最大变化率的方法。通常,拉普拉斯算子是使用加起来为零的标准卷积核来近似的,例如:

9781430259299_unFig06-01.jpg

高斯(LOG) 的拉普拉斯算子简单地是在已经使用高斯平滑内核处理以聚焦边缘能量的区域上执行的拉普拉斯算子;参见 Gun [155]。

莫拉瓦茨角探测器

Moravic 角点检测算法是一种早期的角点检测方法,通过关联每个相邻像素周围的重叠碎片来测试图像中的每个像素。在任何方向上的相关性的强度揭示了关于该点的信息:当在所有方向上都有变化时发现拐角,当沿着边缘方向没有变化时发现边缘。平坦区域在任何方向都不会产生变化。使用两个重叠补片之间的 SSD 来计算相关性差异。相似性通过 SSD 中接近零的差异来衡量。这种方法是计算密集型;见莫拉瓦茨[330]。

哈里斯方法、哈里斯-斯蒂芬斯、希-托马西和黑森型检测器

Harris 或 Harris-Stephens 角点检测器 系列【156,365】提供了对 Moravic 方法的改进。Harris 方法的目标是使用局部方向导数的协方差矩阵找到特征方向的最快和最低变化的方向。将方向导数值与得分因子进行比较,以识别哪些特征是拐角,哪些是边缘,哪些可能是噪声。根据算法的公式,哈里斯方法可以提供高旋转不变性、有限强度不变性,并且在算法的一些公式中,使用尺度空间提供尺度不变性,例如哈里斯-拉普拉斯方法【519】【212】。许多哈里斯家族算法可以以计算高效的方式实现。

注意,拐角具有不明确的梯度,因为两个边缘会聚在拐角处,但是在拐角附近,可以用相对于 xy— 的两个不同值来检测梯度,这是哈里斯边角侦测背后的基本思想。

哈里斯方法的变体包括:

  • Shi、Tomasi 和 Kanade 的角点检测器 [157]是对 Harris 方法的优化,仅使用最小特征值进行鉴别,从而大大简化了计算。
  • Hessian (Hessian-Affine)角点检测器[153]被设计为仿射不变的,它使用基本的 Harris 角点检测方法,但是使用一些迭代选择标准和 Hessian 矩阵将来自金字塔中几个尺度的兴趣点组合起来。
  • 基本哈里斯算子还存在许多其他变体,例如哈里斯–海森–拉普拉斯【331】,其使用比例选择方法提供改进的比例不变性,以及哈里斯–海森–仿射方法【306,153】。

海森矩阵检测器和海森-拉普拉斯

海森矩阵法,也称为海森行列式(DoH) 法,用于流行的 SURF 算法【160】。它从多尺度图像集中检测感兴趣的对象,其中 Hessian 矩阵的行列式处于最大值,并且使用高斯的二阶偏导数的卷积来计算 Hessian 矩阵算子以产生梯度最大值。

DoH 方法使用积分图像来非常快速地计算高斯偏导数。因此,计算 Hessian 矩阵的性能非常好,并且精度优于许多方法。相关的 Hessian-Laplace 方法【331,306】也对局部极值进行操作,使用多尺度 Hessian 的行列式进行空间定位,使用多尺度 Laplacian 进行尺度定位。

高斯差异

高斯差(DoG) 是高斯拉普拉斯的近似,但是使用两个平滑或高斯滤波图像的差来检测局部极值特征,以更简单和更快速的方式来计算。高斯平滑的思想是去除在给定比例下不相关的噪声伪像,否则噪声伪像会被放大并导致错误的狗特征。在流行的 SIFT 方法[161]中使用了狗的特征,如后面的图 6-15 所示,采用高斯滤波图像的简单差分来识别极大值区域。

显著区域

显著区域【162,163】基于这样一个概念:与周围区域相比,一定范围内的兴趣点应表现出“不可预测”或“令人惊讶”的局部属性或熵。该方法如下进行:

  1. 诸如强度或颜色的像素属性的香农熵 E 是在尺度空间上计算的,其中香农熵被用作不可预测性的度量。
  2. 熵值位于具有最大值或峰值的尺度空间上m。在这个阶段,也确定了最佳尺度。
  3. 为每个尺度内的每个峰值处的幅度增量计算概率密度函数(PDF) ,其中使用从距峰值期望半径的圆形窗口取得的像素值的直方图来计算 PDF。
  4. 显著性是每个峰值的 EM 的乘积,也与尺度有关。因此最终的检测器是显著的并且对缩放是鲁棒的。

苏珊,特拉科维奇和海德利

SUSAN 方法【164,165】依赖于基于相似亮度的局部区域分割图像特征,这产生了双峰值特征。不使用噪声过滤和梯度。如图 6-3 中的所示,该方法使用一个中心细胞核像素值作为比较参考,与给定半径区域内的相邻像素进行比较,产生一组具有相似亮度的像素,称为单值段同化细胞核(USAN)。

9781430259299_Fig06-03.jpg

图 6-3 。计算兴趣点的苏珊方法。图像的黑色区域是一个与 USAN 的 A、B 和 C 相交的矩形。USAN A 将被标记为边,USAN B 将被标记为角,而 USAN C 既不是边也不是角

每个 USAN 包含关于局部区域中图像的结构信息,并且可以计算每个 USAN 的大小、质心和二阶矩。SUSAN 方法可用于边缘和角点检测。拐角由圆形区域中与中心像素相似的像素比率决定:25%左右的低比率表示拐角,50%左右的高比率表示边缘。苏珊对噪音非常敏感。

Trajkovic 和 Hedly 方法【214】类似于 SUSAN,并且在 USAN 区域中的点、边缘点和角点之间进行区分。

SUSAN 对于噪声抑制也很有用,在第二章中讨论的双边滤波器【302】与 SUSAN 密切相关。苏珊使用相当大的圆形窗户;一些实现使用 37 像素半径的窗口。FAST [138]探测器也类似于 SUSAN,但是使用更小的 7×7 或 9×9 窗口,并且只使用区域中的部分像素而不是全部像素;FAST 产生一个本地二进制描述符。

快,快,吓呆了

快速方法【138】源自 SUSAN 关于双模态分割目标的方法。然而,FAST 依靠圆形图案中的一组相连像素来确定拐角。在可能的 16 个区域中,连接区域的大小通常是 9 或 10;可以选择任意一个数字,称为 FAST9 和 FAST10。众所周知,FAST 计算效率高,匹配速度快;准确度也相当不错。FAST 可以被认为是局部二进制模式 LBP 的相对物。

FAST 不是尺度空间检测器,因此,与 SIFT 中使用的尺度空间方法相比,它可以在给定尺度下产生更多的边缘检测。

如图 6-4 所示,FAST 使用二进制比较,将圆形图案中的每个像素与中心像素进行比较,使用阈值来确定像素是否小于或大于中心像素。产生的描述符按照从 0 到 15 的顺序存储为连续的位向量。此外,由于像素比较模式的循环性质,可以快速翻新并以旋转不变表示存储位向量,如本章稍后讨论的 RILBP 描述符所示;参见图 6-11 。

9781430259299_Fig06-04.jpg

图 6-4 。具有 16 元件圆形采样模式网格的快速检测器。注意,网格中的每个像素都与中心像素进行比较,以产生二进制值,并且每个二进制值都存储在一个位向量中

局部曲率方法

局部曲率方法【208–212】是早期检测角点的方法之一,一些局部曲率方法是第一个被认为在尺度变化下跟踪角点可靠且准确的方法【210】。局部曲率检测梯度幅度和局部表面曲率都很高的点。采用的一种方法是差分方法,在尺度空间上一起计算梯度幅度和水平曲线曲率的乘积,然后选择尺度和空间中的最大值和最小值绝对值。这里显示了该方法的一个公式。

image

根据所使用的曲率方程,可以采用基本算法的各种公式。为了改善尺度不变性和噪声敏感性,可以使用尺度空间上的方程的归一化公式来修改该方法,如下所示:

image

其中

image

在较大的比例下,可以检测到不太尖锐但更圆的角点,而在较低的比例下或在单位比例下,可以检测到较小区域上更尖锐的角点。Wang 和 Brady 方法 [213]也使用 2D 表面的局部曲率计算兴趣点,寻找表面曲率快速变化的拐点。

形态学兴趣区域

可以从形态学操作的流水线中确定兴趣点,例如阈值处理,然后是组合或腐蚀和膨胀,以平滑、细化、增长和收缩像素组。如果对于给定的应用正确地完成,这样的形态特征可以是比例和旋转不变的。注意,单纯的形态学运算是不够的;例如,不受约束的侵蚀左侧将缩小区域,直到它们消失。因此,必须将智能添加到形态学管线中,以控制最终的区域大小和形状。对于多边形形状描述符,形态学兴趣点定义了该特征,并且在该特征上计算了各种图像矩,如第三章中的以及本章后面关于多边形形状描述符的章节中所述。

形态学操作可用于在二值、灰度或彩色通道图像上创建感兴趣的区域。为了准备用于形态学的灰度或颜色通道图像,通常使用某种预处理,例如像素重新映射、LUT 变换或直方图均衡化。(这些方法在第二章的中讨论过。)对于二值图像和二值形态学方法,二值阈值化是关键的预处理步骤。已经设计了许多二进制阈值方法,从简单的全局阈值到基于统计和结构核的局部方法。

注意,形态学感兴趣区域方法类似于最大稳定极值区域(MSER) 特征描述符方法,这将在后面的多边形形状描述符部分中讨论,因为这两种方法都在最大值或最小值处寻找连通的像素组。然而,MSER 不使用形态学运算符。

在图 6-5 中显示了一些感兴趣区域检测的形态学和相关操作序列的例子,还可以设计出更多的例子。

9781430259299_Fig06-05.jpg

图 6-5 。寻找感兴趣区域的形态学方法。(从左到右)原始图像、使用 Chan Vese 方法的二进制阈值化和分段图像、骨架变换、修剪骨架变换和距离变换图像。注意,二进制阈值处理需要相当多的工作来为给定的应用正确地设置参数

特征描述符调查

本节提供了关于一些代表性特征描述符方法的调查和观察,无意直接比较描述符。在实践中,特征描述符方法经常被修改和定制。本次调查的目标是检查来自分类的每个特征描述符家族的一系列特征描述符方法,该分类在第五章中介绍:

  • 局部二进制描述符
  • 光谱描述符
  • 基础空间描述符
  • 多边形形状描述符
  • 3D、4D 和体积描述符

对于关键特征描述符方法,我们在此提供一个总结分析:

  • 通用视觉分类法和 FME: 涵盖特征属性,包括光谱、形状和模式、单变量或多变量、计算复杂性标准、数据类型、记忆标准、匹配方法、鲁棒性属性和准确性。
  • 一般鲁棒性属性:覆盖光照、比例、透视等多种不变性属性。

这里没有在特征描述符之间进行直接的比较,但是提供了大量的参考文献,用于详细的比较和每种方法的性能信息。

局部二进制描述符

这一族描述符将特征表示为二进制位向量。为了计算特征,比较图像像素点对,并将结果作为二进制值存储在向量中。局部二进制描述符计算效率高,存储效率高,使用汉明距离匹配也效率高。一般来说,与其他方法相比,局部二进制模式方法实现了非常好的准确性和鲁棒性。

多种局部采样模式与局部二进制描述符一起用于设置成对点比较;关于局部二进制采样模式的讨论,参见第四章中关于局部二进制描述符点对模式 的章节。我们通过分析本地二进制模式(LBP) 和一些 LBP 变体来开始本地二进制描述符的这一部分,因为 LBP 本身就是一个强大的度量,并且是众所周知的。

局部二进制模式

Ojala 等人[173]于 1994 年开发了局部二元模式(LBP),作为一种编码模式和对比度以定义纹理的新方法[169,170–173]。LBP 可以用作图像处理算子。LBP 使用围绕每个像素的局部纹理邻域的一组直方图来创建描述符或纹理模型。在这种情况下,局部纹理是特征描述符。

LBP 指标简单而强大;参见图 6-6 。我们涵盖了 LBPs 的一些细节,因为这种强大的纹理度量作为特征描述符有很多应用。此外,数百名研究人员在理论基础领域对 LBP 文献[173]进行了补充,归纳为 2D 和 3D,用作人脸检测的描述符,还应用于时空应用,如运动分析。LBP 的研究在这个时候仍然相当活跃。此外,LBP 被用作图像处理算子,并且已经被用作 SIFT 中的特征描述符改进,具有极好的结果,如本章所述。

9781430259299_Fig06-06.jpg

图 6-6 。(上图)图像的局部二进制模式表示,其中 LBP 用作图像处理算子,以及累积 LBP 特征的相应直方图。(底部)使用 LBP 纹理度量的分割结果。(图片由施普林格出版社提供,摘自 Matti Pietikä inen 和 Janne Heikkilä著《使用局部二进制模式的计算机视觉》[173])

在其最简单的实施例中,LBP 的目标是为像素创建二进制编码的邻域描述符。它通过使用>运算符将每个像素与其邻居进行比较,并将比较结果 (1,0) 编码成一个二进制数,如后面的图 6-8 所示。来自较大图像区域的 LPB 直方图甚至可以用作信号,并传递到 1D FFT 中以创建特征描述符。LBP 直方图的傅立叶频谱是旋转不变的;参见图 6-6 。然后可以将 FFT 频谱连接到 LBP 直方图上,形成多元描述符

如图图 6-6 所示,LBP 被用作图像处理算子、区域分割方法和直方图特征描述符。LBP 有许多应用。可以使用各种尺寸的成形核在各种尺寸和形状上计算 LBP。 一个简单的 3x3 邻域提供了局部特征的基本覆盖,同时也使用了更宽的区域和内核形状。

假设选择 3x3 LBP 内核模式,这意味着对于 256 格直方图,将有 8 个像素比较和多达 2 个 8 个结果组合。然而,已经证明[18]基于均匀模式减少 8 位 256 仓直方图以仅使用 56 LBP 仓是最佳数量。选择 56 个二进制或统一模式来表示仅两个围绕圆的连续 LBP 模式,该圆由两个相连的连续段组成,而不是所有 256 个可能的模式组合[173,15]。相同的统一模式逻辑适用于尺寸大于 8 位的 LBP。因此,统一模式提供了直方图空间节省和特征比较空间优化,因为需要匹配的特征更少(56 个而不是全部 256 个)。

LPB 特征识别可以遵循图 6-7 中所示的步骤。

9781430259299_Fig06-07.jpg

图 6-7 。用于特征检测的 LBP 特征流。(图片由英特尔出版社授权使用,来自构建智能系统)

LBP 是通过给局部邻域中的每个像素分配一个二进制加权值,并将像素比较结果作为二进制值相加以创建一个复合 LBP 值来计算的。LBP 包含以紧凑二进制模式编码的区域信息,如图 6-8 所示,因此 LBP 是一个二进制编码的邻域纹理描述符。

9781430259299_Fig06-08.jpg

图 6-8 。分配的 LBP 加权值。(图片由英特尔出版社授权使用,来自构建智能系统)

假设使用 3×3 的邻域来描述 LBP 模式,可以将 3×3 的矩形区域与圆形区域进行比较,建议以 45 度的增量进行 360 度定向,如图 6-9 中的所示。

9781430259299_Fig06-09.jpg

图 6-9 。LBP 方向性的概念。(图片由英特尔出版社授权使用,来自构建智能系统)

计算 3x3 LBP 的步骤如图 6-10 所示。

9781430259299_Fig06-10.jpg

图 6-10 。LBP 邻域比较。(图片由英特尔出版社授权使用,来自构建智能系统)

邻域比较

根据允许选择用于比较的邻居的形成内核,将每个像素与其邻居进行比较。在图 6-10 中,所有的像素都用在了成形内核中(全 1)。如果邻居是中心像素的>,则二进制模式为 1,否则为 0。

直方图构成

图像区域上的每个 LBP 描述符被记录在直方图中,以描述累积纹理特征。统一的 LBP 直方图将有 56 个箱,因为只有单连接区域被编入直方图。

可选标准化

使用二的幂的二进制抽取或一些类似的算法,例如 256 image 32,可以将最终直方图减少到更小数量的仓。此外,可以通过对直方图所用的相邻面元的范围进行阈值处理来减小直方图的大小,例如,如果面元 1 至 64 中很少或没有信息被面元化,则忽略面元 1 至 64。

描述符串联

在重叠区域上获得的多个 LBP 可以连接在一起成为更大的直方图特征描述符,以提供更好的区分。

LBP 汇总分类法

光谱:本地双星

特征形状:方形

特征模式:像素区域与中心像素比较

特征密度:每个像素的局部 3×3

搜索方法:滑动窗口

距离函数:汉明距离

鲁棒性:3(亮度、对比度,RILBP 的旋转)

旋转不变 LBP

为了实现旋转不变性,通过局部 LBP 的循环逐位旋转来计算旋转不变 LBP (RILBP) [173],以找到最小二进制值。最小值 LBP 被用作旋转不变签名,并被记录在直方图仓中。RILBP 的计算效率非常高。

为了说明该方法,图 6-11 显示了三个连续 LBP 位的模式;为了使该描述符旋转不变,该值被左移,直到达到最小值。

9781430259299_Fig06-11.jpg

图 6-11 。通过使用二进制值的循环移位来寻找最小值来计算最小 LBP 的方法。LBP 描述符是旋转不变的。(图片由英特尔出版社授权使用,来自构建智能系统)

请注意,许多研究人员[171,172]正在扩展用于 LBP 计算的方法,以使用局部导数、局部中值或平均值、三元或五元比较函数以及许多其他方法,而不是最初提出的简单二元比较函数。

使用 3D LBPs 的动态纹理度量

动态纹理是当它们从一帧移动到另一帧时变形和改变的视觉特征;示例包括波浪、云、风、烟、树叶和波纹。这里讨论用于跟踪这种动态纹理的基本 LBP 的两个扩展:VLBP 和 LBP-TOP。

LBP(vlbp)卷

为了创建 VLBP [175]描述符,首先通过将至少三个连续的视频帧堆叠在一起成为体积 3D 数据集来创建图像体积。接下来,以所选择的兴趣点为中心,取三个 LBP,从体积中的每个平行平面取一个 LBP,形成概要体积 LBP 或 VLBP,并且将每个正交 LBP 的直方图连接成单个动态描述符向量 VLBP。然后可以逐帧跟踪 VLPB,并重新计算 VLPB 以说明逐帧纹理的动态变化。参见图 6-12 。

9781430259299_Fig06-12.jpg

图 6-12 。(上)从平行平面计算 LBP 的 VLBP 方法[175]。(底部)LBP-从正交平面计算 LBP 的顶部方法[176]。(图片由英特尔出版社授权使用,来自构建智能系统)

LPB 顶部〔??〕

LBP-TOP [176]的创建类似于 VLBP,除了不是从平行平面计算三个单独的 LBP,而是从与兴趣点相交的体积 (x,y,z) 中的正交平面计算,如图图 6-12 所示。3D 复合描述符与 VLBP 大小相同,包含相当于三个平面的数据。每个 LBP 平面的直方图也像 VLBP 一样被连接用于 LBP-TOP。

其他 LBP 变体

如表 6-1 所示,LBP【173】有多种变体。注意,LBP 已经被成功地用作 SIFT、SURF 的替代,并且还被用作纹理度量。

表 6-1 。LBP 变体(来自参考文献[173])

| ULBP(统一 LBP)仅使用 56 个统一的箱,而不是使用 8 位像素可能的全部 256 个箱来创建直方图。统一模式由相连真值的连续段组成。 |
| RLBP(鲁棒 LBP)增加了+比例因子,以消除噪声引起的转换(p1 - p2 +比例) |
| CS-LBP 圆对称,向量数量是 LBP 的一半,相对像素对与 w/中心像素的比较,有助于减少 LBP 面元计数 |
| 高频傅立叶频谱描述符+ LBP |
| MLBP 中值 LBP 使用区域中值代替中心像素值进行比较 |
| M-LBP 多尺度 LBP 组合多个半径 LBP 级联 |
| 多尺度块 LBP;比较小块中的平均像素值 |
| SEMB-LBP:统计有效的 MB-LBP (SEMB-LBP)使用分布中的百分比,而不是 LBP 中 0-1 和 1-0 转换的数量,并重新定义了标准 LBP 中的统一模式。使用温和的 ADA 增强在人脸识别中有效使用[549] |
| 相邻视频帧上或体积内的体积 LBP 将直方图连接在一起以形成更长的向量 |
| LGBP(局部 Gabor 二进制模式)在特征上计算大约 40 个 Gabor 滤波器,LBP 被提取并连接以形成在更多尺度和方向上不变的长特征向量 |
| LEP 局部边缘模式:标准 LBP 之前的边缘增强(Sobel) |
| EBP 椭圆二进制模式标准 LBP,但在椭圆区域而不是圆形区域 |
| EQP 椭圆五进制模式- LBP 从二进制(2)级分辨率扩展到五进制(5)级分辨率(-2,-1,0,-1,2) |
| LTP - LBP 扩展到三进制范围,以处理接近常数的区域(-1,0,1) |
| LLBP 局部线条二元模式-计算线条模式(十字形)上的 LBP,然后使用每个 X/Y 维度的平方的 SQRT 计算幅度度量 |
| TPL BP-[X5]一起计算三个 LBP:中心像素的基本 LBP,加上相邻像素周围的两个 LBP,因此总的描述符是一组重叠的 LBP, |
| FP LBP-[X5]四个 LBP 一起计算:中心像素的基本 LBP,加上相邻像素周围的两个 LBP,因此总描述符是一组重叠的 LBP,xpl BP– |
| *注:TPLBP 和 FPLBP 方法可以扩展到特征空间的 3,4,n 维。大矢量。 |
| TBP 三元(3)二进制模式,类似于 LBP,但是使用三级编码(1,0,-1)来有效地处理等强度或接近等强度的区域,使用两个二进制模式(一个用于+和一个用于-)连接在一起 |
| ETLP -拉长的三元局部模式(椭圆+三元[5]水平 |
| FLBP -模糊 LBP,其中每个像素贡献于一个以上的面元 |
| PLBP 概率 LBP 计算每个像素和中心像素之间的差异大小(更多计算,更多存储) |
| SILTP 尺度不变 LBP 使用 3 部分分段比较函数来补偿和支持强度尺度不变,以处理图像噪声 |
| tLBP -转换编码的 LBP,其中 LBP 中相邻像素之间的编码是顺时针的 |
| dLBP——方向编码 LBP——类似于 CSLBP,但是存储最大值和比较信息(这个像素是大于、小于还是最大值) |
| 与所有九个内核邻居的平均值相比,CBP 中心二进制模式中心像素 |
| S-LBP 语义 LBP 在比色精确空间(如 CIE LAB 等)中完成。)在均匀连接的 LBP 圆形图案上寻找主方向+弧长,用于形成作为描述符的 2D 直方图。 |
| 从中心像素到相邻像素的颜色距离的 F-LBP -傅立叶谱 |
| LDP -局部导数模式(高阶导数)-基本 |
| LBP 是一阶方向导数,它与连接成直方图的其他 n 阶方向导数相结合,当然对噪声更敏感 |
| BLBP-Baysian LBP——LBP 和 LTP 的组合,使用 bay sian 方法向更健壮的模式优化 |
| 用于 LBP 比较的 FLS 滤波、标记和统计框架将 LBP 或任何类型的直方图描述符翻译成允许有效比较的向量空间“贝叶斯局部二元模式纹理描述符” |
| MB-LBP 多尺度块 LBP -比较小块中的平均像素值,而不是单个像素,因此 3×3 像素 PBL 将变成 9×9 块 LBP,其中每个块是 3×3 区域。通过缩放图像并在每个缩放比例下创建渲染,以及创建每个缩放图像的直方图并将直方图连接在一起,来计算直方图。 |
| 基于 PM-LBP 金字塔的多结构 LBP -使用 5 个模板来提取不同级别的不同结构信息 1)高斯滤波器,4 个各向异性滤波器来检测梯度方向 |
| 多尺度选择局部二值特征 |
| RILBP -旋转不变 LBP 旋转容器(二进制 LBP 值)直到达到最大值,最大值被认为是旋转不变的。这是 LBP 旋转不变性最广泛使用的方法。 |
| 用于旋转不变性的 ALBP 自适应 LBP,不是像在标准 LBP 方法中那样移动到最大值,而是找到主向量方向并将向量移动到主向量方向 |
| LBPV -局部二元模式方差-使用局部区域方差来加权像素对 LBP 的贡献,将特征与主方向对齐,确定非主导模式并减少其贡献。 |
| OCL BP——对立颜色 LBP——共同描述颜色和纹理——转换每个颜色通道 LBP,然后通过使用一种颜色作为中心像素和另一种颜色作为邻域来转换对立颜色通道 LBP,因此总共计算 9 个直方图,但是仅使用大小 |
| 每种颜色的 SDMCLBP - SDM (co -LBP)图像用作生成出现矩阵的基础,然后从图像中提取 Haralick 特征以形成多维特征空间。 |
| MSCLBP -多尺度颜色局部二进制模式(将 6 个直方图连接在一起)-使用颜色空间组件 |
| 色调-LBP 对手-LBP(所有 3 个通道)无分量-LBP(在 2 个通道上计算),光强度变化,强度偏移,强度变化+偏移,颜色变化颜色偏移,定义六个新的操作符:变换的颜色 LBP(RGB)[减去平均值,除以标准差],对手 LBP,无分量 LBP,色调 LBP,RGB-LBP,nRGB-LBP [x8]“用于视觉对象类别识别的多尺度颜色局部二进制模式”,朱超,查尔斯-埃德蒙比肖,陈黎明 |
| 3D 直方图-3D rgblbp[最佳性能,高内存占用量] -使用统一模式最小化在 RGB-LBP 彩色图像空间上计算的 3D 直方图,每种颜色产生 10 个级别或模式,产生大的描述符:10×10×10 = 1000 个描述符。 |

人口普查

人口普查转换[177]基本上是一个 LBP,和人口普查一样,它使用简单的大于和小于查询来计算和比较结果。Census 记录内核中的中心像素与内核区域中的其他像素之间的像素比较结果。它采用比较和可能的阈值,并将结果存储在二进制向量中。Census 变换还使用了一个称为等级值标量的特性,等级值标量是小于中心像素的像素值的数量。因此,普查描述符同时使用了位向量和等级标量。

普查汇总远景分类法

光谱:局部二元+标量排序

特征形状:方形

特征模式:像素区域与中心像素比较

特征密度:每个像素的局部 3×3

搜索方法:滑动窗口

距离函数:汉明距离

鲁棒性:2(亮度、对比度)

修改普查变换

修改的普查变换(MCT)【205】寻求提高原始普查变换的局部二进制模式鲁棒性。该方法使用 3×3 邻域中的每个像素与 3×3 邻域中所有像素的平均强度的有序比较,生成二进制描述符位向量,其位值被设置为低于所有像素的平均强度的强度。位向量可用于使用每个像素的 MCT 值来创建 MCT 图像。参见图 6-13 。

9781430259299_Fig06-13.jpg

图 6-13 。3x3 MCT 的 511 种可能的二进制模式中的 15 种的缩写集。模式集中的结构核是 MCT 特征空间比较的基础集。结构核形成一个模式基集,它可以表示线、边、角、鞍点、半圆和其他模式

如图图 6-13 所示,MCT 依赖于全套可能的 3×3 二进制模式(291 或 511 种变化),并使用这些作为二进制模式的核心索引作为 MCT 输出,因为每个二进制模式本身是一个独特的签名,具有很高的识别性。MCT 的最终结果类似于非线性滤波器,它将输出分配给内核索引中的 2 个91 模式中的任何一个。结果表明,对于某些类型的对象识别,MCT 结果优于基本 CT[205]。

简介

如第四章所述,在局部二进制描述符点对模式一节中,以及在图 4-11 中所示,BRIEF [132,133]描述符在局部 31x31 区域使用 256 个点对的随机分布模式进行二进制比较,以创建描述符。BRIEF 的一个关键思想是在局部区域内选择随机的点对进行比较。

BRIEF 是一种局部二进制描述符,在机器人应用中取得了非常好的准确性和性能[203]。BRIEF 和 ORB 关系密切;ORB 是 BRIEF 的面向版本,ORB 描述符点对模式的构建也不同于 BRIEF。众所周知,BRIEF 不能容忍旋转。

简要概述分类法

光谱:本地双星

特征形状:以兴趣点为中心的正方形

特征模式:随机局部像素点对比较

特征密度:兴趣点局部 31x31

搜索方法:滑动窗口

距离函数:汉明距离

鲁棒性:2(亮度、对比度)

圆球

ORB [134]是 Oriented BRIEF 的首字母缩写词,顾名思义,ORB 基于 BRIEF,并通过使用 FAST9 确定角点方向,然后使用 Harris 角点度量对关键点进行排序,从而为 BRIEF 添加旋转不变性;使用 Rosin 的方法【61】通过强度质心来细化角点方向。FAST、Harris 和 Rosin 处理是在以因子 1.4 缩放的图像金字塔的每一级上完成的,而不是普通的八度音阶金字塔缩放方法。ORB 在第四章局部二进制描述符点对模式一节中详细讨论,并在图 4-11 中说明。

应该注意的是,ORB 是一个经过高度优化和精心设计的描述符,因为 ORB 作者对计算速度、内存占用和准确性非常感兴趣。本节中调查的许多描述符主要是研究项目,较少优先考虑实际问题,但 ORB 侧重于优化和实际问题。

与 BRIEF 相比,ORB 提供了一种改进的训练方法,用于为成对像素点采样创建局部二进制模式。BRIEF 在 31x31 窗口中使用随机点对,而 ORB 通过训练步骤在窗口中寻找具有高方差和均值~ .5 的不相关点对,这被证明效果更好。有关可视化球体图案的详细信息,参见图 4-11 。

对于对应搜索,ORB 使用多探针本地敏感哈希(MP-LSH), ,当匹配失败时,在相邻桶中搜索匹配,而不是重新导航哈希树。作者报告说 MP-LSH 需要更少的哈希表,从而导致更低的内存占用。MP-LSH 也比 BRIEF 产生更统一的哈希桶大小。因为 ORB 是基于点对比较的二进制描述符,所以汉明距离用于对应。

据报道 ORB 比 SURF 快一个数量级,比 SIFT 快两个数量级,精度相当。作者在 Pascal 数据集[134]上对超过 24 幅 NTSC 分辨率图像的测试中提供了令人印象深刻的性能结果。

|

宝珠 *

|

冲浪

|

|
| --- | --- | --- |
| 15.3 毫秒 | 217.3 毫秒 | 5228.7 毫秒 |

测量结果见参考文献【134】。*

ORB 汇总分类法

光谱:局部二元+方向向量

特征形状:方形

特征模式:经过训练的局部像素点对比较

特征密度:兴趣点局部 31x31

搜索方法:滑动窗口

距离函数:汉明距离

鲁棒性:3(亮度、对比度、旋转,*有限比例)

轻快

BRISK [131,143]是一种局部二进制方法,使用一个圆对称的模式区域形状,总共 60 个点对作为线段排列在四个同心环中,如图图 4-10 所示,在第四章中有详细描述。该方法使用短线段和长线段的点对,这提供了尺度不变性的度量,因为短线段可以更好地映射为精细分辨率,而长线段可以更好地映射为粗糙分辨率。

brisk 算法是独一无二的,它使用了一种适用于尺度空间的新型快速检测器,据报道,与 SURF 相比,其性能提高了一个数量级,精确度相当。该算法的主要计算步骤如下:

  • 在比例空间中使用基于快速或惊骇的选择来检测关键点。
  • 在每个像素采样点执行高斯平滑以获得点值。
  • 创建三组线对:长线对、短线对和未使用的线对(未使用的线对不在长线对或短线对集中;参见图 4-12 。
  • 计算长对之间的梯度,对梯度求和以确定方向。
  • 使用渐变方向来调整和旋转短对。
  • 从短对逐点比较创建二进制描述符。

快速汇总分类法

光谱:局部二元+方向向量

特征形状:方形

特征模式:经过训练的局部像素点对比较

特征密度:快速兴趣点的局部 31x31

搜索方法:滑动窗口

距离函数:汉明距离

鲁棒性:4(亮度、对比度、旋转、比例)

怪胎

FREAK [130]使用一种新颖的受视网膜中央凹启发的多分辨率像素对采样形状,通过训练的像素对来模拟人眼的设计,作为一种由粗到细的描述符,分辨率在中心最高,向外围进一步降低,如图图 4-9 所示。在作者看来,FREAK 展示了许多更好的特性描述设计方法;它集性能、准确性和稳健性于一身。请注意,FREAK 计算速度很快,与其他本地二进制描述符(如 LBP、Census、BRISK、BRIEF 和 ORB)相比具有良好的区分度,并且与 SIFT 相比表现良好。

畸形特征训练过程包括根据训练数据确定二元比较的点对,如图图 4-9 所示。训练方法允许通过加权和选择具有高方差和低相关性的样本点来构建一系列描述符采样模式和形状。首先使用可变大小的半径近似从局部区域平滑每个采样点,以在圆形区域上创建高斯核。圆形区域被设计成与相邻区域有一些重叠,这提高了精确度。

因此,特征描述符被设计成包含存储在向量中的像素对二进制比较的四组 16 字节粗到细描述符的粗到细级联。前 16 个字节是级联中最高分辨率集的粗略值,通常足以找到 90%的匹配特征并丢弃不匹配的特征。FREAK 使用来自 31×31 像素面片采样区域的 45 个点对作为描述符。

通过将点对比较存储在分辨率递减的模式向量的四个级联中,匹配过程从粗略进行到精细,模仿人类视觉系统的扫视搜索机制,当在匹配阶段有早期成功或拒绝时,允许加速匹配性能。总之,怪胎方法非常有效。

畸形汇总分类法

光谱:局部二元由粗到细+方向向量

特征形状:方形

特征模式:31×31 区域像素点对比较

特征密度:兴趣点稀疏局部

搜索方法:在刻度空间上滑动窗口

距离函数:汉明距离

鲁棒性:6(亮度、对比度、旋转、比例、视点、模糊)

光谱描述符

与本地二进制描述符组相比,谱描述符组通常涉及更密集的计算和算法,通常需要浮点计算,并且可能消耗相当多的存储器。在这种分类和讨论中,光谱简单地是可以测量或计算的量,例如光强度、颜色、局部区域梯度、局部区域统计特征和矩、表面法线以及分类数据,例如任何光谱类型的 2D 或 3D 直方图,例如局部梯度方向的直方图。本节讨论的许多方法都使用局部梯度信息。

如前一节所述,局部二进制描述符是一种尝试,旨在摆脱成本更高的频谱方法,以降低功耗并提高性能。在许多情况下,局部二进制描述符提供了与更多计算密集型光谱方法相似的准确性和鲁棒性。

筛选

Lowe [161,178]开发的尺度不变特征变换(SIFT)是用于寻找兴趣点和特征描述符的最著名的方法,提供了对尺度、旋转、照明、仿射失真、透视和相似变换以及噪声的不变性。Lowe 证明,通过一起使用几个 SIFT 描述符来描述一个对象,对遮挡和杂乱有额外的不变性,因为如果一些描述符被遮挡,其他描述符将被发现[161]。我们在这里提供一些关于 SIFT 的细节,因为它设计得很好,而且众所周知。

SIFT 通常用作比较其他视觉方法的基准。作者 David Lowe 的原始 SIFT 研究论文最初几次被主要计算机视觉期刊拒绝发表,结果 Lowe 申请了专利,并采取了不同的方向。据 Lowe 说,“那时我已经决定计算机视觉社区不感兴趣,所以我申请了一项专利,并打算促进它的工业应用。”最终,SIFT 论文发表了,并成为计算机视觉史上被引用最多的文章!

SIFT 是一个完整的算法和处理流水线,既包括兴趣点,也包括特征描述符方法。SIFT 包括在尺度空间中选择高斯(DoG)最大值中心环绕圆形加权差兴趣点以创建尺度不变关键点的阶段(主要创新),如图图 6-14 所示。围绕尺度不变关键点计算特征描述符。特征提取步骤包括在以几个尺度上导出的最大响应兴趣点为中心的选定位置处,使用 GLOH 变化,从局部梯度幅度到笛卡尔矩形仓或对数极坐标仓,计算梯度的分仓直方图(HOG) 结构。

9781430259299_Fig06-14.jpg

图 6-14 。(顶部)通过与高斯核卷积获得的一组高斯图像和相应的一组狗图像。(底部)以八度音程为单位。DOG 函数近似于对数梯度或可调旁路滤波器。将特征与缩放的倍频程集中的各种图像进行匹配产生了缩放不变特征

描述符被馈送到匹配流水线中,以找到最接近匹配和第二最接近匹配之间的最近距离比率度量,该度量一起考虑主匹配和次匹配,并且如果它们太相似,则拒绝两个匹配,假设一个或另一个可能是假匹配。局部梯度幅度由与金字塔标度级别成比例的强度值加权,然后装入局部直方图中。总之,SIFT 是一个经过深思熟虑和精心设计的多尺度局部特征描述符。

彩色图像 SIFT 的一种变体被称为 CSIFT [179]。

下面是基本的 SIFT 描述符处理流程(注意:匹配阶段被省略,因为本章关注的是特征描述符和相关度量):

创建一个比例空间金字塔

八度标度 n/2 图像金字塔与标度空间中的高斯滤波图像一起使用。高斯模糊量与尺度成正比,然后用高斯差分(DoG)方法捕捉金字塔中相邻图像中的兴趣点极值极大值和极小值。图像金字塔包含五个级别。SIFT 还使用双比例第一金字塔等级,使用两倍于原始放大倍数的像素来帮助保留精细细节。这项技术将稳定关键点的数量增加了大约四倍,这是非常显著的。否则,计算原始图像上的高斯模糊会产生丢弃高频细节的效果。参见图 6-15 和图 6-16 。

9781430259299_Fig06-15.jpg

图 6-15 。SIFT DoG 作为金字塔尺度中高斯滤波图像之间的简单算术差

9781430259299_Fig06-16.jpg

图 6-16 。使用尺度不变极值检测的 SIFT 兴趣点或关键点检测,其中中间八度音阶中的暗像素在 3x3x3 区域内与其相邻八度音阶中的 26 个邻居进行比较,这包括局部尺度上的 8 个邻居加上相邻八度音阶(向上或向下)上的 9 个邻居

确定比例不变的兴趣点

如图 6-16 所示,候选兴趣点是从金字塔中三个相邻八度区的狗图像的 26 个相邻像素之间的局部最大值或最小值中选择的。换句话说,兴趣点是尺度不变的。

通过分析局部 26 像素邻域内的局部对比度、局部噪声和局部边缘存在,进一步限定所选兴趣点以实现不变性。除了原始方法中的那些方法之外,还可以使用各种方法,并且几种技术一起使用来选择最佳兴趣点,包括小区域上的局部曲率插值,以及平衡边缘响应以包括主要和次要边缘。关键点在尺度和空间上被定位到亚像素精度。因此,完整的兴趣点对于比例是不变的。

创建特征描述符

围绕所选兴趣点的大小为 16×16 像素的局部区域或小块是特征向量的基础。计算 16×16 小块中的局部梯度的幅度和梯度方向,并将其存储在 HOG(梯度直方图)特征向量中,以循环对称的方式对其进行加权,以降低远离中心兴趣点的点的权重,使用高斯加权函数围绕该中心兴趣点计算 HOG。

如图 6-17 所示,4x4 梯度宁滨方法允许梯度在描述符中四处移动并组合在一起,从而为可能改变局部梯度位置的各种几何失真提供不变性,类似于人类视觉系统对视网膜上梯度 3D 位置的处理【248】。SIFT HOG 对缩放、对比度和旋转具有合理的不变性。使用三线性插值用梯度信息填充直方图仓,并归一化以提供照明和对比度不变性。

9781430259299_Fig06-17.jpg

图 6-17 。(左侧和中间)梯度幅度和方向被分入 SIFT HOG 的直方图中。(右)GLOH 描述符

还可以使用称为梯度位置和方向直方图(GLOH)的 HOG 描述符的变体来执行 SIFT,其使用对数极坐标直方图格式而不是笛卡尔 HOG 格式;参见图 6-17 。GLOH 对数极坐标直方图的计算很简单,如下图所示,从用于笛卡尔 HOG 直方图的笛卡尔坐标,其中矢量幅度是斜边,角度是反正切。

9781430259299_unFig06-02.jpg

如图图 6-17 所示,SIFT HOG 和 GLOH 本质上是 3D 直方图,在这种情况下直方图 bin 值是梯度幅度和方向。因此,描述符向量大小为 4x4x8=128 字节。4×4 描述符(中间图像)是左图像中每个 4×4 组的组合的八向梯度方向和幅度的一组直方图,在笛卡尔坐标中,而 GLOH 梯度幅度和方向在极坐标中被分箱,在大宁滨区域上被间隔成 17 个箱。SIFT-HOG(左图)还使用一个加权因子,随着距中心距离的增加,以循环对称的方式平滑地减少梯度信息的贡献。

SIFT 总体计算复杂度 较高【180】,如表 6-2 所示。注意,由于用于方向分配和描述符生成的所有局部区域梯度计算,包括具有三线性插值的直方图宁滨,特征描述是计算最密集的。SIFT 中开发的梯度方向直方图是一项关键创新,提供了强大的鲁棒性。

表 6-2 。SIFT 计算复杂性(摘自 Vinukonda [180])

|

筛选流水线步骤

|

复杂度

|

操作次数

|
| 高斯模糊金字塔 | imageN2U2s | 4N?? 2T4 W2s |
| 高斯金字塔的差异 | image sN * 2 | 4N?? 2T4 s |
| 尺度空间极值检测 | image sN * 2 | 104 sN 2 |
| 关键点检测 | image【sn】 | 100 |
| 方向分配 | image【sn】(1-
)
| 48sN??【2】 |
| 描述符生成 | image(x【2】nab+ | image【1520】【x】【2】(+ |

SIFT 的结果特征向量是 128 字节。但是,有一些方法可以降低维数并改变描述符,这将在下面讨论。

筛选汇总分类法

光谱:局部梯度幅度+方向

特征形状:方形,圆形加权

特征模式:圆形对称加权的正方形

特征密度:在局部 16x16 狗兴趣点处稀疏

搜索方法:在刻度空间上滑动窗口

距离函数:欧几里德距离(*或带有 RootSIFT 改进的 Hellinger 距离)

鲁棒性:6(亮度、对比度、旋转、缩放、仿射变换、噪声)

SIFT-PCA

Ke 和 Suthankar [183]开发的 SIFT-PCA 方法使用主成分分析(PCA)得出的替代特征向量,基于归一化梯度补丁,而不是 SIFT 中使用的加权平滑梯度直方图。此外,SIFT-PCA 将 SIFT 描述符的维数减少到更小的元素集。最初报道 SIFT 使用 128 个向量,但是使用 SIFT-PCA,向量减少到更小的数目,例如 20 或 36。

SIFT-PCA 的基本步骤如下:

  1. 基于来自局部 41×41 图像碎片的梯度构建特征空间,产生 3042 个元素向量;这个向量是普通 SIFT 流水线的结果。
  2. 计算补片的局部图像梯度。
  3. 使用对每个特征向量的协方差矩阵的 PCA,从特征空间创建缩减尺寸的特征向量。

SIFT-PCA 在对图像扭曲的鲁棒性方面比 SIFT 有所改进,并且特征向量的尺寸越小,匹配速度越快。作者指出,虽然 PCA 在应用于图像补片特征时通常不是最佳的,但该方法对于在尺度空间中定向和定位的 SIFT 风格梯度补片工作良好[183]。

SIFT

梯度位置和方向直方图(GLOH) [144]方法使用极坐标和径向分布仓,而不是 SIFT 使用的笛卡尔坐标风格直方图宁滨方法。据报道,它为一些真实情况数据集提供了比 SIFT 和其他描述符更高的准确性和鲁棒性[144]。如图 6-17 中的所示,GLOH 使用一组 17 个径向分布的面元对极坐标中的梯度信息求和,产生一个 272 面元的直方图。中央纸盒不是定向的。使用 PCA 减小描述符的大小。GLOH 已经被用来改造 SIFT。

筛-筛改装

具有错误恢复能力的尺度不变特征检测器(SIFER)【224】方法提供了标准 SIFT 流水线的替代方案,据报道,对于某些标准,可测量的精度提高高达 20%。然而,准确性是有代价的,因为性能大约是 SIFT 的两倍。SIFER 的主要贡献包括使用更高粒度的图像金字塔表示来改进尺度空间处理,以及使用余弦调制高斯滤波器进行更好的尺度调谐滤波。

该方法的主要步骤如表 6-3 所示。使用余弦调制高斯(CMG) 滤波器模糊尺度空间金字塔,这允许八度音阶的每个尺度被细分为六个尺度,因此结果是更好的尺度精度。

表 6-3 。SIFT、SURF 和 SIFER 流水线的比较(改编自[224])

Table6-3.jpg

由于 CMG 的性能不好,SIFER 提供了一种快速近似方法,可以提供合理的精度。特别注意图像尺度和滤波器尺度以增加检测的准确性,因此余弦被用作高斯滤波器的带通滤波器以尽可能地匹配尺度,在尺度空间上调谐滤波器组中的滤波器,对于每个倍频程的六个尺度中的每一个具有良好匹配的滤波器。CMG 提供了比 SIFT 高斯二阶导数方法更好的错误恢复能力。

SIFT CS-LBP 改装

SIFT-CSLBP 改进方法[202,173]通过用计算效率更高的 LBP 算子代替 SIFT 梯度计算,并通过创建相似的直方图面元化的方向特征向量,组合了 SIFT 和中心对称 LBP (CS-LBP) 的最佳属性。LBP 的创建和匹配在计算上都比 SIFT 描述符简单。

CS-LBP 描述符首先将自适应噪声去除滤波器(Weiner 滤波器是本工作中使用的一种滤波器)应用于自适应噪声去除的局部补丁,这保持了局部对比度。CS-LBP 不是计算所有 256 个可能的 8 位局部二进制模式,而是只计算 16 个中心对称模式来降低维数,如图图 6-18 所示。

*9781430259299_Fig06-18.jpg

图 6-18 。用于降维的 CS-LBP 采样模式

不是使用 SIFT 循环加权函数来加权直方图仓,而是不使用加权,这减少了计算。像 SIFT 一样,CS-LBP 宁滨方法使用 4×4 区域笛卡尔网格;使用更简单的宁滨双线性插值,而不是 SIFT 中的三线性插值。总体而言,CS-LCP 改造方法简化了 SIFT 计算流水线,并以相当的精度提高了性能;据报道,某些数据集的准确性更高。参见表 6-4 。

表 6-4 。SIFT 和 CSLBP 改造性能(根据参考文献[202])

Table6-4.jpg

RootSIFT 改造

RootSift 方法[174]为 Sift 流水线提供了一组简单、关键的增强功能,从而提高了计算性能并略微提高了准确性,如下所示:

  • Hellinger distance:RootSIFT 使用 helling er distance 代替欧氏距离进行对应,对 SIFT 对象检索流水线进行了简单的性能优化。SIFT 流水线的所有其他部分保持不变;仍然采用 k-means 来构建特征向量集,并且对于更大的特征向量集,仍然可以使用其他近似最近邻方法。作者声称,对 SIFT 代码进行简单修改以执行 Hellinger 距离优化而不是欧几里德距离可以是对代码的一组简单的单行改变。RootSIFT 中的其他增强是可选的,将在下面讨论。
  • 特征增强:这种方法提高了总召回率。由特科特和劳[332]开发,应用于特征。来自数据库中相同对象的相似视图的特征向量或视觉单词被关联成用于在相似特征之间寻找对应关系的图,而不是仅仅依赖于单个特征。
  • 判别查询扩展(DQE): 该方法在训练时增加查询扩展。通过在线性 SVM 中使用正的和负的训练数据,将邻近区域内的特征向量平均成对数据库中的重新查询有用的新特征向量,从而将这些特征向量相关联;参考文献[174]报道了更好的一致性。

通过将上述三项创新结合到 SIFT 流水线中,性能、准确性和鲁棒性都得到了显著提高。

责难和明星

中心环绕极值或 CenSurE [ 185,184,145]方法提供了真正的多尺度描述符,在金字塔的所有尺度上使用全空间分辨率来创建特征向量,这与 SIFT 和 SURF 形成对比,SIFT 和 SURF 在二次采样像素上找到极值,这在较大尺度上损害了精度。CenSurE 类似于 SIFT 和 SURF,但是一些关键的区别总结在表 6-5 中。对 OpenCV 中最初的 CenSurE 算法进行了修改,该算法被命名为 STAR descriptor。

表 6-5 。CenSurE 与 SIFT 和 SURF 之间的主要区别(改编自参考文献[185])

Table6-5.jpg

作者非常关注创建计算高效、内存高效、性能和准确性高的方法[185]。CenSurE 定义了一种寻找极值的优化方法,首先在所有尺度上使用拉普拉斯算子,然后使用 Harris 方法进行过滤,以丢弃响应较弱的角点。

与 SIFT 和 SURF 相比,CenSurE 的主要创新如下:

  1. Use of bilevel center-surround filters, as shown in Figure 6-19, including Difference of Boxes (DoB), Difference of Octagons (DoO) and Difference of Hexagons (DoH) filters, octagons and hexagons are more rotationally invariant than boxes. DoB is computationally simple and may be computed with integral images vs. the Gaussian scale space method of SIFT. The DoO and DoH filters are also computed quickly using a modified integral image method. Circle is the desired shape, but more computationally expensive.

    9781430259299_Fig06-19.jpg

    图 6-19 。使用二进制核值 1 和-1 对拉普拉斯算子进行两级中心环绕滤波器形状近似,这可以使用带符号加法而不是乘法来有效地实现。注意,圆形是期望的形状,但是其他形状使用积分图像更容易计算,尤其是矩形方法

  2. 为了找到极值,使用 3x3x3 邻域,在每个像素处使用七级尺度的过滤器空间来计算 DoB 过滤器。尺度空间搜索使用非八度音程边界上的中心环绕类 Haar 特征来组成,其中滤波器块大小[1,2,3,4,5,6,7]覆盖[1 和 7]之间的 2.5 个八度音程,产生五个滤波器。这种音阶排列提供了比八度音阶更多的辨别力。应用阈值来消除每个级别的弱滤波器响应,因为弱响应可能不会在其他级别重复。

  3. 使用重叠积分图像区域的组合来快速计算非矩形过滤器形状,例如八边形和六边形;注意八边形和六边形避免了矩形区域造成的伪影,增加了旋转不变性;参见图 6-19 。

  4. 使用 SURF 方法的快速修改版本应用责难滤波器,称为修改的直立 SURF(MU-SURF)【188,189】,稍后与其他 SURF 变型一起讨论,其通过使用 HAAR 响应的重叠子区域的扩展集合来特别注意描述符中的框的边界效应。

责难汇总分类法

光谱:中心环绕形状的二级过滤器

特征形状:八边形、圆形、方形、六边形

特征模式:过滤器形状遮罩,24x24 最大区域

特征密度:局部兴趣点稀疏

搜索方法:尺度空间上的密集滑动窗口

距离函数:欧几里德距离

鲁棒性:5(亮度、对比度、旋转、缩放、仿射变换)

关联模板

用于特征描述和检测的最广为人知和显而易见的方法之一是简单地拍摄完整特征的图像,并通过直接像素比较来搜索它——这被称为相关性。相关包括使包含第一像素区域模板的滑动窗口跨过第二图像区域模板,并使用诸如差和(SAD) 的方法执行简单的逐像素区域比较;得到的分数就是相关性。

由于图像照明可能变化,典型地,相关模板和目标图像首先被强度归一化,典型地通过减去平均值并除以标准偏差;然而,也可以使用对比度调整和 LUT 变换。相关通常在矩形窗口的空间域中实现,但也可以与频域方法一起使用[4,9]。

相关性用于基于视频的目标跟踪应用中,其中在小的相邻区域上从帧到帧的正交运动的平移占主导地位。例如,视频运动编码器使用相关性找到图像内的区域或块的位移,因为视频中的小块运动通常与笛卡尔轴正交,并且很好地映射到使用相关性找到的简单位移。根据所使用的图像和方法,相关可以提供 1/4 到 1/20 像素之间的亚像素精度;参见参考文献[151]。对于视频编码应用,相关性允许有效地编码和精确地计算相应块的运动矢量位移。相关性服从固定功能硬件加速。

相关的变化包括互相关(滑动点积)归一化互相关(NCC) 、零均值归一化互相关(ZNCC) 和纹理自相关(TAC)。

一般来说,对于恒定大小的单空间模式区域的正交运动,相关是一个好的检测器。它提供子像素精度,对照明具有有限的鲁棒性和精度,但对旋转或缩放几乎没有鲁棒性。然而,为了克服这些鲁棒性问题,可以在图形处理器中并行使用多个纹理采样器来快速缩放和旋转相关模板,从而加速尺度空间上的相关以及各种几何平移。然后,相关匹配可以通过 SIMD SAD 指令或者使用视频编码引擎中的快速固定函数相关器来完成。

相关性如图 6-20 中的所示。

9781430259299_Fig06-20.jpg

图 6-20 。使用扫过矩形区域的三角形模板区域的数字相关的简化模型。最佳相关性显示在最高点的位置

关联摘要分类法

光谱:相关性

特征形状:方形、矩形

特征模式:密集

特征密度:可变大小的内核

搜索方法:密集滑动窗口

距离功能:SSD 典型,其他可能

鲁棒性:1(照明,亚像素精度)

哈尔特征

HAAR-like 特征[4,9]通过 Viola Jones [186]算法在计算机视觉领域得到推广。哈尔特征是基于矩形模式的特定集合,如图图 6-21 所示,其近似基本哈尔小波,其中每个哈尔特征由矩形内像素的平均像素值组成。这是使用积分图像有效计算的。

9781430259299_Fig06-21.jpg

图 6-21 。类哈尔特征的例子

通过使用矩形要素中的平均像素值,目的是在相邻区域中找到一组小模式,其中较亮或较暗的区域相邻可能会显示一个要素-例如,较亮的脸颊紧挨着较暗的眼窝。然而,HAAR 特征有缺点,因为矩形本质上在超过 15 度时不是旋转不变的。此外,矩形内像素值的整合破坏了精细的细节。

根据要检测的特征的类型,例如眼睛,选择一组特定的 HAAR 特征来显示眼睛/脸颊细节和眼睛/鼻子细节。例如,具有两个矩形的 HAAR 图案可用于检测边缘,而具有三个矩形的图案可用于线条,具有一个插入矩形或四个矩形的图案可用于单一对象特征。注意,哈尔特征可以是旋转的集合。

当然,HAAR 图案的比例是一个问题,因为给定的 HAAR 特征只对适当比例的图像起作用。图像金字塔与其他技术一起用于 HAAR 特征检测,以便在给定应用的最佳网格尺寸中在图像上步进搜索窗口。解决特征缩放的另一种方法是使用一组更广泛的缩放 HAAR 特征来在特征空间而不是图像空间中执行金字塔化。解决哈尔特征粒度和矩形形状的一种方法是使用重叠的哈尔特征来近似八边形和六边形;参见图 6-19 中的责难和星形方法。

哈尔特征与小波密切相关[227,334]。小波可以被认为是早期 Gabor 函数概念的延伸。这里我们只提供小波和 Gabor 函数的简短讨论;更多讨论见第二章。小波是一组正交的小持续时间函数。每组小波被设计成满足定位短期信号现象的各种目标。没有单一的小波函数;相反,当设计小波时,首先将母小波设计为小波族的基,然后使用母小波到基集中的平移和压缩来导出子小波。小波被用作一组非线性基函数,其中每个基函数可以根据需要被设计成最佳地匹配输入函数中的期望特征。因此,与使用由正弦和余弦函数组成的统一基函数集(如傅立叶变换)的变换不同,小波使用复杂且本质上不均匀的动态基函数集。小波可以用来描述非常复杂的短期特征,这在一些特征检测应用中可能是一个优势。

然而,与积分图像和 HAAR 特征相比,小波在计算上是昂贵的,因为它们表示复域中的复函数。由于简单的矩形形状和计算的简单性,通常使用哈尔 2D 基函数,特别是当哈尔特征是从积分图像中导出时。

哈尔摘要分类法

光谱:整体箱式过滤器

特征形状:方形、矩形

特征模式:密集

特征密度:可变大小的内核

搜索方法:典型网格搜索

距离函数:简单的差异

鲁棒性:1(照明)

具有哈尔式特征的维奥拉·琼斯

Viola Jones method [186]是一种基于 HAAR-like 特征的特征检测流水线框架,使用感知器学习算法来训练检测器匹配网络,该网络由三个主要部分组成:

  1. 用于快速计算类哈尔特征的积分图像。
  2. ADA-BOOST 学习算法通过将具有良好匹配性能的强分类器与在训练过程中通过调整加权因子而“增强”的弱分类器相结合,来创建强模式匹配和分类器网络。
  3. 将分类器组合成检测器级联或漏斗,以在级联的早期阶段快速丢弃不想要的特征。

由于在单个图像中可能会发现数千个 HAAR 模式匹配,因此必须快速进行特征计算。为了快速进行 HAAR 模式匹配计算,首先将整个图像处理成积分图像。使用滑动窗口方法在图像的每个区域搜索已知的哈尔特征,该方法以某个选定的间隔步进,例如每 n 个像素,并且检测到的特征被馈送到被称为哈尔级联分类器的分类漏斗中。漏斗的顶部由产生低假阳性和假阴性的特征集组成,因此级联的一阶结果包含图像的高概率区域以供进一步分析。HAAR 特征变得越来越复杂,越来越深入到级联的漏斗中。利用这种布置,如果没有找到期望的 HAAR 特征,则图像区域尽可能快地被拒绝,从而最小化处理开销。

一个完整的 HAAR 特征检测器可以将数百或数千个 HAAR 特征组合成一个最终的分类器,其中不仅特征本身可能是重要的,而且特征的空间排列也是重要的,例如,特征之间的距离和角度关系可以用于分类器中。

冲浪〔??〕

加速鲁棒特征方法(SURF) [160]在尺度空间中操作,并使用基于 Hessian 矩阵的行列式最大值点的快速 Hessian 检测器。SURF 使用 3x3x3 邻域上的比例空间来定位 bloblike 兴趣点特征。为了找到特征方向,在圆形半径内围绕每个兴趣点的局部区域中计算一组 HAAR-like 特征响应,在兴趣点的匹配金字塔尺度上计算。

如图 6-22 中的所示,使用大小为image 的滑动扇形 窗口,找到局部哈尔特征集的主导方向分配。这个滑动扇形窗口以一定间隔围绕兴趣点旋转。在滑动扇形区域内,所有 HAAR 特征被求和。这包括水平和垂直响应,产生一组方向向量;选择最大的向量来表示主要特征方向。作为比较,SURF 整合梯度以找到主导方向,而 SIFT 使用梯度方向直方图来记录方向。

9781430259299_Fig06-22.jpg

图 6-22 。(左)在 SURF 中使用的滑动扇形窗口,用于计算 HAAR 要素的主要方向,从而为 SURF 要素添加旋转不变性。(右)特征向量构建过程,显示了包含细分为 4x4 子区域和 2x2 子区域的 4x4 区域的网格

为了创建 SURF 描述符向量,围绕兴趣点建立 4×4 区域的矩形网格,类似于 SIFT,并且该网格的每个区域被分割成 4×4 子区域。在每个子区域内,在 5×5 样本点上计算 HAAR 小波响应。使用圆形对称高斯加权因子对每个 HAAR 响应进行加权,其中加权因子随着距中心兴趣点的距离而减小,这类似于 SIFT。每个特征向量包含四个部分:

image

对每个子区域的小波响应 d xd y 求和,并且响应|dx|和|dy|的绝对值提供强度变化的极性。最终的描述符向量是 4x4x4: 4x4 区域,每个区域有四个部分,总向量长度为 64。当然,通过修改基本方法可以设计出其他的向量长度。

如图 6-22 所示,SURF 梯度网格根据滑动扇形窗口过程中计算的主导方向旋转,然后在每个正方形区域中计算小波响应,相对于宁滨到特征向量的方向。每个小波的方向和dxd y ,|dx|,|dy|都记录在特征向量中。

SURF 和 SIFT 流水线方法在实施步骤和最终精度方面通常是可比较的,但是与 ORB 基准测试相比,SURF 的计算速度比 SIFT 快一个数量级[134]。然而,本地二进制描述符,如 ORB,比 SURF 快另一个数量级,对许多应用具有相当的准确性[134]。有关详细信息,请参阅本章前面有关本地二进制描述符的部分。

冲浪汇总分类法

光谱:整体箱式过滤器+方向向量

特征形状:哈尔矩形

特征模式:密集

特征密度:在 Hessian 兴趣点稀疏

搜索方法:尺度空间上的密集滑动窗口

距离函数:马氏还是欧几里得

鲁棒性:4(比例、旋转、照明、噪声)

冲浪的变化

SURF 描述符[188,189]的一些变化值得讨论,如表 6-6 所示。特别感兴趣的是 G-SURF 方法[188],该方法使用局部区域规范坐标系的微分几何概念[190]来计算特征。因为规范坐标不是全局的,而是图像特征的局部的,所以规范空间特征在几何精度方面具有优势。

表 6-6 。SURF 变体(如 Alcantarilla 等人所讨论的。阿尔[188])

|

冲浪

|

圆形对称高斯加权方案,20x20 网格

|
| --- | --- |
| U-SURF [189] | 更快版本的 SURF,只使用直立特征;没有方向。类似于 M-SURF,除了没有旋转网格的直立计算“U ”,使用 20x20 网格,没有重叠的 HAAR 特征,修改的高斯加权方案,直方图仓之间的双线性插值。 |
| m-曲面 MU-SURF [189] | 圆形对称高斯加权方案分两步计算,而不是像普通 SURF 那样一步计算,24x24 网格使用重叠的 HAAR 特征,在 MU-SURF 版本中省略了旋转方向。 |
| G-SURF,GU-SURF [188] | 代替 HAAR 特征,在规范坐标空间中替换 2 阶规范导数,没有高斯加权,20x20 网格。规范导数是旋转和平移不变的,而 HAAR 特征是简单的矩形,并且矩形具有较差的旋转不变性,可能最多+/-15 度。 |
| MG-SURF [188] | 与 M-SURF 相同,但使用仪表导数。 |
| NG-SURF [188] | N =没有像 SURF 中那样的高斯加权;与 SURF 相同,但没有应用高斯加权,允许在仪表导数特征和 HAAR 特征之间进行比较。 |

梯度直方图(HOG)和变体

梯度直方图(HOG)方法[106]旨在用于图像分类,并依赖于在重叠块的密集网格上计算局部区域梯度,而不是在感兴趣的点上。HOG 适用于某些应用,例如人物检测,其中图像中的特征非常大。

HOG 对原始数据进行操作;虽然许多方法依赖高斯平滑和其他滤波方法来准备数据,但 HOG 是专门为使用所有原始数据而设计的,不会引入去除细微细节的滤波伪像。作者展示了使用这种方法的明显好处。这是一个权衡:滤波伪像如平滑 vs. 图像伪像如精细细节。HOG 方法显示了原始数据的优先结果。参见图 4-12 ,显示了一个猪描述符的可视化。

HOG 方法的主要方面如下:

  • 原始 RGB 图像在没有色彩校正或噪声过滤的情况下使用,使用其他色彩空间和色彩伽马调整对于增加的成本提供了很少的优势。
  • 优选 64×128 的滑动检测器窗口;还测试了 56x120 和 48x112 大小的窗户。在该检测器窗口内,定义了总共 8×16×8 的像素块区域用于梯度的计算。块大小是可调的。
  • 对于每个 8×8 像素块,总共计算 64 个局部梯度幅度。首选的方法是 x/y 中简单的行和列导数 -1,0,1】尝试了其他梯度滤波方法,但使用或不使用高斯滤波的较大滤波器会降低精度和性能。为每个颜色通道计算单独的梯度。
  • 使用双线性内插,将局部梯度幅度分仓到边缘方向的 9 仓直方图中,将维度从 64 量化到 9;9 个垃圾箱似乎无关紧要。注意,可以使用矩形 R-HOG 或圆形对数极坐标 C-HOG 宁滨区域。
  • 将梯度幅值直方图值归一化为单位长度,以提供照明不变性。归一化是成组执行的,而不是在单个直方图上执行的。在检测器窗口内使用重叠的 2×2 直方图块;块重叠方法减少了尖锐的伪像,并且 2×2 的区域大小似乎效果最好。
  • 对于 64×128 像素检测器窗口方法,定义了总共 128 个 8×8 像素块。每个 8×8 块具有四个单元,用于计算独立的 9-bin 直方图。描述符的总大小为 8x16x4x9=4608。

注意,滑动窗口和块大小的各种公式被用于处理特定的应用领域。参见[图 4-12 ,显示了使用 7x15 8x8 像素单元计算的 HOG 描述符的可视化。HOG [106]设计方法的主要发现包括:

  • 原始数据中精细尺度处的突变边缘是梯度计算中的准确性所需要的,并且后处理和归一化梯度箱稍后工作良好。
  • 局部对比度的 L2 式块归一化是优选的,并且提供了优于全局归一化的精度;注意,局部区域块被重叠以帮助归一化。
  • 在直方图宁滨过程中取消 L2 块归一化阶段会降低 27%的准确性。
  • HOG 特征比 HAAR 型检测器表现得好得多,并且当我们考虑 HAAR 小波是积分的无方向值时,这是有意义的,而局部 HOG 区域上的梯度幅度和方向提供了更丰富的光谱。

生猪分类汇总

光谱:局部区域梯度直方图

特征形状:矩形或圆形

特征模式:密集的 64x128 典型矩形

特征密度:密集重叠块

搜索方法:标度空间上的网格

距离函数:欧几里得

鲁棒性:4(光照、视点、比例、噪声)

PHOG 及相关方法

定向梯度金字塔直方图(PHOG) [191]方法是为全局或区域图像分类而设计的,而不是局部特征检测。PHOG 使用在倍频程网格区域细分中遍布整个图像的特征之间的空间关系,将区域 HOG 特征与整个图像区域特征相结合;参见图 6-23 。

9781430259299_Fig06-23.jpg

图 6-23 。在整个图像上计算的一组 PHOG 描述符,使用倍频程网格单元来限制边缘信息。(左中)一个直方图。(右中)四个直方图串联在一起。(右)16 个直方图串联显示

PHOG 类似于相关工作,使用由粗到细的区域直方图网格,由 Lazebni、Schmid 和 Ponce [534]称为空间金字塔匹配,使用定向边缘直方图和 SIFT 特征提供多类分类。它也类似于早期在逐步细化的网格上对级联直方图要素金字塔所做的工作,称为金字塔匹配核,由 Grauman 和 Darrell [535]开发,使用加权多分辨率直方图交集计算对应关系。参考文献[55]中描述了使用多分辨率直方图进行纹理分类的其他相关早期工作。

PHOG 描述符捕获了几个特征变量,包括:

  • 形状特征,源自基于梯度特征的边缘的局部分布,该梯度特征受到 HOG 方法的启发[106]。
  • 空间关系,通过计算一组倍频程网格单元上的直方图特征,在整个图像上具有尺寸越来越细的块。
  • 外观特征,使用在规则间隔的密集网格上计算的密集 SIFT 描述符集。演示了 PHOG 计算彩色图像的 SIFT 向量;HSV 颜色空间的结果在[191]中提供。

一组训练图像被用于为一类图像(例如汽车或人)生成一组 PHOG 描述符变量。使用 K-means 聚类将 PHOG 特征的训练集减少到一组几百个视觉单词,以用于特征匹配和图像分类。

PHOG 的一些关键概念如图 6-23 所示。对于特征形状,使用 Canny 边缘检测器计算边缘,使用 Sobel 算子计算梯度方向。梯度方向宁滨通过梯度方向(HOG)在相邻的直方图条柱之间线性插值,每个条柱代表边缘的角度。针对整个图像中每个尺寸的网格单元计算 HOG 向量。最终的 PHOG 描述符由来自每个网格级别的所有单个 HOG 直方图的加权串联组成。八度网格单元区域之间没有尺度空间平滑来减少细节。

如图图 6-23 所示,最终的 PHOG 包含了所有连接在一起的猪。请注意,对于中左图像,全网格大小的单元格产生 1 个 HOG,对于中右图像,半八度网格产生 4 个 HOG,对于右图像,细网格产生 16 个 HOG 向量。最终的 PHOG 被归一化为 1,以减少由于边缘或纹理集中而产生的偏差。

PHOG 摘要分类法

光谱:全局和区域梯度方向直方图

特征形状:矩形

特征模式:瓷砖的密集网格

特征密度:密集平铺

搜索方法:网格区域,无搜索

距离函数:l2 范数

鲁棒性:3(对光照、视点、噪声有一定不变性的图像分类)

雏菊和雏菊

菊花描述符[214.309]受 SIFT 和类 GLOH 描述符的启发,设计用于密集匹配应用,如立体映射和跟踪,据报道比 SIFT 快 40%。参见图 6-24 。Daisy 依赖于一组径向分布且大小增加的高斯卷积核,这些卷积核重叠并类似于花状形状(Daisy)。

9781430259299_Fig06-24.jpg

图 6-24 。(左)菊花图案区域,由四组八个重叠的同心圆组成,外圆中的高斯模糊增加,其中每个圆的半径与高斯核区域标准偏差成比例。重叠的圆形区域提供了针对相邻区域过渡伪影的一定程度的过滤。(右)一个假设的二元遮挡遮罩;较暗的区域表示匹配期间描述符中可能被遮挡和“关闭”的点

Daisy 不需要局部兴趣点,而是在每个像素密集地计算描述符,因为预期的应用是立体映射和跟踪。Daisy 不是像 SIFT 和 GLOH 那样使用梯度幅度和方向计算,而是基于高斯滤波器的一组定向导数来计算一组卷积定向图,以创建八个等角度间隔的定向图。

如图 6-24 所示,每个滤镜区域的大小和每个高斯滤镜中的模糊量随着远离中心而增加,通过在视野中心保持锐度和焦距并在远离中心的地方降低焦距和分辨率来模仿人类视觉系统。像 SIFT 一样,Daisy 也使用局部方向的直方图宁滨来形成描述符。

Daisy 的设计考虑到了优化。卷积方向图方法比 SIFT 和 GLOH 的梯度幅度和方向方法消耗更少的计算周期,但是产生相似的结果。Daisy 方法还包括通过使用一组连续的较小核来优化计算较大的高斯核,以及通过递归计算某些卷积核。另一个优化是使用圆形网格模式而不是 SIFT 中使用的矩形网格,这允许 Daisy 通过旋转采样网格而不是重新计算卷积图来改变旋转。

如图 6-24 (右图)所示,Daisy 还使用二元遮挡遮罩来识别描述符模式的部分,以便在特征匹配距离函数中使用或忽略。这是一个新颖的特征,并且提供了对遮挡的不变性。

Daisy 的 FPGA 优化版本称为 O-Daisy [217],提供增强的旋转不变性。

雏菊汇总分类

光谱:高斯卷积值

特征形状:圆形

特征模式:重叠同心圆

特征密度:每个像素都很密集

搜索方法:密集滑动窗口

距离函数:欧几里得

鲁棒性:3(照明、遮挡、噪声)

卡片

紧凑和实时描述符(CARD)方法 [218]的设计考虑了性能优化,使用基于学习的稀疏散列将描述符转换为支持快速汉明距离匹配的二进制代码。CARD 的一个新概念是从局部像素块中提取方向梯度直方图的查找表描述符,以及将查找表宁滨变换到笛卡尔或对数极坐标箱中。据报道,与 SIFT 和 SURF 相比,CARD 实现了明显更好的旋转和缩放鲁棒性,性能至少比 SIFT 好十倍,比 SURF 略好。

CARD 遵循 RIFF [222][219]的方法进行特征检测,使用位于图像金字塔中八度音程水平之上的快速特征。完整的卡片金字塔包括八度音阶之间的中间等级,以增加分辨率。金字塔等级以image的间隔计算,等级 0 为完整图像。使用 Shi-Tomasi [157]优化的 Harris 角点检测器找到关键点。

像 SIFT 一样,CARD 计算每个像素的梯度,可以使用笛卡尔坐标宁滨,也可以像 GLOH 一样使用对数极坐标宁滨;参见图 6-17 。为了避免代价高昂的将梯度信息插值到直方图面元的 biliner 插值,CARD 通过在宁滨之前旋转宁滨模式来优化这一步骤,如图图 6-25 所示。注意,使用查找表进一步优化了宁滨,查找表包含基于面片中梯度的主方向的函数值。

9781430259299_Fig06-25.jpg

图 6-25 。包含 17 个对数极坐标仓的卡片补丁图案,左侧图像旋转以优化宁滨

如图图 6-25 所示,为了加速宁滨,CARD 不是像 SIFT 等方法那样,基于估计的梯度方向旋转面片来提取和绑定旋转不变的描述符,而是基于梯度方向旋转面片上的宁滨图案,然后执行宁滨,这样速度快得多。图 6-25 显示右边未旋转的宁滨图样,左边被image旋转。所有入库的值被连接并归一化以形成描述符,在报告的最精确形式中描述符为 128 位长[218]。

卡片汇总分类

光谱:梯度幅度和方向

特征形状:圆形,基于金字塔比例和主方向的可变尺寸

特征模式:密集

特征密度:图像金字塔上快速兴趣点处的稀疏

搜索方法:滑动窗口

距离函数:汉明

鲁棒性:3(光照、缩放、旋转)

鲁棒的快速特征匹配

由 Taylor、Rosten 和 Drummond [220] (RFM2.3)开发的 2.3us 中的健壮特征匹配(此处作者创造了这个缩写)是一种新颖、快速的特征描述和匹配方法,针对计算速度和内存占用进行了优化。就所采用的方法和优化的组合而言,RFM2.3 在这里调查的特征描述符中独树一帜,包括稀疏区域直方图和二进制特征码。RFM2.3 中开发的一个关键思想是通过创建原始特征的一组缩放、旋转和仿射扭曲视图来计算同一面片的多个视图的描述符,这提供了在仿射变换下的不变性,如旋转和缩放以及透视。

除了扭曲之外,一些噪声和模糊被添加到扭曲的面片集合中,以为描述符提供鲁棒性。RFM2.3 是可变形描述符类中为数不多的方法之一[344–346]。尺度空间金字塔中的快速关键点被用于定位候选特征,并且为每个关键点计算扭曲面片集。在计算了扭曲的小块集合之后,在该集合中的每个新的小块上再次生成快速拐角,以确定哪些小块是最明显和可检测的,并且选择最佳的小块并将其量化成二进制特征描述符并保存在模式数据库中。

如图 6-26 所示,RFM2.3 在 16x16 区域内使用稀疏的 8x8 采样模式来捕获补丁。选择 8×8 采样模式中的 13 个像素的稀疏集合来形成稀疏模式的模式数据库中的索引。索引采用 13 位整数形式,如果像素值大于面片平均值,则每一位都将设置为 1,从而将索引限制为 2¹³ 或 8192 个条目,因此数据库中的多个要素可以共享同一个索引。然而,使用汉明距离可以非常快速地计算出特征差异,因此索引主要用作组织相似补丁的数据库关键字。训练阶段确定要包含在特征数据库中的最优索引值集,以及要保存的最优模式,因为一些模式比其他模式更明显。最初,以全分辨率捕获特征,但是如果在全分辨率下发现很少好的特征,则在图像金字塔的下一级提取附加特征。

9781430259299_Fig06-26.jpg

图 6-26 。RFM2.3(左)描述符稀疏采样模式。(右)使用 13 个样本的稀疏描述符,用于将特征索引构建到数据库中

描述符在训练期间被建模为 64 值的归一化强度分布函数,其大小被减小以在两个过程中计算最终的描述符向量:首先,64 个值被减小到像素强度分布的五格直方图;第二,当训练完成时,如果柱被使用,则每个直方图柱被二进制编码为 1 位,如果柱很少被使用,则为 0 位。所得到的描述符是适合于汉明距离的压缩的二进制编码的位向量。

RFM2.3 摘要分类法

光谱:标准化直方图斑块强度编码成二进制斑块指数代码

特征形状:矩形,多视点

特征图案:15x15 像素块中的稀疏图案

特征密度:快速 9 兴趣点稀疏

搜索方法:在图像金字塔上滑动窗口

距离函数:汉明

鲁棒性:4(光照、比例、旋转、视点)

礁石〔??〕,CHOG

旋转不变快速特征(RIFF)【222】【219】方法受到移动增强现实中的跟踪和映射应用的启发。RIFF 方法的基础包括径向梯度变换(RGT) 的开发,其以计算高效且旋转不变的方式表达梯度方向和幅度。RIFF 的另一个贡献是一种跟踪方法,据报道,它比 KLT 更准确,性能提高了 26 倍。据报道 RIFF 比 SURF 快 15 倍。

RIFF 使用在位于尺度空间中的快速兴趣点处计算的 HOG 描述符,并且通常遵循作者在 CHOG 223 中的先前工作的方法,用于降低维度、低比特率宁滨。在宁滨梯度之前,径向梯度变换(RGT)用于创建旋转不变的梯度格式。如图 6-27 (左图)所示,RGT 使用两个正交的基向量( r,t) 形成围绕面片中心点 c 的径向坐标系,HOG 梯度 g 投影到( r,t) 上表示为旋转不变向量(gTr宁滨建议使用矢量量化器和标量量化器,如图图 6-27 所示。

9781430259299_Fig06-27.jpg

图 6-27 。RIFF 描述符背后的概念[222][219],部分基于 CHOG [223]

如图 6-27 (右图)所示,可以通过在近似径向梯度变换(ARGT)中使用梯度方向近似来优化基向量,使用沿同一梯度线的相邻、标准化像素之间的简单差异和简单的 45 度量化来优化使其易于计算。在图 6-27 (中左图)中也要注意,柱状图是通过在环形区域内每隔一个像素进行采样来优化的,出于实际原因,使用四个环形区域作为区分度和性能之间的折衷。为了满足量化梯度直方图仓的实时系统性能目标,RIFF 使用 5x5 标量量化器,而不是矢量量化器。

在图 6-27 (左图)中, g 在点 c 到径向坐标系( r,t )上的梯度投影用于旋转不变的梯度表达式,描述符面片以 c 为中心。中间左侧的图像(环形)说明了宁滨方法,使用四个环形环,这降低了维数,仅采样灰色像素提供了 2 倍的加速。中间和中间右侧的图像说明了直方图量化的仓中心机制:(1)更灵活的标量量化器 SQ-25 和(2)更快的矢量量化器 VQ-17。右图显示了从中心向外辐射的梯度方向的径向坐标系基向量,显示了计算效率更高的 ARGT 或近似径向梯度变换(RGT),它不使用浮点数学(RGT 未显示,参见[222])。

RIFF 摘要分类法

光谱:近似径向梯度的局部区域直方图

特征形状:圆形

特征模式:每隔一个像素稀疏

特征密度:图像金字塔上快速兴趣点处的稀疏

搜索方法:滑动窗口

距离函数:对称 KL-散度

鲁棒性:4(光照、比例、旋转、视点)

链码直方图

链码直方图(CCH) [206]描述符通过宁滨连接成分的方向(在这种情况下是连接的周界像素)将周界的形状记录为直方图。当周界被逐个像素遍历时,遍历的方向被记录为一个数字,如图 6-28 中的所示,并记录在直方图特征中。为了匹配 CCH 特征,可以使用 SSD 或 SAD 距离度量。

9781430259299_Fig06-28.jpg

图 6-28 。制作直方图的链码过程。(从左到右)1。连接周长可能改变的 8 个可能方向。2.每个连接的周界方向变化的链码值;确定链码值的方向是从中心像素开始。3.一个带有由黑色像素高亮显示的连接周界的对象。4.从顶部像素开始,沿着连接的周界的对象的链码。5.所有链码值的直方图

美国专利 US4783828 涵盖了链码直方图。CCH 发明于 1961 年[206],也被称为弗里曼链码。CCH 的一个变体是顶点链码[207],其允许描述符大小的减少,并且据报道具有更好的准确性。

数字网络

由 Hundelshausen 和 Sukthankar 开发的 D-NETS(Descriptor-NETS)[135]方法放弃了小块或矩形描述符区域,支持一组在端点连接的条带。d-网允许一族由一组端点之间的有向图组成的带状模式;它没有具体限制可以使用的端点或条形图案的类型。D-NETS 论文讨论了三种模式的结果:

  • 团 D 网:连接所有兴趣点的完全连接的带状网络。虽然在该方法中使用的兴趣点的类型可能不同,但是最初的工作使用 SIFT 关键点报告结果。
  • 迭代 D-网:使用兴趣点的子集动态创建网络,使用停止标准增加连接性,以优化连接密度,从而获得所需的匹配性能和准确性。
  • 密集采样的 D 网:该变体不使用兴趣点,而是在规则间隔的网格上对网进行密集采样,10 像素网格是凭经验选择和优选的,在网格位置添加一些滞后或噪声以减少病理采样伪影。密集方法适用于高度并行的实现,以提高性能。

关于三种 D 网模式的图示和一些讨论,见图 4-9 。

每个条带是在两点之间采样的原始像素值的数组。描述符本身被称为 d-token ,并且提出了用于计算 d-token 的各种方法,例如类似于 FERNS 或 ORB 的条带中像素值之间的二进制比较,以及比较条带阵列的 1D 傅立叶变换,或者使用小波。报告的最佳结果是一种经验设计的 d-token,创建如下:

  • 条带向量采样,其中每个像素条带向量在像素条带向量长度的 10%和 80%之间的等间距位置被采样;这种采样安排是根据经验确定的,以忽略端点附近的像素。
  • 量化像素条带矢量通过将数值整合成一组均匀的组块, s 降低噪声。
  • 标准化用于缩放和平移的条带矢量。
  • 向量值离散化到有限的位范围内, b
  • 所有统一的组块串接成 d-token,d-token 是一个长度为 sb* 的位串。

描述符匹配利用了一种高效新颖的哈希和假设对应投票方法。据报道,D-NETS 结果比 ORB 或 SIFT 具有更高的精确度和召回率。

D-NETS 摘要分类法

光谱:标准化的平均线性像素强度块

要素形状:线段连接的网络

特征模式:所选点之间的稀疏线段

要素密度:沿线稀疏

搜索方法:滑动窗口

距离函数:散列和投票

鲁棒性:5(照明、缩放、旋转、视点、遮挡)

局部渐变图案

LBP 方法的变体,局部梯度模式(LGP) [204]使用局部区域梯度而不是局部图像强度对比较来形成二进制描述符。计算局部区域中每个像素的 3×3 梯度,然后将每个梯度幅度与所有局部区域梯度的平均值进行比较,如果该值较大,则分配二进制比特值 1,否则分配 0。作者声称,在人脸识别算法中,准确率和区分度都比基本的 LBP 有所提高,包括假阳性的减少。然而,由于局部区域梯度计算,计算要求大大增加。

LGP 汇总分类

光谱:中心像素和局部区域梯度之间的局部区域梯度比较

特征形状:方形

特征模式:每个像素 3×3 内核区域

特征密度:在 3x3 区域密集

搜索方法:滑动窗口

距离函数:汉明

鲁棒性:3(光照、缩放、旋转)

局部相位量化

局部相位量化(LPQ) 描述符[166–168]旨在对图像模糊具有鲁棒性,并利用傅立叶相位信息的模糊不敏感特性。由于需要傅里叶变换来计算相位,因此存在一些计算开销;然而,整数 DFT 方法可以用于加速。据报道,LPQ 为均匀模糊以及均匀照明变化提供了鲁棒性。据报道,LPQ 在非模糊图像上提供了与 LBP 和 Gabor 滤波器组方法相等或稍好的精度。虽然主要用于纹理描述,但 LPQ 也可以用于局部特征描述,以通过将 LPQ 与另一种描述符方法(如 SIFT)相结合来增加模糊不变性。

为了计算,首先在图像的小区域(例如 8×8 块)上的每个像素处计算 DFT。在描述符中使用了来自相位谱的低四个频率分量。作者注意到内核大小影响模糊不变性,因此更大的内核块可以以增加计算开销为代价提供更多的不变性。

在量化之前,使用白化变换对系数进行去相关,从而产生均匀的相移和 8 度旋转,这保持了模糊不变性。对系数去相关有助于创建统计上独立的样本,以便更好地量化。

对于每个像素,使用类似 LBP 的 8 位二进制编码位向量和简单的标量量化器,将得到的向量量化到 8 维空间中,以产生 1 和 0 值。使用从 8 维空间导出的 256 个超立方体来执行特征向量的宁滨。得到的特征向量是 256 维的 8 位代码。

LPQ 摘要分类法

光谱:使用 DFT-> 8 位二进制代码的局部区域白化相位

特征形状:方形

特征模式:8×8 内核区域

特征密度:每个像素都很密集

搜索方法:滑动窗口

距离函数:汉明

鲁棒性:3(对比度、亮度、模糊度)

基础空间描述符

本节将介绍如何使用基空间来描述计算机视觉应用中的图像特征。一个基空间由一组函数组成,即基函数,它们作为一个集合组合在一起,比如像傅立叶级数这样的级数(在第三章中讨论)。一个复信号可以分解到一个选定的基空间作为描述符。

基函数可以用来描述、重构或合成信号。它们需要一个正向转换来将值投影到基集中,并需要一个反向转换来将数据移回原始值。一个简单的例子是在以 2 为基数的数字系统和以 10 为基数的数字系统之间转换数字;每种基础都有优点。

有时,将数据集从一个基础空间转换到另一个基础空间对于深入了解数据或者处理和过滤数据非常有用。例如,作为笛卡尔坐标系中的像素组在时域中捕获的图像可以被变换到其他基空间,例如频域中的傅立叶基空间,用于处理和统计分析。计算机视觉应用的良好基础空间将提供正向和反向变换。同样,傅里叶变换满足这些标准,以及其他几个基本空间。

基空间类似于坐标系,因为两者都有到相关空间的可逆变换。在某些情况下,简单地将特征光谱转换到另一个坐标系中使得分析和表示更简单和更有效。(第四章讨论用于特征表示的坐标系。)本章中调查的几个描述符使用非笛卡尔坐标系,包括使用极坐标宁滨的 GLOH 和使用径向坐标描述符的 RIFF。

傅立叶描述符

傅立叶描述符[227]将特征数据表示为正弦和余弦项,这可以在傅立叶功率谱中观察到。傅立叶级数、傅立叶变换和快速傅立叶变换用于广泛的信号分析,包括 1D、2D 和 3D 问题。没有傅立叶方法的图像处理或计算机视觉的讨论是不完整的,所以我们将在这里探索傅立叶方法及其在特征描述中的应用。

布拉采维尔[227]在标准文本中已经很好地发展了傅立叶级数和傅立叶变换背后的数学和理论,我们讨论了傅立叶功率谱在特征描述中的应用,并在此提供了基本原理的最少处理以构建讨论;参见第三章。傅立叶级数背后的基本思想是根据幅度和相位定义一系列正弦和余弦基函数,这些函数可以求和来近似任何复杂的周期信号。相反,傅立叶变换用于将复杂的周期信号分解成正弦和余弦基项的傅立叶级数组。诸如线或 2D 图像区域的信号的傅立叶级数分量被用作该区域的傅立叶描述符。

对于本讨论,傅立叶描述符是从傅立叶功率谱中选择的成分,通常我们选择低频成分,它们承载大部分功率。这里有几个使用傅立叶描述子的例子;注意,可以使用傅立叶幅度和相位中的一个或两个。

  • LBP 直方图的傅里叶谱。如图图 3-10 所示,一个 LBP 直方图集合可以表示为一个傅立叶谱幅值,这使得直方图描述子具有旋转不变性。
  • 形状周长的傅立叶描述子。如图图 6-29 所示,多边形物体的形状可以用傅立叶方法描述,使用一系列以一定间隔(如 10 度)从周长到质心的线段。该阵列被馈送到 FFT 以产生形状描述符,该形状描述符是比例和旋转不变的。

9781430259299_Fig06-29.jpg

图 6-29 。(左)多边形形状长轴、短轴和边界框。(中心)具有从质心到周长的径向样本长度的对象,每个样本长度都保存在一个数组中,经过标准化。(右)图像输入傅里叶频谱,产生傅里叶描述符

  • 梯度直方图的傅立叶描述子。很多描述子用梯度来表示特征,用梯度幅度或方向直方图来对结果进行 bin。傅立叶频谱幅度可以用于从梯度信息创建描述符,以增加不变性。
  • 径向线样本的傅里叶谱。如在 RFAN 描述符[136]中使用的,来自局部区域的像素值的径向线样本可以被表示为傅立叶幅度的傅立叶描述符。
  • 傅里叶频谱相位。本章描述的 LPQ 描述符利用了描述符中的傅里叶频谱相位信息,据报道,由于相位信息,LPQ 对模糊不敏感。

描述符构建的其他基本函数

除了傅立叶基系列,其他函数系列和基集用于描述符构建、模式识别、和图像编码。然而,这种方法通常应用于全局或区域范围。参见第三章了解其他几种方法的详细信息。

稀疏编码方法

在关于基空间描述符的讨论中,我们简要讨论稀疏编码方法,因为它们类似于基空间。采用许多方法来进行稀疏编码[530–533],使用术语上的细微差异,包括视觉词汇词汇袋方法【537】。然而,稀疏编码方法使用一组减少的学习特征描述符或代码,而不是基函数。主要思想是从训练图像中建立基本特征的稀疏码书,并与稀疏码书进行匹配。稀疏码可以是简单的图像补片或其他描述符。

一系列机器学习方法(在本书的范围之外,参见 Prince 的[546]以获得关于机器学习的更多信息)被用于寻找最佳稀疏特征集。此外,每种稀疏编码方法可能更喜欢特定类型的分类和匹配。稀疏码被关联为子集或签名以识别对象。本章中讨论的任何局部特征描述符方法都可以用作稀疏码本的基础。稀疏编码和相关方法将在第四章中详细讨论。有关稀疏编码的更多详细信息,请参见 Aharon、Alad 和 Bruckstein [536]的工作,以及飞飞、Fergus 和 Torralba [537]。

稀疏编码方法的例子

作为使用稀疏码进行对象识别的一个例子,Ren 和 Ramaan [125]改进了 HOG 方法,用称为稀疏码直方图(HSC )的新特征描述符代替 HOG 梯度直方图特征;参见图 6-30 。使用稀疏码书的相关工作包括分层匹配追踪方法(HMP)【140】,该方法构建了从图像补丁导出的补丁级稀疏码的分层特征分层结构,以产生局部特征。来自整个图像的块级稀疏码被组合以产生图像级特征。HMP 的一个近似变体是多路径稀疏编码方法[124],它有效地将多种尺寸的较小和中等尺寸的补丁以及多层稀疏编码结合到单个系统中。

9781430259299_Fig06-30.jpg

图 6-30 。一种使用稀疏编码的特征学习方法,展示了如何从一组学习到的稀疏码构建稀疏码直方图(HSC)。据报道,HSC 方法[125]在许多情况下都优于 HOG

多边形形状描述符

多边形形状描述符为任意多边形或斑点计算一组形状特征,并且使用统计矩或图像矩来描述形状(如第三章中所讨论的)。这些形状特征基于面形状的周长。在测量和描述之前,用于描绘图像周界以突出形状的方法通常是复杂的、凭经验调整的图像预处理操作流水线,如阈值处理、分割和形态学(如在第二章中所讨论的)。一旦多边形形状被描绘,形状描述符被计算;参见图 6-31 。通常,多边形形状方法适用于较大区域尺寸的特征。在文献中,这个话题也可能被讨论为图像矩。要深入了解图像时刻的主题,请参阅 Flusser 等人的文章。艾尔。[518].

9781430259299_Fig06-31.jpg

图 6-31 。多边形形状描述符。(左)孔雀石碎片。(右)在二值化阈值、周长追踪和特征标注后定义和标注的多边形形状。(使用 ImageJ Fiji 进行图像处理和颗粒分析)

多边形形状方法通常用于医学和工业应用中,例如用于细胞生物学的自动显微镜,以及用于工业检查;参见图 6-31 。商业软件库可用于多边形形状描述,通常称为粒子分析斑点分析。参见附录 C 。

MSER 方法

最大稳定极值区域(MSER)方法[194]通常在文献中作为感兴趣区域检测器讨论,事实上也确实如此。然而,我们在形状描述符部分包括 MSER,因为 MSER 区域可能比其他兴趣点方法大得多,例如 HARRIS 或 FAST。

开发 MSER 检测器是为了解决宽基线立体声系统中的视差对应。立体系统产生扭曲和复杂的几何深度场,并且根据相机之间的基线和对象到相机的距离,必须补偿各种几何效果。在宽基线立体系统中,更靠近相机的特征在仿射变换下更加失真,使得更难找到左/右图像对之间的精确匹配。MSER 方法试图通过匹配斑点状特征来克服这个问题。MSER 区域类似于形态学斑点,对倾斜和光照相当鲁棒。MSER 本质上是分水岭算法的一个有效变体,除了 MSER 的目标是找到一个阈值范围,使分水岭盆地的大小保持不变。

MSER 方法包括基于二进制强度阈值将像素分类成一组区域;连通分量图案中在阈值范围内具有相似像素值的区域被认为是最大稳定的。为了计算 MSER,在二进制强度阈值循环中对像素进行分类,该循环从最小到最大扫描强度值。首先,在单个图像通道(例如亮度通道)上将二进制阈值设置为低值,例如零。像素< the threshold value are black, pixels >=白色。在每个阈值级别,保存一个连通分量或像素的列表。强度阈值从 0 增加到最大像素值。不随着强度变化而增长或收缩或改变的区域被认为是最大稳定的,并且 MSER 描述符记录最大区域的位置和相应的阈值。

在立体应用中,较小的 MSER 区域是优选的,并且相关性被用于最终对应,并且相似性在一组圆形 MSER 区域内以选择的旋转间隔被测量。MSER 的一些有趣优势包括:

  • 多尺度特征和多尺度检测。因为 MSER 特征不需要任何图像平滑或尺度空间,所以粗糙特征和精细边缘特征都可以被检测到。
  • 跨整个区域全局计算的可变大小特征,不限于面片大小或搜索窗口大小。
  • 仿射变换不变性,这是一个特定的目标。
  • 对形状变化的一般不变性和检测的稳定性,因为极值区域往往在宽范围的图像变换中被检测到。

MSER 也可以被认为是形状描述符的基础,并作为形态学分割方法的替代方法。每个 MSER 区域都可以用形状度量来分析和描述,这将在本章后面讨论。

斑点和多边形的对象形状度量

对象形状度量是强大的,并且在不变性和鲁棒性方面产生许多自由度。对象形状度量不同于局部特征度量,因为对象形状度量可以描述更大的特征。这对于逐帧跟踪是有利的。例如,可以在各种条件和不变性下逐帧跟踪仅由几个简单的对象形状度量(如面积、周长和质心)描述的大对象。欲了解更多信息,请参阅参考文献[128,129]中关于 2D 形状描述方法的综述。

形状可以用几种方法来描述,包括:

  • 物体形状矩和度量:本节的重点。
  • 影像时刻:参见第三章中的“影像时刻”
  • 傅立叶描述符:本章讨论的和第三章。
  • 形状上下文特征描述符:本节讨论。
  • 周界描述的链码描述符:本节讨论。

物体形状与形态学领域密切相关,形态学处理的计算机方法在第二章中详细讨论。也参见本章前面关于形态学兴趣点的讨论。

在计算机视觉研究的许多领域,局部特征似乎比基于物体形状的特征更受青睐。形状分析方法缺乏普及可能是对创建过滤、形态学和分割的预处理流水线以准备用于形状分析的图像的努力的反应。如果图像没有被正确地预处理和准备,形状分析是不可能的。(见第八章对假想形状分析预处理流水线的讨论。)

多边形形状度量可以用于几乎任何场景分析应用,以找到常见的对象,并对它们的大小和形状进行精确测量;典型的应用包括生物学和制造业。通常,大多数多边形形状度量是旋转和比例不变的。表 6-7 提供了可从区域形状(二元形状和灰度形状)得出的一些常用度量的样本。

表 6-7 。各种常见的对象形状和斑点对象度量

|

对象二进制形状度量

|

描述

|
| --- | --- |
| 周长 | 物体边缘周围所有点的长度,包括对角线长度~=1.4 和相邻长度之和=1 |
| 面积 | 以像素为单位的对象总面积 |
| 凸包 | 多边形形状或包围所有周界点的一组线段 |
| 图心 | 物体质量的中心、所有像素坐标的平均值或所有周长坐标的平均值 |
| 傅立叶描述符 | 傅立叶频谱来自包含一组径向线段的长度的阵列,该组径向线段以规则的角度从质心到周长,用于模拟 1D 信号函数,1D 信号函数被馈送到 1D FFT,并且该组 FFT 幅度数据被用作所选的一组倍频程频率的度量 |
| 长/短轴 | 穿过包含在周界内并与周界接触的质心的最长和最短线段 |
| 弗雷迪!弗雷迪 | 物体的最大测径 |
| 宽度 | 最短井径 |
| 纵横比 | Feret / Breadth(封檐带/檐带) |
| 圆 | 4 X Pi X 面积/周长 2 |
| 圆 | 4 X 面积/(πX feret 2)(也可以从傅立叶描述符计算) |
| 面积当量直径 | sqrt((4 / Pi) X 面积) |
| 周长等效直径 | 面积/Pi |
| 等效椭圆 | (pi x fere x breadth)/4 |
| 紧凑 | sqrt((4 / Pi) X 面积)/固定 |
| 固态 | 面积/凸面 _ 面积 |
| 凹面 | 凸面 _ 面积-面积 |
| 凸面 | 凸包/周长 |
| 形状 | 视野 2 /面积 |
| 修改率 | (2 个 miner)/feret |
| 形状矩阵 | 多边形形状的 2D 矩阵表示或绘图(可以使用笛卡尔或极坐标;参见图 6-32 |
| 灰度对象 形状度量 | |
| SDM 地块 | 参见第三章,【纹理度量】一节。 |
| 散点图 |
参见第三章,【纹理度量】一节。 |
| 灰度像素值的统计矩 | 最小值
最大值
中值
平均值
平均偏差
标准差
方差
偏度
峰度
熵 |

*****注意:一些二进制对象度量也适用于灰度对象。

9781430259299_Fig06-32.jpg

图 6-32 。用于对象周长的形状矩阵描述符[335]。(左二图)笛卡尔坐标形状矩阵。(右图)极坐标形状矩阵使用三行八个编号的面元区域,灰色框表示要面元的像素。注意,可以一起使用多个形状矩阵。如果像素填充至少一半的二进制区域,则设置矩阵中的值,不使用插值

形状被认为是二进制的;然而,也可以使用灰度形态学在强度通道对象周围计算形状。周界被认为是一组相连的部分。该形状由二进制阈值或强度带内的单个像素宽的周界来定义,并且像素在周界上、周界内或周界外。可以通过逐个像素地扫描图像并检查相邻的接触像素邻居的连通性来计算周界边缘。或者,周长可以根据本章前面讨论的形状矩阵[335]或链码来计算。计算每个线段(像素)的周长,其中线段长度= 1 表示水平和垂直邻居,而image表示对角邻居。

周界可以用作掩模,并且可以在该区域内计算灰度或颜色通道统计度量。对象区域是周界内所有像素的计数。质心可以从包含在周界区域内的所有点的所有 (x,y) 坐标的平均值计算,或者从所有周界 (x,y) 坐标的平均值计算。

形状度量是强大的。例如,形状度量可以用于在测量之前从场景中移除或排除对象。例如,当区域小于给定的大小时,或者如果质心坐标在给定的范围之外,可以从场景中移除对象。

如图图 6-29 和图 2-18 所示,傅立叶描述子提供了一个旋转和比例不变的形状度量,也具有一些遮挡不变性。确定傅立叶描述符的方法是从质心到圆周上的点进行一组等角度间隔的半径测量,例如每 10 度,然后将半径测量组合成 1D 阵列,该阵列通过 1D FFT 运算以产生物体的傅立叶矩。或者径向像素轮辐可以用作描述符。

图 6-29 所示的其他有用的形状度量的例子包括具有长轴和短轴的边界框,其具有通过质心到周长的最长和最短直径段;这可以用来确定物体的旋转方向。

SNAKES 方法 [540]使用样条模型将兴趣点的集合(如选定的周界点)拟合到区域轮廓中。兴趣点是样条点。SNAKE 可用于逐帧跟踪轮廓特征,在兴趣点位置周围变形。

通常,2D 物体形状方法可以扩展到 3D 数据;然而,我们在这里不探索 3D 对象形状度量,参见参考文献[200,201]的 3D 形状描述符的调查。

形状上下文

由 Belongie、Malik 和 puzi cha[239–241]开发的形状上下文方法描述了使用周界上的参考点作为笛卡尔轴原点的局部特征形状,以及相对于参考点原点的宁滨选定周界点坐标。每个点的相对坐标被收集到对数极坐标直方图中。形状上下文与 1985 年开发的早期形状矩阵描述符[335]相关,如图 6-32 所示,该描述符也使用对数极坐标描述物体的周长。形状上下文方法提供了变化,在作者的几篇论文中有描述[239–241]。这里,我们来看几个关键概念。

首先,以均匀的间隔稀疏地采样对象的周界边缘,通常为粗略宁滨保留大约 100 个边缘采样点。稀疏周界边缘点通常不同于兴趣点,并且使用周界追踪来发现。接下来,在对象的周界上选择参考点作为笛卡尔空间的原点,并且计算从原点到每个其他周界点的矢量角度和幅度image。幅度或距离被归一化以拟合直方图。每个稀疏周界边缘点用于计算与原点的切线。最后,使用image将每个归一化向量装入对数极坐标直方图,这被称为形状上下文

在匹配期间,在描述符对之间产生对准变换,这产生目标和选择的模式之间的差异,并且可以用于重建。对准变换可以根据需要从仿射、欧几里德、基于样条的和其他方法中选择。对应使用匈牙利方法,该方法包括直方图相似性,并且通过使用正切角相异度的对准变换强度来加权。匹配还可以采用局部外观相似性度量,例如斑块或颜色直方图之间的归一化相关性。

形状上下文方法提供了对缩放、平移、旋转、遮挡和噪声的不变性的测量。参见图 6-33 。

9781430259299_Fig06-33.jpg

图 6-33 。形状上下文方法。(左)周界点被测量为形状向量,包括角度和距离,相对于作为参考笛卡尔原点的所选周界点。(右)形状向量被装入对数极坐标直方图特征描述符中

3D、4D、体积和多模态描述符

随着越来越多的 3D 传感器的出现,例如立体相机和其他深度感测方法,以及无处不在的加速度计和内置于廉价移动设备中的其他传感器,3D 特征描述和多模态特征描述的领域开始蓬勃发展。

许多 3D 描述符与机器人研究和 3D 定位相关联。由于 3D 特征描述领域处于开发周期的早期,尚不清楚哪些方法将被广泛采用,因此我们在此仅介绍 3D 描述符方法的一小部分示例。其中包括 3D HOG [196],3D SIFT [195]和 HON 4D [198],这些都是基于熟悉的 2D 方法。我们建议感兴趣的读者参考参考文献[200,201,216]中的 3D 形状描述符。几个有趣的 3D 描述符度量在点云库中作为开源可用,【2】,包括基于半径的表面描述符(RSD)【539】、主曲率描述符(PCD)、直方图方向签名(SHOT)【541】、视点特征直方图(VFH)【398】和旋转图像【538】。

推动 3D 描述符研究的关键应用包括机器人和活动识别,在这些应用中,随着特征的变形和变形,会对其进行逐帧跟踪。目标是定位位置和识别人类动作,如行走、挥手、转身或跳跃。另请参见 3D 的 LBP 变体:V-LBP 和 LBP-TOP,本章前面已经介绍过,如图 6-12 所示,也用于活动识别。因为 2D 特征在活动识别期间是移动的,所以时间是结合到描述符中的第三维。我们在这里调查一些著名的 3D 活动识别研究。

动作识别工作中的一个关键概念是将熟悉的 2D 特征扩展到时空的 3D 空间中,其中 3D 空间由随时间推移的 2D x,y 视频图像序列 t 组成具有形式 v(x,y,t)的体积表示。此外,在许多动作识别描述符方法中使用 3D 表面法线、3D 梯度幅度和 3D 梯度方向。

3D 猪

3D HOG [196]部分基于体积特征[199]中的一些早期工作。总的想法是在 3D HOG 描述符公式中使用熟悉的 HOG 描述符[106],使用一堆连续的 2D 视频帧或切片作为 3D 体积,并计算体积内相邻帧的时空梯度方向。为了提高效率,基于与 Viola Jones 方法中使用的积分图像方法相同的思路,开发了一种新颖的积分视频方法作为图像金字塔的替代方法。

[199]中还开发了一种使用积分视频概念的类似方法,在体积中的 4 到 40 个视频帧上使用 64x64 的子采样空间,使用像素强度而不是梯度方向。积分视频方法,也可以被认为是积分体积方法,允许将来自堆叠的连续视频帧的任意立方体区域整合在一起,以计算任意尺度上的局部梯度方向。与使用预先计算的图像金字塔相比,这是空间高效和时间高效的。事实上,这种完整的视频集成方法是这项工作的一个新贡献,可以应用于 2D 或 3D 中的强度、颜色和梯度幅度等其他光谱,以消除对图像金字塔的需要,从而在图像比例方面提供更多选择,而不仅仅是八度音阶。

在图 6-34 中说明了 3D HOG 描述符的计算。为了找到特征关键点来锚定描述符,使用 Harris 算子的时空扩展[197],然后从关键点处的立方区域中的定向梯度的平均值计算直方图描述符。由于梯度幅度对照明变化敏感,因此使用梯度方向来提供照明不变性,并且使用简单的 x、y、z 导数在 3D 立方体区域上计算梯度方向。使用积分视频方法可以快速计算任意三维长方体的平均梯度方向。通过将每个矢量投影到一个正二十面体的 20 面形的面上来合并所有矢量,梯度方向被量化为直方图面元,如图图 6-34 所示。20 个二十面体面充当直方图仓。时空特征的稀疏集合被组合成视觉词汇表中的特征包或单词包。

9781430259299_Fig06-34.jpg

图 6-34 。HOG 3D 描述符计算。(左)2x2x2 描述符单元块。(左中)在 2x2x2 单元子块上计算的梯度方向直方图。(右中)通过将向量交集投影到 20 面二十面体的面来量化的渐变方向。(右)在积分视频块上计算的平均梯度方向(体积矢量积分)

她是 4dt1

与 3D HOG 类似的方法称为 HON 4D [198],它将描述符计算为定向 4D 法线的直方图,其中 3D 表面法线+时间总计为四维(4D)。HON 4D 使用深度图像序列或 3D 深度图作为计算描述符的基础,而不是像 3D HOG 方法中那样使用 2D 图像帧。所以需要深度相机。在这方面,HON 4D 类似于计算 3D 表面法线的一些体绘制方法,并且可以使用类似的方法加速[452,453,454]。

在 HON 4D 方法中,表面法线捕捉每个物体的表面形状线索,法线方向随时间的变化可用于确定运动和姿态。在这种方法中,只有曲面法线的方向是重要的,因此法线长度都被归一化为单位长度。结果,宁滨到直方图的作用不同于 HOG 风格的宁滨,因此时间的第四维对帧与帧之间的梯度差异进行编码。使用 4D 投影函数对 HON 4D 描述符进行分箱和量化,该投影函数将局部表面法线方向量化到 600 单元的多边形中,该多边形是 2D 多边形到 4 空间的几何扩展。

考虑使用梯度方向的洪 4D 方法与使用梯度幅度的霍格方法的区别。如果两个表面在梯度幅度方面相同或相似,则 HOG 样式描述符不能区分;然而,由于描述符中使用的曲面法线的方向,HON 4D 风格描述符可以区分。当然,计算 3D 法线是计算密集型的,没有考虑访问体积的每个组件所需的非连续内存访问模式的特殊优化。

3D SIFT

3D SIFT 方法[195]从 2D SIFT 特征方法开始,并将特征宁滨重构为使用体积时空区域v(x,y,t),,如图 6-35 中的所示。

9781430259299_Fig06-35.jpg

图 6-35 。将 3D SIFT [195]矢量直方图仓计算为三个连续 2D 图像帧的体积空间或 3D 时空区域中子体积的组合梯度方向的组合

梯度对方向的 3D 方向计算如下:

image

image

image

该方法为每个关键点处的三维空间中的梯度方向的每个角度提供了唯一的二值( φ,θ )表示。宁滨阶段的处理方式不同于 SIFT,而是使用由球面坐标空间中的经线和纬线定义的正交面元。计算起来更简单,但需要对每个值进行归一化,以考虑从两极到赤道的表观尺寸的球面差异。

为了计算 SIFT 描述符,每个子直方图的 3D 梯度方向用于引导描述符关键点处的 3D 区域的旋转指向 0,这提供了对描述符的旋转不变性的测量。每个点将被表示为一个单一的梯度幅度和两个方向向量( φ,θ ),而不是一个,如 2D SIFT 描述符宁滨是在相邻立方体的三维上计算的,而不是在 2D SIFT 描述符的二维上。

一旦特征向量被分箱,使用分层 K-means 聚类将特征向量集聚类成相似特征的组,或者聚类成时空单词词汇表中的单词。聚类之外的另一个步骤可以是使用稀疏编码方法[115–117]减少特征集,但是没有尝试稀疏编码步骤。

据报道,使用 3D SIFT 进行动作识别的结果与其他类似方法相比相当好;参见参考文献[195]。

摘要

在这一章中,我们调查了各种各样的局部兴趣点检测器和特征描述符方法,以了解从业者在做什么,包括 2D 和 3D 方法。第五章中的视觉分类法用于根据描述符族划分特征描述符调查,如局部二进制方法、光谱方法和多边形形状方法。局部描述符和区域描述符之间有一些重叠,然而这一章试图把重点放在局部描述符方法上,把区域方法留给第三章。局部兴趣点检测器在简单的分类法中讨论,包括基于强度的区域方法、基于边缘的区域方法和基于形状的区域方法,包括许多兴趣点检测器方法使用的关键概念和数学的背景。讨论了选择合适的兴趣点检测器的一些困难,并对几种检测器方法进行了综述。

本章还强调了对通用描述符方法的改进。例如,通过改变所使用的描述符光谱,例如 LBP 与梯度方法,或者通过用不同的方法替换兴趣点检测器,来改进许多描述符。根据在第五章中开发的分类属性,为特征描述符提供了摘要信息,以便能够进行有限的比较,使用的概念来自对第四章中提出的局部特征描述设计概念的分析。


1

2*

七、基础事实数据、内容、指标和分析

买真理,不卖真理。

——箴言 23:23

本章讨论了几个与真实情况数据相关的主题,真实情况数据是计算机视觉度量分析的基础。我们通过例子来说明基础数据设计和使用的重要性,包括手动和自动方法。然后,我们提出了一种方法和相应的真实情况数据集,用于测量与人类视觉系统响应和人类期望相比的兴趣点检测器响应。此处还包括在第五章中开发的一般稳健性标准和一般视觉分类法的应用示例,应用于假设真实情况数据的准备。最后,我们看看当前的艺术,它的最佳实践,以及可用的真实情况数据集的调查。

关键主题包括:

  • 创建和收集真实情况数据:人工与合成方法
  • 真实情况数据的标记和描述:自动化与人工注释
  • 选定的地面实况数据集
  • 与真实数据配对的指标
  • 过拟合、欠拟合和测量质量
  • 公开可用的数据集
  • 一个使用合成真实情况数据集比较人类视觉系统和机器视觉检测器的示例场景

真实情况数据可能不是一个前沿的研究领域,但它与机器视觉的算法一样重要。让我们探索一些最著名的方法,并考虑一些开放的问题。

什么是真实情况数据?

在计算机视觉的背景下,地面实况数据包括一组图像和图像上的一组标签,并定义了一个用于物体识别的模型,如第四章所述,包括关键特征的数量、位置和关系。根据问题的复杂程度,标签可以由人工添加,也可以通过图像分析自动添加。兴趣点、角点、特征描述符、形状和直方图等标签的集合形成了一个模型。

可以使用各种机器学习方法来训练模型。在运行时,检测到的特征被馈送到分类器中,以测量检测到的特征和建模的特征之间的对应关系。建模、分类和训练是统计和机器学习问题,但是,这超出了本书的范围。相反,我们关心的是真实情况图像的内容和设计。

因此,创建真实情况数据集可能包括以下主要任务:

  • 模型设计。模型定义了对象的组成——例如,一组 SIFT 特征的计数、强度和位置关系。该模型应该正确地适合问题和图像数据,以便产生有意义的结果。

  • Training set. This set is collected and labeled to work with the model, and it contains both positive and negative images and features. Negatives contain images and features intended to generate false matches; see Figure 7-1.

    9781430259299_Fig07-01.jpg

    图 7-1 。所有真实情况数据的集合,由正面和负面训练组成的例子

  • 测试设置。收集一组图像用于对照训练集进行测试,以验证模型预测正确匹配的准确性。

  • 分类器设计。这是为了满足应用在速度和准确性方面的目标而构建的,包括模型的数据组织和搜索优化。

  • 培训和测试。这项工作是使用几组图像来检查地面真相。

除非真实情况数据包含精心选择和准备的图像内容,否则算法不能有效地测量。因此,地面实况与根源密切相关:没有办法改善我们无法测量和不理解的东西。能够从根本上解决算法问题并理解性能和准确性是建立基础事实数据的主要目的。更好的基础数据将有助于更好的分析。

地面实况数据因任务而异。例如,在 3D 图像重建或人脸识别中,必须为每个任务识别地面实况数据的不同属性。一些任务,例如人脸识别,需要分割和标记来定义已知的对象,例如人脸位置、人脸的位置和方向、人脸的大小以及人脸的属性,例如情感、性别和年龄。其他任务,如 3D 重建,需要图像中的原始像素和参考 3D 网格或点云作为它们的地面真相。

地面实况数据集分为几类:

  • 合成制作:图像由计算机模型或渲染生成。
  • 真实制作:设计并制作一个视频或图像序列。
  • 真实选择:真实图像从已有来源中选择。
  • 机器自动标注:使用特征分析和学习方法从数据中提取特征。
  • 人工注释:专家定义特征和物体的位置。
  • 组合:以上任意组合。

许多从业者坚决反对使用合成数据集,坚持使用真实数据集。在某些情况下,需要随机真实情况图像;在其他情况下,需要制作精心脚本和设计的真实情况图像,类似于创建一部有场景和演员的电影。

具有不可预测的伪像(如光线不足、运动模糊和几何变换)的随机和自然的真实情况数据通常是首选的。许多计算机问题需要真实的图像作为基础,图像中的随机变化是很重要的。使用摄像机甚至手机摄像头,真实图像通常容易获得和/或容易生成。但是创建合成数据集并不清楚;它需要适当的计算机图形渲染系统和工具的知识,因此学习和使用这些工具的时间投资可能会超过它们的好处。

然而,合成的计算机生成的数据集可以成为避免使用真实图像的法律和隐私问题的一种方式。

之前关于真实情况数据的工作:艺术与科学

在本节中,我们调查了一些关于真实情况数据的文献。我们还强调了自动真实情况数据标记的几个例子,以及其他关于建立真实情况数据是否有效的度量的研究。此处调查的其他研究包括地面实况特征与人类感知和期望的吻合程度,例如,人类在地面实况数据中检测到的边缘实际上是否是由所选择的检测器算法发现的。

质量绩效的一般衡量标准

与计算机视觉中的其他主题相比,很少有正式或分析性的工作发表来指导真实情况数据的创建。然而,机器学习社区为测量用于训练和测试数据集的真实情况数据之间的视觉识别的质量提供了丰富的指导。一般来说,训练集或基本事实数据的大小是其准确性的关键[336–338],假设使用了正确的数据,规模越大越好。

深入挖掘机器学习和对真实情况数据进行测试的关键期刊包括《IEEE PAMI 模式分析和机器智能》期刊,其关于该主题的文章可以追溯到 1979 年。虽然大多数地面实况数据集包含真实图像和视频序列,但一些从业者选择为各种应用领域创建合成地面实况数据集,例如具有合成 3D 图像的标准米德尔伯里数据集。请参见附录 B 了解可用的真实真实情况数据集,以及一些合成数据集。

地面实况数据、探测器和描述符评估的一个值得注意的示例框架是 Mikolajczyk 和 Schmidt 方法(M&S) ,将在本章后面的中讨论。许多计算机视觉研究项目都遵循 M & S 方法论,使用各种数据集。

算法性能的测量

Ericsson 和 Karlsson[102]开发了一种基本事实对应度(GCM) ,用于对七个真实数据集和一个合成数据集的算法性能进行基准测试和排名。他们的工作集中在统计形状模型和边界上,在第五章的中的视觉分类中被称为多边形形状描述符。目标是使用 GCM 使数据库中的形状模型和真实情况数据中检测到的形状之间的对应自动化。由于形状模型可能相当复杂,自动化模型比较和生成特定于形状描述的质量度量的目标是新颖的。

Dutagaci 等人[91]开发了一个框架和方法,包括真实情况数据,以测量人类和 3D 兴趣点检测器之间的感知一致性,换句话说,3D 兴趣点检测器是否找到了与人类预期相同的兴趣点?地面实况数据包括一组图像中已知的一组人类标记的兴趣点,这些兴趣点是由互联网抓取应用自动收集的。人类标记的兴趣点按照共识集排序,离群点被剔除。共识标准是一个半径区域,计算在半径内标记兴趣点的人的数量。对数据运行一组 3D 兴趣点检测器,并使用诸如假阳性、假阴性和加权缺失误差的简单度量进行比较。真实情况数据用于测试 3D 兴趣点检测器的人类和机器视觉算法之间的一致性。结论包括观察到人类在选择兴趣点上犹豫不决且分歧很大,以及兴趣点检测算法在计算机视觉中是一个模糊问题。

Hamameh 等人[88]开发了一种从具有已知界标(如分割边界和兴趣点)的参考数据集自动生成医学应用的基本事实数据的方法。缺乏训练有素的专家来注释医学图像和生成真实情况数据激发了这项研究。在这项工作中,数据是通过生成模拟物体运动、振动和噪声等其他因素的合成图像来创建的。Prestawa 等人[89]开发了一种类似的方法来生成医学基础事实。Haltakov 等人[510]开发了来自汽车驾驶模拟器的合成真实情况数据,用于测试驾驶员辅助算法,该算法使用计算机视觉方法提供情况感知。

Vedaldi 等人[90]设计了一个用于表征仿射同变检测器的框架,使用合成生成的地面真相作为采用光线跟踪的 3D 场景,包括模拟的自然和人造环境;每个场景都配有深度图。目标是在仿射变形下表征共变检测器的性能,并因此设计更好的共变检测器。定义了一组参数化特征用于对探测器建模,包括点、圆盘和定向圆盘,以及各种椭圆和定向椭圆。生成了大量的 3D 场景,多达 1,000 个透视图,包括深度图和相机校准信息。在这项工作中,度量和真实情况数据被设计在一起,以集中于几何变化的分析。重点分析了圆盘和扭曲椭圆圆盘的特征区域形状,以发现不同方向、遮挡、折叠、平移和缩放下的任何一致性和鲁棒性。(为此工作开发的源代码可用。 1

Rosin 在角落的作品

Rosin[61,92]的研究涉及灰度角属性的分析分类法的开发,如图 7-2 所示。Rosin 开发了一种方法和案例研究,以生成真实情况数据集和度量基础,用于评估一些知名角点检测器的性能和精度。该指标基于接收器操作特性(ROC) 来测量检测器的准确性,以评估拐角与非拐角。这项工作是在超过 13,000 个合成角图像上进行的,这些合成角图像具有跨越不同方向、对向角度、噪声和比例的变化。合成的地面实况数据集被特别设计成能够检测和分析一组选择的拐角属性,包括顶点的钝度或形状、尖点的边界形状、对比度、方向和拐角的对向角。

9781430259299_Fig07-02.jpg

图 7-2 。图示松香角度量的图像:(左上角)角方向和对向角。(右上)直言不讳。(左下)对比。(右下角)黑色/白色边角颜色。(图片由保罗·罗辛提供并经许可使用[61])

Rosin 工作的一个新颖方面是在数据集中生成明确类型的合成兴趣点,如角点、非明显角点和非角点,目标是创建一组统计上有趣的特征,用于偏离理想化特征的评估。在用于真实渲染的模拟光学系统中创建和生成合成角,以产生具有参数化变化的角,这些参数化变化包括仿射变换、衍射、子采样,并且在某些情况下添加噪声。Rosin 的真实情况数据集可供研究使用,并已用于 Kittler 检测器和 Harris & Stephens 检测器对 kitt ler 检测器以及 kitt ler 检测器和 Harris & Stephens 检测器的方法进行角检测器评估。

与 Rosin 相似,本章稍后开发了一组合成兴趣点字母,并在附录 A 中进行了测试,包括边和角字母,目的是将人类对兴趣点的感知与机器视觉方法进行比较。合成兴趣点和角被设计成测试像素厚度、边缘交叉点、形状和复杂性。该组明显不同于 Rosin 等人的组,并试图填补兴趣点检测器分析中的空白。字母表被放置在规则的网格上,允许确定位置检测计数。

构建真实情况数据的关键问题

在本节中,我们确定了一些关键问题来回答,以创建地面真相数据,而不是提供许多具体的指导或答案。开展的工作类型将决定指导的类型,例如,发表的研究通常需要广泛接受的基础事实数据,以便同行评审和复制结果。在医疗或汽车行业,如果竞争对手发布测量或性能数据,可能会有政府法规和法律问题。例如,如果一家公司发布任何类型的基准测试结果,将结果与竞争对手系统的结果进行比较,所有此类数据和声明都应由律师进行审查,以避免商业法规的复杂性和处罚,这可能会令人生畏和严厉。

对于真实的产品和真实的系统,也许最好的指导来自于对性能和准确性的需求、期望和目标。一旦一组明确的要求到位,那么基础事实选择过程就可以开始了。

内容:采用、修改或创建

在创建新数据集之前,熟悉现有的地面实况数据集是很有用的。选择显而易见:

  • 采用现有数据集。
  • 采用并修改现有的数据集。
  • 创建新的数据集。

可用地面实况数据调查

附录 B 提供了几个现有地面实况数据集的信息。花些时间了解已经可用的东西,并研究来自 SIGGRAPH、CVPR、IJCV、附录 C 中的 NIPS 和其他研究会议的研究论文,以了解更多关于新数据集及其使用方式的信息。可用数据集来自各种来源,包括:

  • 学术研究组织,通常免费提供学术研究。
  • 政府数据集,有时使用受限。
  • 像微软这样的大公司提供的行业数据集,有时可以被许可用于商业用途。

将数据与算法相匹配

也许最大的挑战是确定一个数据集是否适合手头的问题。地面实况数据中的细节是否足以找到所选算法和系统的边界和限制?“适合”适用于关键变量,如基本事实数据、使用的算法、对象模型、分类器和预期用例。参见图 7-3 ,该图显示了地面实况数据、图像预处理、检测器和描述符算法以及模型度量应如何配合在一起。

9781430259299_Fig07-03.jpg

图 7-3 。(左上)针对真实情况数据使用 Shen-Castan 边缘检测对边缘进行图像预处理。(右上)过度拟合的检测参数产生了太多的小边缘。(左下角)欠拟合参数产生的边太少。(右下角)宽松的参数产生合理的边缘

这里有几个例子来说明这些变量。

  • 数据拟合 : 如果数据集没有提供足够的像素分辨率或位深度,或者训练集中没有足够的唯一样本,那么模型将是不完整的,匹配可能会受到影响,并且数据对于问题是欠拟合。或者,如果基础事实包含太多不同类型的特征,这些特征将永远不会在测试集或实际应用中出现。如果模型分辨率为每 RGB 通道 16 位,而实际数据中每颜色通道仅提供 8 位,则数据和模型过拟合到问题。
  • 算法拟合如果 SIFT 方法用于没有比例或旋转变化的数据,则 SIFT algithm过度拟合数据。
  • 用例拟合 : 如果用例没有在数据和模型中表示,则数据和模型对于问题是欠拟合

场景合成和标记

地面实况数据由带标签的要素组成,例如前景、背景以及要识别的对象或要素。标签准确定义了图像中存在的特征,这些标签可以是屏幕标签、相关标签文件或数据库的组合。有时,来自野外的随机合成的场景更适合作为真实情况数据,然后只标记场景中需要的项目。其他时候,地面实况数据是按照电影场景的方式编写和合成的。

在任何情况下,场景中适当的物体和演员都必须被标记,也许每个物体和演员的位置都必须被知道和记录。因此,必须创建包含标签的数据库或文件,并将其与每个地面实况图像相关联,以允许测试。参见图 7-4 ,该图显示了长方体场景分析的标注或标记的真实情况数据集图像【62】。参见附录 B 中描述的 Labelme 数据库,它允许贡献者提供带标签的数据库。

9781430259299_Fig07-04.jpg

图 7-4 。带注释或标签的地面实况数据集图像,用于长方体的场景分析(左侧和中间)。标签被手动标注到真实情况数据集中,用黄色(在 B & W 版本中为浅灰色)标记长方体的棱角。(右)地面实况数据包含预先计算的 3D 角拱描述符集,这些描述符集与实时检测到的长方体拱特征集相匹配。成功匹配以绿色显示(B & W 版本中为深灰色)。(图片由布莱恩·拉塞尔、肖和安东尼奥·托雷巴授权使用)

构图

建立正确的真实情况数据集就像组装一个组合;涉及几个变量,包括:

  • 场景内容:设计视觉内容,包括固定物体(不动的)、动态物体(进入和离开场景的)、动态变量(如物体在场景中的位置和移动)。
  • 灯光:将合适的灯光投射到场景上。
  • 距离:为每个对象设置并标记正确的距离,以获得所需的像素分辨率——太远意味着没有足够的像素。
  • 运动脚本:为每一帧确定场景中物体的适当运动;比如场景中有多少人,他们的位置和距离是多少,每个人出现的帧数,每个人进出的位置。此外,脚本场景,使不变性测试的变化,透视,比例,仿射几何,遮挡。
  • 标记:创建一个格式化的文件、数据库或电子表格来描述场景中每一帧的每一个被标记的真实情况物体。
  • 预期算法:决定将使用哪些兴趣点和特征检测的算法,要产生什么度量,以及每个算法期望哪些不变性属性;例如,LBP 本身不提供尺度不变性,但是 SIFT 提供。
  • 预期用例:确定问题域或应用。真实情况数据代表了足够多的真实用例吗?
  • 图像通道位深度、分辨率:根据要求进行设置。
  • 度量:定义要测量的一组度量——例如,误报和漏报。创建一个测试夹具,对数据集运行算法,测量并记录所有必要的结果。
  • 分析:通过理解基础数据和算法的局限性来解释指标,定义成功标准。
  • 开放评级系统:探索是否有可用于报告结果的开放评级系统。例如,Middlebury 数据集为 3D 立体算法提供了一个开放的评级系统,并在附录 B 中进行了描述;其他评级系统作为计算机视觉组织和政府举办的大挑战比赛的一部分发布,其中一些在附录 B 中审查。开放评级系统允许在统一的尺度上比较现有的和新的算法。

标签

基本事实数据可能只是从搜索引擎返回的图像,而标签可能只是搜索引擎的单词或短语。图 7-5 显示了照片旅游的照片连接图[63–65 ],该图是从一个著名地点罗马的许愿池的伪随机图像中创建的。很可能在五到十年内,照片旅游应用将提供高质量的图像重建,包括纹理、3D 表面和同一地点的重新渲染,可与真实照片媲美。

9781430259299_Fig07-05.jpg

图 7-5 。照片连接图(中间)是通过分析特莱维喷泉(a)搜索引擎的多个公开图像创建的。边缘显示与 3D 场景中的特征匹配和连接的照片,包括白天和夜间照明(b)(c)(d)。(图片由 Noah Snavely 提供,经许可使用)

对于某些应用,标签和标记被插入真实情况数据集中,以便对结果进行分析,如图 7-4 中长方体的 3D 场景理解数据库所示。本章后面的另一个例子是使用兴趣点和角的合成字母合成场景,这些兴趣点和角叠加在规则间隔网格的图像上,以实现位置验证(参见附录 A )。在一些视觉跟踪应用中,标记被附加到物理对象(例如腕带)上,以建立真实情况特征。

另一个例子是地面实况数据,其被组成以测量凝视检测,使用包含在已知位置和时间进入和离开场景的两个人类男性对象的标签的视频序列,在场景中以已知速度和深度从左向右行走。他们正在注视的物体将在一个已知的位置,并且也被标记。

定义目标和期望

为了建立真实情况数据的目标,必须提出问题。例如,需要地面实况数据的应用的预期用途是什么?就准确性和性能而言,必须根据地面实况数据做出什么决定?质量和成功是如何衡量的?学术研究和商业系统的目标截然不同。

Mikolajczyk 和 Schmid 方法论

Mikolajczyk、Schmid 等人的一组广受好评的论文[45,79,82,91,306]为测量局部兴趣点和特征检测器质量提供了良好的方法。特别感兴趣的是用于测量比例和仿射不变兴趣点检测器的方法[306],该方法使用自然图像开始,然后将一组已知的仿射变换应用于这些图像,例如单应、旋转和比例。对图像运行兴趣点检测器,随后运行特征提取器,然后对转换后的图像测量匹配的召回率和精确度,以产生质量度量。

开放式评级系统

计算机视觉社区正在一点一点地开发各种开放的评级系统,鼓励算法比较和改进,以提高质量。在存在这种开放数据库的地区,特定算法的质量迅速提高。附录 B 列出了开放评级系统,如 Pascal VOC 物体探测挑战。Pascal VOC 使用带有相关大挑战竞赛问题的开放式真实数据库来测量最新算法对数据集的准确性。

另一个例子是 Middlebury 数据集,它提供了覆盖 3D 立体算法领域的真实情况数据集,允许对新旧算法之间的关键指标进行公开比较,结果在线发布。

极限情况和极限

找出算法失败的地方是有价值的。学术研究通常对工业定义故障模式所需的严格性不感兴趣。找到极限情况和极限的一种方法是在大范围的真实数据上运行相同的测试,甚至可能是手头问题范围之外的数据。鉴于公开可用的地面实况数据库的可用性,使用几个数据库是现实的。

然而,一旦收集了关键的基本事实数据,设计一系列极限情况也是有用的,例如,通过提供噪声数据、强度过滤数据或模糊数据来测试性能和精度的极限。

兴趣点和特点

兴趣点和特征并不总是如预期或预测的那样被检测到。机器视觉算法检测的兴趣点与人类预期的不同。例如,图 7-6 显示了 SURF 算法在一组给定参数下遗漏的明显兴趣点,该算法使用了一种基于 Hessian 斑点检测行列式的方法。注意,有些对人类来说显而易见的兴趣点根本检测不到,有些会出现误报,有些相同的兴趣点检测不到一致。

9781430259299_Fig07-06.jpg

图 7-6 。使用不同方法在同一幅图像上检测到的兴趣点:(左)用十字标记的 Shi-Tomasi 角。(右)用圆圈标注的冲浪兴趣点。结果不一致或不确定

此外,真实兴趣点会随着时间的推移而变化,例如,随着对象的移动和旋转,这是使用真实真实情况数据与合成数据来测试各种潜在兴趣点的假阳性和假阴性的有力工具。

真实情况数据的稳健性标准

在第五章中,开发了一个鲁棒性标准,列出了各种不变性属性,如旋转和缩放。这里,我们将稳健性标准应用于真实情况数据的开发。

图解稳健性标准

表 7-1 讨论了各种鲁棒性标准属性,并非所有属性都是给定应用所需要的。例如,如果光学系统中可能存在径向失真,那么将设计对径向失真鲁棒的最佳算法和相应的度量,或者作为缓解措施,视觉流水线必须设计有预处理部分,以在确定度量之前消除或补偿径向失真。

表 7-1 。真实情况数据的稳健性标准

|

属性

|

讨论

|
| --- | --- |
| 不均匀照明 | 定义应用的可接受照明范围;不均匀的光照可能会降低某些算法的性能,有些算法的容错能力更强。 |
| 聪明 | 定义关键特征的预期亮度范围,并相应地准备地面实况数据。 |
| 对比 | 定义应用的可接受对比度范围;有些算法更宽容。 |
| 小插图 | 光学系统可能会降低光线质量,并表现为边缘处的昏暗照明。更小的特征被更好地本地化,并且可能能够克服这种情况;跨越光线不均匀区域的大特征受到的影响更大。 |
| 颜色准确度 | 不准确的色彩空间处理可能会导致较差的色彩性能。色度学很重要;考虑选择合适的色彩空间(RGB、YIQ、Lab、Jab 等。)并对每种颜色使用正确的位精度级别,是否 8/16 位是最好的。 |
| 杂乱 | 一些算法不能容忍图像中的混乱,并且依赖于用最少数量的对象来构建场景。描述符像素大小可能是块搜索方法的一个问题-区域中过多的无关细节可能是算法的一个问题。 |
| 遮挡和剪切 | 对象可能被遮挡、隐藏或剪切。算法可能容忍也可能不容忍这种遮挡。使用图像预处理和分割方法可以消除或补偿一些遮挡伪影。 |
| 离群值和邻近值 | 有时,一个区域内的对象组是主题,离群值将被忽略。此外,对象或特征的接近度可以指导分类,因此改变场景中特征或对象的排列可能是至关重要的。 |
| 噪音 | 噪声可能呈现规则或随机模式,例如雪、雨、单像素斑点噪声、线噪声、影响像素位分辨率的随机电噪声等。 |
| 运动模糊 | 运动模糊是几乎所有实时应用的一个重要问题。如果可能,这可以通过使用更快的帧速率和采用图像预处理来消除运动模糊来克服。 |
| 抖动和抖动 | 移动摄像机拍摄的视频图像中的常见问题,其中每条扫描线可能偏离常规 2D 网格。 |
| 焦平面或深度 | 如果算法的应用或用例假设图像的所有深度都在焦点上,那么使用具有非焦点深度平面的真实情况数据可能是测试极限的好方法。 |
| 像素深度分辨率 | 如果基于像素值(如灰度强度或颜色强度)来匹配特征,则像素分辨率是一个问题。例如,如果特征描述符使用 16 位的有效灰度级强度,但实际使用情况和地面实况数据仅提供 8 位的分辨率,则描述符可能与数据过度拟合,或者数据对于应用可能不现实。 |
| 几何失真 | 复杂的翘曲可能是由于光学系统的几何误差或到对象的距离的组合而产生的。在诸如人脸的可变形表面上,表面和特征形状可能以难以用几何学描述的方式变化。 |
| 比例、投影 | 远近物体将由或多或少的像素表示,因此给定应用可能需要多尺度数据集,以及多尺度特征描述符。算法对特征比例和预期用例的敏感性也决定了真实情况数据比例。 |
| 仿射变换和旋转 | 在一些应用中,如全景图像拼接,相邻帧之间的旋转很小,最多可达 15 度。然而,在其他应用中,如对象分析和工业传送带上零件的跟踪,0 到 360 度之间的旋转是预期的。 |
| 特征镜像,翻译 | 在立体对应中,L/R 对匹配是使用这样的假设来完成的,即特征可以在 L/R 对之间的有限范围的平移差异内匹配。如果点之间的平移是极端的,立体算法可能会失败,导致深度图中的洞,这些洞必须被填充。 |
| 反射 | 一些应用,如识别交通中的汽车,需要一个特征模型,该模型包含反射表示和相应的真实情况数据集。汽车可以从不同的方向来来去去,并且具有反射的右/左特征对。 |
| 径向畸变 | 光学器件可能在条纹周围引入径向失真;通常,在传送图像之前,这由使用数字信号处理器或固定功能硬件的照相机系统来校正。 |

将鲁棒性标准用于实际应用

每种应用都需要一套不同的稳健性标准来开发真实情况数据。表 7-2 说明了如何将稳健性标准应用于一些实际和不同的应用。

表 7-2 。应用于示例应用的健壮性标准(每个应用对健壮性有不同的要求)

image

如表 7-2 所示,多视图立体(MVS)应用将某些几何标准视为非常重要,因为精确的深度图需要精确的几何假设作为视差计算的基础。对于算法精度调整,应使用校准良好的摄像机系统创建相应的地面实况数据,以获得 3D 场景的位置精度,从而进行有效的比较。

在表 7-2 中的另一个例子是在非受控环境中的许多变量,即道路上的汽车识别——可能与距离、形状、颜色和噪音有关。例如,识别汽车可能需要来自各种自然条件的若干车辆的真实情况图像,例如黎明、黄昏、阴天和全日,并且包括例如降雨和降雪、运动模糊、遮挡和透视图的条件。在第八章中开发了一个汽车识别流水线的例子。

表 7-2 也显示了一个受控环境的例子:工业检测。在工业设置中,可以使用已知的照明、控制传送带的速度和限制场景中的对象集来仔细控制环境。可以为每个对象设计精确的模型和度量标准,也许可以采集颜色样本等等——所有这些都可以先验地完成。地面实况数据可以很容易地从实际的工厂位置创建。

将指标与基本事实配对

度量标准和基本事实数据应该结合在一起。每个应用都有鲁棒性和准确性的设计目标,每个算法也有不同的预期用途和功能。例如,第六章中讨论的 SUSAN 检测器通常应用于宽基线立体应用,而立体应用通常不太关心旋转不变性,因为图像特征是在相应的立体对帧上计算的,这些帧已经过仿射校正以逐行对齐。图像对之间的特征对应预计在一个小窗口内,在 x 轴上有一些微小的平移。

配对和调整兴趣点、功能和基本事实

将正确的兴趣点检测器和特征描述符配对可以增强结果,许多兴趣点方法都是可用的,并在第六章中讨论过。在准备地面实况数据时,应考虑用于兴趣点检测的方法作为指导。

例如,使用导数的兴趣点方法,例如拉普拉斯和 Hessian 型检测器,在图像的局部像素区域没有足够的对比度的情况下不会做得很好,因为对比度强调了最大值、最小值和局部区域的变化。然而,诸如 FAST9 的方法更适合于低对比度图像,使用局部二进制模式,并且易于调整比较阈值和区域大小来检测角和边缘;但是使用 FAST9 的代价是牺牲了缩放不变性。

使用边缘梯度和方向的方法,例如本征方法,将需要在正确的对比度水平上包含足够的定向边缘的地面实况。使用形态学兴趣点的方法同样需要能够被适当阈值化和处理以产生期望形状的图像数据。

兴趣点方法还必须针对各种参数进行调整,如接受和拒绝候选兴趣点的阈值强度,以及区域大小。选择正确的兴趣点检测器、调谐以及与适当的地面实况数据配对至关重要。调整兴趣点探测器参数的效果如图图 7-6 和 7-7 所示。

9781430259299_Fig07-07.jpg

图 7-7 。使用 Shi-Tomasi 方法的机器角检测标有十字;对于角的强度和像素大小,使用不同的参数设置和阈值来显示结果

使用通用视觉分类法的示例

作为配对指标和基础事实数据的指南,我们使用在第五章中开发的愿景分类法来说明如何将特征指标和基础事实数据放在一起考虑。

表 7-3 给出了 SIFT 和 FREAK 描述符的样本分类法和分类,可用于指导基础真实数据的选择,也显示了算法能力的几个相似之处。在本例中,内置于数据中的不变性属性可以大致相同,即缩放和旋转不变性。请注意,FREAK 声称的计算性能比 SIFT 快几个数量级,因此,对于良好的性能测量,真实情况数据可能应该包含每帧足够多的最小和最大数量的特征。

表 7-3 。描述畸形和 SIFT 的一般视觉分类法

视觉度量分类法比较

属性

|

|

奇异的

|
| --- | --- | --- |
| 特征类别族 | 光谱描述符 | 局部二元描述符 |
| 光谱尺寸 | 多变量的 | 单变量 |
| 光谱值 | 方向向量
梯度大小
梯度方向
HOG,笛卡尔箱 | 方向向量
值的位向量
4 个扫视
描述符的级联 |
| 兴趣点 | 在 3D 比例金字塔上筛选狗 | 多尺度 AGAST |
| 存储格式 | 光谱向量 | 位向量
方向向量 |
| 数据类型 | 浮动 | 整数 |
| 描述符存储器 | 512 字节,128 个浮点数 | 64 字节,4 个 16 字节
级联 |
| 特征形状 | 矩形 | 圆形 |
| 特征搜索方法 | 由粗到细的图像金字塔
尺度空间图像金字塔
双尺度第一金字塔
层次兴趣点稀疏 | 兴趣点稀疏 |
| 模式对采样 | 不适用 | 中心凹居中的
训练对 |
| 图案区域尺寸 | 41x41 边框 | 31x31 边框
(可能会有所不同) |
| 距离功能 | 欧几里得距离 | 汉娩距 |
| 运行时计算 | 100% (SIFT 是基线) | 筛余的 0.1% |
| 特征密度 | 稀少的 | 稀少的 |
| 特征模式 | 矩形核
样本加权模式 | 二元比较模式 |
| 声称鲁棒性

*最终鲁棒性是兴趣点方法、描述符方法和分类器 的组合 | 缩放
旋转
噪点
仿射失真
光照 | 刻度
旋转
噪音 |

合成特征字母

在本节中,我们将为兴趣点算法分析创建合成真实情况数据集。我们创建了合成兴趣点合成角点的字母表。这些字母是合成的,这意味着每个元素都被设计成完美地表现所选的二进制模式,包括点、线、轮廓和边缘。

各种像素宽度或厚度用于字母字符,以测量精细和粗糙的特征检测。每个图案在图像中的网格上的已知像素坐标处配准,以允许测量检测精度。数据集旨在实现人类兴趣点感知和机器视觉兴趣点检测器之间的比较。

以下是对每个合成字母表数据集的高级描述:

  • 合成兴趣点字母表。包含点,如方框、三角形、圆形、半方框、半三角形、半圆形、边缘和轮廓。
  • 合成角点字母表。包含几种不同像素厚度的角点和多角点。
  • 叠加合成字母的自然图像。包含覆盖在自然图像上的兴趣点和角的黑白版本。

image 完整的地面实况数据见附录 A 。

分析在附录 A 中提供,其中包括针对数据集运行十个检测器。检测器在 OpenCV 中实现,包括 SIFT,SURF,ORB,BRISK,HARRIS,GFFT,FAST9,SIMPLE BLOB,MSER 和 STAR。注意,诸如 SIFT、SURF 和 ORB 之类的方法提供了兴趣点检测器和特征描述符实现。我们只关心每种分析方法的兴趣点检测部分,而不关心特征描述符。

使用合成图像字母的想法并不新鲜。如图 7-2 所示,Rosin【61】设计了一组合成的灰色角点和相应的测量方法,目的是通过属性(如顶点的钝度或形状、尖点的边界形状、对比度、方向和角的对向角)量化角属性。然而,这项工作中的综合兴趣点和角字母是为了解决下一个讨论的不同的目标而开发的。

合成数据集的目标

该合成数据集的目标和期望在表 7-4 中列出。它们的中心是使分析能够确定找到了哪些合成兴趣点和角点,因此每个兴趣点的精确计数和位置是一个关键要求。

表 7-4 。真实情况数据示例的目标和期望:人类期望与机器视觉结果的比较

|

目标

|

方法

|
| --- | --- |
| 兴趣点和角点检测器,压力测试 | 提供易于被人识别的合成特征;衡量各种检测器的性能。 |
| 人类可识别的合成兴趣点集 | 人类识别的合成特征是跨越边缘和线段、轮廓和曲线、角和多角的形状和大小而发展的。 |
| 兴趣点的网格定位 | 每个兴趣点将被放置在已知位置的规则网格上,用于检测精度检查。 |
| 比例不变性 | 用相同的一般形状创建合成兴趣点,但使用不同的像素厚度进行缩放。 |
| 旋转不变性 | 将创建兴趣点,然后在后续帧中旋转。 |
| 噪声不变性 | 一些兴趣点集合中会加入噪声。 |
| 重复兴趣点,已知计数 | 将在每一帧中创建和复制兴趣点,以确定检测和性能。 |
| 覆盖在真实图像上的混合合成兴趣点 | 网格上的合成兴趣点覆盖在真实图像上,以允许混合测试。 |
| 兴趣点检测器、确定性和可重复性 | 探测器将包括 SIFT,SURF,ORB,BRISK,HARRIS,GFFT,FAST9,SIMPLE BLOB,MSER 和 STAR。通过定位网格上的合成兴趣点,我们可以计算检测计数。 |

人类视觉系统不像兴趣点检测器那样工作,因为检测器可以接受人类可能无法识别的特征。人类视觉系统在视网膜上以比例和旋转不变的方式辨别和响应梯度信息[248],并且倾向于寻找梯度和颜色之间的习得特征关系。

人类通过观察和经验来了解特征,因此习得的期望在解释视觉特征时起着关键作用。人们看到他们相信的和他们在寻找的,如果不是在寻找,他们可能不相信他们看到的。例如,图 7-7 显示了机器拐角检测的例子;人类可能不会选择所有相同的角特征。注意,结果不是人们所期望的,并且算法参数也必须调整到真实情况数据以获得最佳结果。

通过位置网格进行特征检测的准确性

通过将合成要素放置在规则间隔网格上的已知位置,然后在检测之后,分析计数和位置,来实现该合成地面实况的检测器精度目标。一些检测器将发现单个合成兴趣点或角的多个特征。所选的特征网格大小为 14x14 像素,网格延伸到整个图像。参见图 7-9 和 7-10 。

通过旋转图像集的旋转不变性

对于每个基础真值集,每个图像的旋转版本在 0 到 90 度的范围内以 10 度的增量被创建。因为合成特征被放置在已知位置的规则间隔的网格上,所以旋转下的新位置很容易计算。可以对检测到的合成特征进行计数和分析。结果见附录 A 。

通过厚度和边界框大小的比例不变性

合成的角点特征被渲染到真实情况数据中,对于模拟的比例变化,特征边缘厚度在 1 到 3 个像素的范围内。一些兴趣点特征,例如框、三角形和圆形,在范围从 1x1 像素到 10x10 像素的边界框中被缩放,以允许缩放不变性测试。

噪声和模糊不变性

一组合成字母使用高斯噪声渲染,另一组使用椒盐噪声给图像添加失真和不确定性。此外,通过以 0 到 90 度之间的不同角度旋转兴趣点字母表,由于仿射变换算法中引入的抗混叠插值,数字模糊被引入到合成图案中。

可重复性

每个基础真值集包含合成特征的已知计数,以便能够分析检测率。为了能够测量每个检测器的可重复性,每个图像中的每个兴趣点特征都有多个副本。人类期望以相同的方式检测到相同的特征;然而,附录 A 中的结果显示,一些兴趣点检测器的行为不可预测,而一些检测器比其他检测器更可预测。

如图图 7-6 所示,探测器并不总能找到相同的特征。例如,合成字母有三种版本——白底黑字、黑底白字和深灰底浅灰——目的是用不同灰度和极性的相同图案测试每个检测器。参见附录 A ,显示探测器如何根据极性和灰度系数提供不同的结果。

合成特征的真实图像覆盖图

提供了一组由覆盖在真实图像上的合成兴趣点和角组成的图像,有点像标记。既然技术水平已经从标记发展到无标记跟踪,为什么还要覆盖兴趣点标记呢?目标是理解检测器本身的限制和行为,以便在存在自然和合成特征的情况下分析它们的性能将提供一些见解。

合成兴趣点字母表

如图图 7-8 和图 7-9 所示,在像素分辨率或厚度范围内定义了一个合成兴趣点字母表,包括以下特征:

  • 点/正方形,1-10 像素大小
  • 点/三角形半正方形,3-1 像素大小
  • 圆形,3-10 像素大小
  • 圆形/半圆形,3-10 像素大小
  • 轮廓,3-10 像素大小
  • 轮廓/半轮廓,3-10 像素大小
  • 连接边
  • 双角,3-10 像素大小
  • 角,3-10 像素大小
  • 边缘,3-10 像素大小

9781430259299_Fig07-08.jpg

图 7-8 。合成兴趣点字母表的一部分:点、边、边和轮廓。(从上到下)黑底白字,白底黑字,深灰底浅灰,添加了椒盐噪声,添加了高斯噪声

9781430259299_Fig07-09.jpg

图 7-9 。合成兴趣点字母表的缩放和旋转示例。请注意仿射旋转引入的伪像,它通过抗锯齿和子采样伪像扭曲了合成的二进制模式

合成兴趣点字母表包含 83 个组成在 14x14 网格上的独特元素,如图图 7-9 所示。一幅 1024×1024 的图像可以容纳完整字母表的总共 7 行和 7 列,产生总共 7x7x83=4067 个总兴趣点。

合成角字母

合成角字母如图 7-10 所示。字母表包含以下类型的角和属性:

  • 两段角,1,2,3 像素宽
  • 三段角,1,2,3 像素宽
  • 4 段角,1,2,3 像素宽

9781430259299_Fig07-10.jpg

图 7-10 。合成角字母表的一部分,特征包括 2 段、3 段和 4 段角。(从上到下)黑底白字,白底黑字,深灰底浅灰,添加了椒盐噪声,添加了高斯噪声

如图 7-11 所示,角字母包含由二线段、三线段、四线段组成的多种类型的角的图案,像素宽度为 1、2、3。合成角字母包含 54 个独特的元素组成的 14x14 像素网格。

9781430259299_Fig07-11.jpg

图 7-11 。合成角点图像部分

每个 1024×1024 像素的图像包含 8×12 个完整的字母,每个字母由 6×9 个独特的元素组成,产生每个图像的 6×9×12×8 = 5184 个总角点。完整的数据集包括每幅图像以 10 度间隔从 0 度到 90 度的旋转版本。

真实图像上的混合合成覆盖图

我们将合成的兴趣点和角作为覆盖图与真实图像相结合,以开发一个作为更复杂情况的混合真实情况数据集

真实数据上合成兴趣点的合并将为兴趣点算法和角点检测器提供新的挑战,并说明每个检测器如何工作。在真实图像上使用混合合成特征叠加是真实情况数据的一种新方法(据作者所知),其好处在好奇心之外并不明显。此处选择合成叠加方法的一个原因是为了填补文献和研究中的空白,因为通常不使用合成要素叠加。参见图 7-12 。

9781430259299_Fig07-12.jpg

图 7-12 。与真实图像相结合的合成兴趣点,用于对具有异常像素模式的兴趣点和角点检测器进行压力测试

混合合成和真实真实情况数据集的设计目标如下:

  • 使用覆盖在真实图像上的完整合成字母,为兴趣点和角落分离真实情况集合,以提供围绕每个兴趣点和角落的一系列像素细节。
  • 在 14x14 的网格上显示兴趣点的已知位置和数量。
  • 提供相同数据的彩色和灰度图像。
  • 以 10 度的间隔提供 0 到 90 度的相同数据的旋转版本。

创建覆盖图的方法

字母表可用作黑色 0x00 和白色 0xff 的 8 位像素值的二进制掩码 ,用于构成图像叠加。使用 Mathematica 代码 ImageMultiply 和 ImageAd d 运算符执行以下布尔屏蔽示例。

ImageMultiply ![9781430259299_unFig07-01.jpg ]

使用 ImageMultiply 得到底片,然后使用 ImageAdd 得到底片。注意,在其他图像处理工具系统中,可以提供布尔 ImageAND、ImageOR 和 ImageNOT 作为替代。

ImageAdd ![9781430259299_unFig07-02.jpg ]

摘要

我们调查了创建地面实况数据的手动和自动方法,确定了一些最佳实践和指南,应用了在第五章中开发的鲁棒性标准和视觉分类法,并通过示例创建了地面实况数据集,用于与关键点检测器的机器视觉方法进行比较,评估人类感知。

以下是准备真实情况数据的一些最终想法和关键问题:

  • 适当性:地面实况数据集对于分析和预期应用的适当性如何?用例及应用目标是否构建在基础数据和模型中?数据集对于算法和用例是欠拟合还是过拟合?
  • 公共与专有:专有基础数据是独立评估指标和算法的障碍。利益相关方必须能够复制各种算法产生的指标,以便能够与实际数据进行比较。如果问题领域存在开放评级系统,则可能是首选。但开源任何专有的地面真相数据都存在可信度和法律障碍。
  • 隐私和法律问题:在选择使用的任何图像中都存在个人隐私问题;未经许可,不得使用人的图像,并应遵守禁止在受限制的地点拍照的禁令。法律问题是非常现实的。
  • 真实数据与合成数据:在某些情况下,可以使用计算机图形和动画来创建合成地面数据集。特别是当涉及隐私和法律问题时,应该考虑合成数据集,并将其视为获得对数据本身更多控制的一种方式。

1 参见“ VLFeat ”开源项目在线(http://www.vlfeat.org”)。

八、视觉流水线和优化

“欲速则不达。。. "

—树须,指环王

本章探讨了一些假设的计算机视觉流水线设计,以理解硬件/软件设计方案和优化。本章不是着眼于孤立的计算机视觉算法,而是将许多概念结合成完整的视觉流水线。为了说明不同方法的使用,我们为几个示例应用勾勒出了视觉流水线。示例应用包括使用汽车的形状和颜色的对象识别、使用局部特征的面部检测和情感检测、使用全局特征的图像分类以及增强现实。选择这些例子是为了说明在第五章中介绍的视觉度量分类中不同系列特征描述度量的使用。探索了视觉流水线每个阶段的替代优化。例如,我们考虑哪些视觉算法在 CPU 上运行得比在 GPU 上运行得更好,并讨论计算单元和内存之间的数据传输时间如何影响性能。

image 本章中的假设例子有时是粗略的,并不打算是完整的。相反,目的是探索设计的替代方案。示例中的设计选择仅用于说明;其他同样有效的设计选择可以用来构建工作系统。鼓励读者分析这些例子,找出弱点和替代方案。如果读者能改进这些例子,我们就成功了。

本章按顺序讨论了以下主要主题:

  1. 针对整个 SOC (CPU、GPU、内存)优化的一般设计概念。
  2. 使用不同描述符方法的四种假想视觉流水线设计。
  3. 软件优化资源和特定优化技术概述。

阶段、操作和资源

如图图 8-1 所示,计算机视觉解决方案可以在阶段、的流水线中实施。在流水线中,并行操作和顺序操作同时发生。通过以最佳方式使用所有可用的计算资源,可以最大限度地提高速度、功耗和内存效率。

9781430259299_Fig08-01.jpg

图 8-1 。虚拟分配将视觉流水线阶段分配给运营和计算资源。根据实际的资源能力以及功耗和性能的优化目标,分配会有所不同

优化方法因系统而异。例如,用于移动电话的低功率系统可能不具有丰富的 CPU SIMD 指令集,并且 GPU 可能具有非常有限的线程计数和低存储器带宽,不适合用于视觉流水线的通用 GPGPU 处理。然而,较大计算设备,例如安装在机架上的计算服务器,可能具有几个 CPU 和 GPU,且每个 CPU 和 GPU 将具有强大的 SIMD 指令和高存储器带宽。

表 8-1 提供了基于数据类型和处理器能力的资源操作分配的更多细节。例如,在传感器处理阶段,点线和区域操作在工作负载中占主导地位,因为传感器数据被组合成像素并进行校正。大多数传感器处理器基于具有宽 SIMD 指令字的数字信号处理器(DSP) ,并且 DSP 还可以包含固定功能几何校正单元或翘曲单元,用于校正诸如透镜失真之类的光学问题。在表 8-1 中列出的传感器 DSP 和 GPU 通常包含一个专用的纹理采样器单元,能够进行快速像素插值、几何扭曲、仿射和透视变换。如果代码是有很多分支的直线,没有太多的并行操作,CPU 是最好的选择。

表 8-1 。由数据类型和并行性指导的对计算资源的基本操作的假设分配(另见 Zinner [495])

image

如表 8-1 所示,数据类型和数据布局通常指导为给定任务选择最佳计算资源,以及算法和数据中的并行类型。此外,编程语言是基于并行性来选择的,例如使用 OpenCL 还是 C++。例如,CPU 可能支持浮点和双精度数据类型,但如果底层代码面向 SIMT 和 SIMD 并行,需要许多并发线程并行内核操作,那么具有高线程数的 GPU 可能是比单个 CPU 更好的选择。然而,在多个 CPU 上运行 OpenCL 这样的语言可能会提供与较小的 GPU 一样好的性能;有关性能信息,请参阅参考文献[544]以及 OpenCL 编译器的供应商信息。参见本章后面的“SIMD、SIMT 和 SPMD 基本面”一节

有关如何跨不同计算单元和内存优化基本图像处理操作的精彩讨论,请参见 Zinner 等人的 PfeLib 工作[495],该工作深入探讨了基于数据类型和智能内存使用的优化类型。

为了使从视觉处理阶段到操作和计算资源的分配具体化,我们将在本章的后面查看具体的视觉流水线示例。

计算资源预算

在实施愿景流水线之前,应合理尝试计算可用计算平台资源的成本,并确定应用是否与资源匹配。例如,用于军事战场的系统可能会优先考虑计算速度和准确性,而用于移动设备的应用会优先考虑电池寿命,并在性能和准确性之间进行权衡。

由于大多数计算机视觉研究关注的是在处理相对狭窄和明确定义的问题方面的突破,因此可用于指导视觉流水线分析和优化的一般工程讨论的研究有限。相反,我们遵循从硬件资源本身开始的思路,讨论性能、功耗、内存和 I/O 要求,并参考一些并行编程和其他代码优化方法的文献。视觉流水线分析和优化工程师将欢迎对自动化工具的进一步研究,以测量算法强度,如整数和浮点运算的数量、数据类型的位精度以及每个算法在读/写方面的内存传输数量。

如图图 8-2 所示,计算机系统的主要元素由 I/O、计算和内存组成。

9781430259299_Fig08-02.jpg

图 8-2 。假设的计算机系统,突出了 DSP、GPU、四个 CPU 内核、DMA 和内存架构形式的计算元素,在每个计算单元中使用 L1 和 L2 缓存和寄存器文件 RF

我们假设合适的高带宽 I/O 总线和高速缓存线将各种计算单元互连到存储器;在这种情况下,我们特别调用 MIPI 相机接口,它直接连接到我们假设的 SOC 中的 DSP。对于不久的将来的简单计算机视觉系统,我们假设价格、性能和功率曲线继续朝着正确的方向发展,以使大多数计算机视觉应用能够以低价格构建片上系统 (SOC) ,接近一次性计算成本——与任何小型便携式电子设备的价格相似。因此,这将实现低功耗和高性能的无处不在的视觉应用,而无需求助于为任何特定的计算机视觉算法而构建的专用硬件加速器。

以下是对图 8-2 中所示 SOC 组件的概述:

  • 两个 1080p 相机,一个用于 RGB,另一个用于独立的深度相机,如 TOF 传感器(如第一章中所述)。
  • 一个小型低功耗控制器 CPU ,具有精简指令集且无浮点,用于处理简单的事情,如键盘、加速度计更新、服务来自 DSP 的中断以及其他周期性任务,如网络中断处理程序。
  • 三个具有浮点运算能力的全 SIMD CPU,用于繁重的计算,通常是线程并行算法,如 tiling,但也用于 SIMD 并行算法。
  • 一个能够运行image 256 个全整数浮点线程的 GPU ,四个纹理采样器。各种各样的区域算法都可以很好地映射到 GPU,但编程模型是 SIMT 内核,如 DirectX 和 OpenGL 或 OpenCL 的计算着色器。
  • DSP具有有限的指令集和 VLIW 处理能力,通常非常适合像素处理和传感器处理。
  • 用于快速存储器传输的 DMA 单元;虽然显而易见,但 DMA 是一种简单有效的增加内存带宽和降低功耗的方法。

计算单元、算术逻辑单元和加速器

典型系统中有几种类型的计算单元,包括 CPU、GPU、DSP 和专用硬件加速器,如加密单元、纹理采样器和 DMA 引擎。每个 ALU 都有一个不同的指令集来适应预期的用途,因此了解每个计算单元的 ALU 指令集非常有帮助。

一般来说,计算机体系结构还没有发展到提供任何标准视觉流水线方法或硬件加速器的地步。这是因为计算机视觉出现了如此多的算法改进;选择在芯片中实现任何视觉加速器都有过时的风险。此外,创建计算机视觉硬件加速器也很困难,因为应用必须是可移植的。因此,开发人员通常选择足够好且可移植的高级语言实现,对专用硬件或 API 的依赖性最小。

相反,依赖 C++等通用语言并优化软件是一个很好的开始,正如根据需要利用 GPU 中现有的像素处理加速方法一样,如像素着色器和纹理采样器。标准 C++语言路径提供了跨平台的灵活性和可移植性,而不依赖于任何特定于供应商的硬件加速特性。

在本节开发的示例视觉流水线中,我们做了两个基本假设。首先,DSP 专用于传感器处理和光图像预处理,以平衡系统负载。第二,CPU 和 GPU 用于视觉流水线后续部分的下游,因此 CPU 与 GPU 的选择取决于所使用的算法。

由于带有可编程 alu 的计算单元通常是所有工具和开发人员关注的焦点,因此我们将在本章后面的“视觉算法优化和调整”一节中关注编程加速替代方案;此外,还将调查选定的优化资源和软件构建模块。

在图 8-2 所示的假想系统中,计算单元包括通用 CPU、一个主要用于图形和媒体加速和一些 GPGPU 加速的 GPU,以及一个用于传感器处理的 DSP。每个计算单元都是可编程的,并包含一个带有调整指令集的通用 ALU。例如,一个 CPU 包含通用编程的所有必要指令,也可能包含 SIMD 指令(在本章后面讨论)。GPU 包含平方根、反正切等超越指令,以及加速图形处理的相关指令。DSP 同样具有针对传感器处理而调整的指令集,可能是 VLIW 指令集。

硬件加速器通常是为常见的操作而构建的,例如 DSP 中用于传感器处理的几何校正单元和 GPU 中用于扭曲曲面片的纹理采样器。计算机视觉还没有标准,新的算法改进正在不断开发,因此除了嵌入式和特殊用途的系统外,没有什么动力为计算机视觉加速器添加任何专用芯片。相反,找到使用现有加速器的创造性方法可能会被证明是有益的。

在本章的后面,我们将讨论在各种计算单元上优化软件的方法,充分利用每个 ALU 和指令集的优势和预期用途。

电源使用

在没有非常详细的功率分析的情况下,很难量化 SOC 或单个计算设备上的特定算法所使用的功率量;可能模拟是最好的方法。通常,为 SOC 开发视觉流水线的系统工程师没有精确的功耗测量方法,只有简单的方法,如运行实际完成的应用和测量壁功率或电池消耗。

功耗问题有时与使用的计算设备有关,例如 CPU 与 GPU,因为每个设备都有不同的门数和时钟频率,因此消耗功率的速度也不同。由于 GPU 和 CPU 设计的芯片架构师都在努力提供最高的性能瓦特平方毫米,(我们假设每组芯片架构师都同样高效),在 CPU 与 GPU 的功率/性能竞赛中没有明显的赢家。与其他地方(如数据组织和内存架构)相比,通过使用 GPU 而不是 CPU 来节省功率的研究甚至可能不值得付出努力。

在 SIMD 和 SIMT 并行代码的情况下,权衡功率和性能的一种方法是使用 OpenCL 之类的语言,它支持在 CPU 或 GPU 上运行相同的代码。然后需要在每个计算设备上测量性能和功率,以量化实际功率和性能;在“视觉算法优化和调优”一节中,将有更多关于这个主题的讨论。

有关使用在特定 CPU 和 GPU 以及集群上运行的相同 OpenCL 代码的详细性能分析,请参见国家超级计算应用中心的出色研究[544]。此外,请参阅由主要 OpenCL 供应商(如英特尔、NVIDIA 和 AMD)提供的技术计算资源,了解他们在 CPU 和 GPU 上运行相同代码的 OpenCL 编译器的详细信息。有时结果会令人惊讶,尤其是对于多核 CPU 系统与较小的 GPU。

一般来说,视觉流水线的计算部分无论如何都不是消耗能量的地方;大部分功率消耗在内存子系统和 I/O 结构中,这些地方需要高数据带宽来保持计算流水线元素满负荷运行。事实上,所有的寄存器文件、高速缓存、I/O 总线和主存储器消耗了大部分的功率和大量的硅不动产。因此,在任何降低功耗的尝试中,内存使用和带宽都是高价值的攻击目标。内存副本越少,缓存命中率越高;本地寄存器文件中相同数据的重用越多越好。

内存使用

就电源和性能而言,内存是最重要的管理资源。开发视觉流水线的大部分注意力都放在算法和处理流程上,这已经足够具有挑战性了。然而,视觉应用对存储系统的要求很高。图像本身的大小并不大,但当我们考虑帧速率和通过视觉流水线为内核操作读写像素的次数时,内存传输带宽活动就变得更加清晰了。内存系统非常复杂,由每个计算单元旁边的本地寄存器文件、缓存、I/O 结构互连和系统内存组成。在本节中,我们将讨论几个内存问题,包括:

  • 像素分辨率、位精度和图像总尺寸
  • 视觉流水线中的内存传输带宽
  • 图像格式,包括灰度和色彩空间
  • 特征描述符大小和类型
  • 匹配和定位所需的精度
  • 特征描述符数据库大小

为了探究内存使用情况,我们将详细介绍局部兴趣点和特征提取场景,假设我们首先定位兴趣点,根据某些标准过滤兴趣点以选择一个较小的集合,计算所选兴趣点周围的描述符,然后根据数据库匹配特征。

一个合理的初步估计是,图像中 0.05%到 1%的像素的下限和上限之间可以产生不错的兴趣点。当然,这完全取决于:(1)图像纹理的复杂程度,(2)使用的兴趣点方法。例如,一幅纹理丰富、对比度高的图像会比一幅被云层包围、纹理和对比度很低的远处的山的图像产生更多的兴趣点。此外,兴趣点检测器方法产生不同的结果——例如,快速角点方法可能比 SIFT 比例不变狗特征检测到更多的角点,参见附录 A 。

描述符大小可能是一个重要的变量,参见表 8-2 。640x480 的图像将包含 307,200 个像素。我们估计 1%的上限,或 3072 个像素,可能有不错的兴趣点;我们假设 0.05%的下限是 153。我们提供了第二个估计,即兴趣点可以被进一步过滤,以便为给定的应用挑选出最佳的兴趣点。因此,如果我们假设实际上可能只有 33%的兴趣点被保留,那么我们可以说 153 * 33 到 3,072 * 33 个兴趣点是特征描述的良好候选。这种估计变化很大,当然取决于图像纹理、使用的兴趣点方法和兴趣点过滤标准。假设一个特征描述符的大小是 256 字节,每帧的总描述符大小是 3072x256x.33 = 259,523 字节最大值—这并不极端。然而,当我们考虑特征匹配阶段时,特征描述符计数和存储器大小将是一个问题,因为每个提取的特征必须与数据库中的每个训练特征集匹配。

表 8-2 。每帧描述符字节(1%兴趣点),改编自[141]

image

一般来说,本地二进制描述符提供了低内存占用的优势。例如,如 Miksik 和 Mikolajczyk [141]所述,表 8-2 提供了用于比较的几个描述符的字节数。这里对数据进行了注释,为各种分辨率添加了描述符工作内存大小,单位为每帧字节数。

在表 8-2 中,图像帧分辨率在第 1 行,每帧像素数在第 2 行,以字节为单位的典型描述符大小在后续行。所选描述符的总字节在第 1 列,其余各列显示每帧的总描述符大小,假设每帧中估计有 1%的像素用于计算兴趣点和描述符。实际上,我们估计 1%是每帧描述符计数的上限估计,0.05%是下限估计。请注意,基于设计优化,以字节为单位的描述符大小与表中的不同。

内存带宽通常是一个隐藏的成本,并且在优化周期结束之前经常被忽略,因为开发算法通常具有足够的挑战性,而不需要担心内存访问模式和内存流量。表 8-2 包括各种图像帧尺寸和特征描述符尺寸的几个内存变量的汇总。例如,使用第 2 行中的 1080p 图像像素计数作为基础,我们看到每个颜色通道 16 位的 RGB 图像将消耗:

image

并且如果我们包括需要保持的灰度通道 I 周围,从 RGB 计算,RGBI 的总大小增加到:

image

如果我们假设每秒 30 帧,两个 RGB 摄像头用于深度处理+I 通道,将完整的 4 通道 RGBI 图像对移出 DSP 所需的存储器带宽接近 1GB /秒:

image

因此,我们在本例中假设大约 1GB/秒的基线内存带宽,只是为了将映像对从 ISP 向下游移动。我们现在忽略传感器处理的 ISP 存储器读/写要求,假设巧妙的 DSP 存储器缓存、寄存器文件设计和汇编程序中的循环展开方法可以减少存储器带宽。

通常,来自计算单元中的寄存器文件的存储器在单个时钟周期内传输;来自不同高速缓存层的存储器可能需要几十个时钟周期;来自系统内存的内存可能需要数百个时钟周期。在内存传输期间,CPU 或 GPU 中的 ALU 可能处于空闲状态,等待内存。

内存带宽分布在 ALU 处理器旁边的快速寄存器文件中,并通过内存缓存甚至系统内存,因此分析实际内存带宽相当复杂。尽管此处提供了一些内存带宽数字,但这只是为了说明活动。

并且存储器带宽仅在 DSP 的下游增加,因为每个图像帧将在图像预处理期间被读取并可能被重写几次,然后在兴趣点生成和特征提取期间再次被读取。例如,如果我们假设在 I 通道上仅使用 5×5 内核进行一次图像预处理操作,则每个 I 像素被读取另外 25 次,希望是从存储器高速缓存线和快速寄存器中读取。

这种内存流量并不都来自慢速系统内存,它主要发生在快速内存缓存系统和快速寄存器文件中,直到出现缓存未命中或快速寄存器文件重载。然后,性能会下降一个数量级,等待缓冲区提取和寄存器重载。如果我们在 I 通道上增加一个 FAST9 兴趣点检测器,则每个像素会被读取 81 次(9x9),可能是从内存缓存线或寄存器中读取。如果我们在大约 0.05%的检测到的兴趣点上添加一个异常特征描述符,我们将每个描述符添加 41×41 像素读取以获得该区域(加上 45×2 读取用于 41×41 区域内的点对比较),希望是从存储器高速缓存线或寄存器。

通常图像会被处理成各种格式,例如图像预处理的 RGB 颜色来增强图像,以及转换成灰度强度 I 来计算兴趣点和特征描述符。RGB 之间的颜色转换是一种隐藏的内存成本,需要数据复制操作和颜色转换的临时存储,为了获得最佳精度,通常以浮点形式完成。因此,颜色转换可能会多消耗几 GB/秒的内存带宽。对于所有的内存活动,可能会将全部或部分所需的图像缓存到较慢的系统内存中,从而降低非线性性能。

因此,描述符的内存大小是整个视觉流水线中的一个考虑因素。首先,我们考虑何时提取特征;第二,我们查看特征何时被匹配并从特征数据库中检索。在许多情况下,特征数据库的大小是内存领域的关键问题,因为要匹配的所有描述符的总大小会影响静态内存存储大小、内存带宽和模式匹配率。在分类和训练期间将特征空间缩减为可快速搜索的格式通常是至关重要的。除了第四章中讨论的优化分类方法,数据组织问题可能主要在标准计算机科学搜索、分类和数据结构领域;在第四章的中提供了一些讨论和参考。

当我们查看特征数据库或训练集时,内存大小可能是需要应对的主要问题。是否应该将整个特征数据库保存在云服务器上进行匹配?还是应该将整个特征数据库保存在本地设备上?是否应该使用在本地设备上从服务器缓存部分特征数据库的方法?所有上述方法目前都在实际系统中使用。

总之,内存、缓存和寄存器文件远远超过了计算单元中 ALU 处理器的芯片面积。通过视觉流水线的 SOC 结构的存储器带宽是功率和性能的关键,要求快速的存储器架构和存储器高速缓存排列,以及仔细的软件设计。然而,内存大小本身并不是全部,因为每个字节都需要在计算单元之间移动。因此,除了小型应用之外,仔细考虑内存占用和内存带宽是非常重要的。

通常,仅通过仔细关注内存问题就可以显著提高性能和功耗。在本章的后面,我们将介绍几种有助于减少内存带宽和提高内存性能的设计方法,例如锁定内存中的页面、流水线代码、循环展开和 SIMD 方法。在视觉流水线中最小化内存流量的未来研究是一个值得的领域。

输入/输出性能

在这里,我们将 I/O 主题作为一个一般的性能问题,包括计算单元之间的 SOC I/O 结构上的数据带宽、来自摄像机的图像输入,以及将数据库流量匹配到存储设备的功能描述符。我们在讨论内存时提到了 I/O 问题,因为像素数据在 I/O 总线上沿着视觉流水线在各种计算设备之间移动。一个主要的 I/O 考虑是在特征匹配时特征描述符数据移出数据库,因此使用较小的描述符并使用有效的机器学习和分类方法优化特征空间是有价值的。

另一种要考虑的 I/O 是摄像机输入本身,它通常通过标准的 MIPI 接口来完成。然而,可以使用任何总线或 I/O 结构,例如 USB。如果视觉流水线设计包括完整的硬件/软件系统设计,而不仅仅是标准 SOC 上的软件,那么就值得特别关注摄像机的硬件 I/O 子系统设计,以及与硬件辅助数据库进行图像存储器传输的专用快速总线。当考虑功率时,I/O 结构硅面积和功率远远超过 ALU 处理器的面积和功率。

愿景流水线示例

在本节中,我们来看看视觉流水线的四个假设示例。选择每一个来说明来自第五章中介绍的视觉度量分类的独立描述符族,包括直方图和颜色匹配等全局方法、快速兴趣点与反常描述符相结合等局部特征方法、傅立叶描述符等基空间方法,以及使用形态学和整体对象形状度量的基于形状的方法。这些示例被分解为阶段操作、资源、,如图图 8-1 所示,用于以下应用:

  • 汽车识别, 利用形状和颜色
  • 人脸识别,利用稀疏局部特征
  • 图像分类,使用全局特征
  • 增强现实,使用深度信息和跟踪

这些例子都不包括分类、训练和机器学习的细节,这超出了本书的范围(机器学习参考资料在第四章中提供)。假设存储特征描述符的简单数据库对于该讨论是足够的,因为这里的焦点是图像预处理和特征描述阶段。在完成示例并探索计算资源分配的替代类型(如 GPU 与 CPU)后,本章最后讨论了每种计算资源的优化资源和技术。

汽车识别

在这里,我们设计了一个视觉流水线,通过使用多边形形状描述符精确颜色匹配来识别汽车或机器零件等物体。例如,多边形形状度量可用于测量汽车的长度和宽度,而颜色匹配可用于测量油漆颜色。在某些情况下,如定制汽车油漆工作,颜色本身不足以识别。

对于这个汽车示例,主要的设计挑战包括从道路上分割汽车、匹配油漆颜色以及测量汽车尺寸和形状。整个系统包括一个 RGB-D 相机系统,精确的颜色和光照模型,以及几个协同使用的特征描述符。参见图 8-3 。我们通过这个例子详细探讨了此类完整视觉流水线设计的挑战和可能的解决方案。

9781430259299_Fig08-03.jpg

图 8-3 。使用基于形状和基于颜色的视觉流水线的汽车识别应用的设置。RGB 和 D 摄像机安装在路面上方,直接向下看

我们根据以下要求定义系统:

  • 120 fps 的 1080p RGB 彩色视频(1920x1080 像素),水平安装以提供最高的长度分辨率,每种颜色 12 位,65 度 FOV。
  • 1080p 立体深度相机,8 位 Z 分辨率,120 fps,65 度 FOV。
  • 图像 FOV 覆盖 4 条迎面而来的交通车道,宽 44 英尺,长 60 英尺,当交通停止时,足以在每条车道上行驶大约 3 辆正常汽车的长度。
  • 限速 25 英里/小时,相当于每秒 37 英尺。
  • 摄像机安装在头顶上的停车灯旁边,配有路灯用于夜间照明。
  • 具有 4 个 CPU 内核的嵌入式 PC,具有 SIMD 指令集、一个 GPU、8GB 内存、80GB 磁盘;假设高端 PC 具有同等性能(为简洁起见,未指定)。
  • 实时识别汽车 以确定品牌和型号;还包括每个事件的发生次数、时间戳和置信度得分。
  • 汽车由主要制造商提供的真实情况训练数据集,包括几何图形,以及用于库存模型的所有车身颜色的精确颜色样本;无法识别定制颜色和售后颜色。
  • 汽车的平均尺寸从 5 到 6 英尺宽,12 到 16 英尺长。
  • 准确率达到 99%或更高。
  • 简化的鲁棒性标准,包括噪声、照明和运动模糊。

分割汽车

为了从路面上分割出汽车,使用了一个以 1080p 120fps(每秒帧数)运行的立体深度摄像机,这使得利用深度将每辆汽车从路面上分离出来变得简单。为了实现这一点,开发了一种将深度相机校准到基线道路表面的方法,允许将汽车识别为高于道路表面。我们在这里画出深度校准方法以供说明。

在深度图上观察到球面深度差异,主要影响 FOV 的边缘。为了校正球面场失真,使用合适的校准深度函数(将在现场通过分析确定)来校正每个图像,然后处理每个水平线,考虑在边缘处更大的曲线真实深度距离,以设置每个线的深度相等。

由于速度限制是 25 英里/小时,或每秒 37 英尺,以 120 FPS 成像产生的最大运动模糊约为 0.3 英尺,或每帧 4 英寸。由于一个像素的长度被确定为 0.37 英寸,如图 8-4 所示,从像素计算汽车长度的能力在大约 4 英寸/0.37 英寸= 11 个像素的范围内是准确的,或者大约是一辆 12 英尺长的汽车以 25 英里/小时的速度行驶的 3%,包括运动模糊。然而,可以在图像预处理期间对每个 RGB 和深度图像应用运动模糊补偿,以有效地进一步减少运动模糊;存在几种基于在多个连续图像上使用卷积或补偿的方法[305,492]。

9781430259299_Fig08-04.jpg

图 8-4 。用于汽车识别的特征

匹配油漆颜色

我们假设,在许多情况下,仅使用油漆颜色来识别车辆是可能的,因为每个制造商都使用专有颜色,因此可以采用精确的色度学。为了匹配油漆颜色,每个颜色通道 12 位应提供足够的分辨率,这是在颜色匹配阶段使用 CIECAM02 模型和 Jch 颜色空间【253】确定的。这需要开发几个具有不同照明条件下的场景的摄像机的校准设备模型,例如在一天的不同时间的全日照、云层、清晨和黄昏的弱光条件以及夜间使用安装在交通上方的照明器灯以及摄像机和停车灯。

色度准确度的关键是设备模型对各种照明条件的考虑。测量色温的光传感器,连同一天中的时间和一年中的季节的知识,被用于选择正确的设备模型,以用于一天中的时间和一年中的季节的适当照明。然而,脏车给颜色搭配带来了问题;现在我们忽略这个细节(自定义油漆工作也是一个问题)。在某些情况下,颜色描述符可能没有用或不可靠;在其他情况下,仅颜色就足以识别汽车。参见第二章中关于色彩管理的讨论。

测量汽车尺寸和形状

对于汽车的尺寸和形状,最好的测量方法是直视汽车,以减少透视失真。如图 8-4 中的所示,使用来自立体摄像机的深度信息,结合汽车形状的多边形形状分割,汽车被分割成 C(货物)、T(顶部)和 H(发动机罩)区域。为了计算形状,基于测试期间的最佳结果,将使用 RGB 和 D 图像的某种加权组合来生成单个图像。我们假设摄像机安装在所有车道中央的最佳位置,但是在 FOV 的远端会存在一些透视失真。我们还假设应用几何校正来将图像校正成笛卡尔对齐。假设用于调整 FOV 的几何校正所引入的误差可以忽略不计,使用最小尺寸为 5' x 12 '的汽车作为例子,预计长度和宽度的近似尺寸精度如下:

image

本例使用了以下形状特征:

  • 包含所有特征的边界框;使用宽度和长度
  • 在汽车区域中间计算的质心
  • 从通过质心到周长的最短直径计算的单独宽度
  • 以与汽车前部的距离测量的后视镜特征;镜像位置是边界框内最小和最大的周长宽度点
  • 使用深度将形状分割成三个区域;在每个区域测量颜色:货舱(C)、顶部(T)和发动机罩(H)
  • 周长形状的傅立叶描述符,通过以 5 度的间隔测量从质心到周长点的线段来计算

特征描述符

几个特征描述符一起用于识别,并且汽车识别的置信度基于来自所有描述符的组合分数。要提取的关键特征描述符如下:

  • 汽车形状因素: 对道路上方的每辆汽车进行基于深度的分割,用于粗略的形状轮廓。随后进行一些形态学处理来清理边缘和去除噪声。对于每个分割的汽车,为面积、周长、质心、边界框和周长形状的傅立叶描述符计算对象形状因子。边界框测量整体宽度和高度,傅立叶描述符测量圆度和形状因子;一些汽车更加方方正正,一些更加弯曲。(有关形状描述符的更多信息,参见图 6-32 、图 2-18 和第六章。有关深度传感器的更多信息,请参见第一章。)此外,计算后视镜与汽车前方的距离;镜子位于对象周界周围的宽度极值处,对应于边界框的宽度。
  • 汽车区域分割 : 进一步分割使用基于深度的几个单独的汽车区域,即发动机罩、车顶和行李箱。创建一个简单的直方图来收集深度统计矩,执行诸如 K-means 的聚类算法来形成三个主要的深度聚类:车顶将是最高的,发动机罩和行李箱将是第二高的,窗户将在中间(敞篷车缺少顶部区域,此处不包括)。发动机罩、车顶、行李箱和车窗的像素区域被用作描述符。
  • 汽车颜色 : 被分割的发动机罩、车顶和行李箱区域的主要颜色被用作颜色描述符。色彩在 Jch 色彩空间中处理,这是 CIECAM 系统的一部分,可产生高精度。从颜色样本中提取主色信息,并根据照明模型进行归一化。在多种油漆颜色的情况下,会对每种颜色进行单独的颜色标准化。(有关色度的更多信息,请参见第三章。)

校准、设置和真实情况数据

关于场景设置、摄像机校准和其他校正,做出了几个关键假设;我们总结如下:

  • 道路深度面:深度相机校准到路面,作为分割路面上方汽车的参考;仅具有道路的基线深度图被校准作为参考并用于实时分割。
  • 设备模型:每辆汽车的模型都是根据制造商的信息创建的,每个品牌和模型都有精确的车身几何形状和颜色。定制油漆的汽车混淆了这种方法;然而,形状描述符和汽车区域深度分割提供了一个安全选项,可能足以给出良好的匹配——只有测试才能确定。
  • 光照模型:为各种条件创建模型,如晴天和阴天的晨光、日光和晚光;基于一天中的时间、一年中的时间和天气条件来选择照明模型,以获得最佳匹配。
  • 用于校正的几何模型:为 RGB 和深度相机设计整个 FOV 的模型,在每个新帧应用以校正图像。

流水线阶段和操作

假设系统预先完全校准,完整流水线的基本实时处理流程如图 8-5 所示,分为三个主要操作阶段。注意,完整的流水线包括图像预处理阶段,用于在 FOV 中对准图像并分割特征,特征描述阶段,用于计算形状和颜色描述符,以及用于特征匹配的对应阶段,用于开发由形状和颜色特征的加权组合组成的最终汽车标签。我们假设在一些标准数据库中,每个特性有一个单独的数据库表就可以了。

这里没有尝试创建优化的分类器或匹配阶段;相反,我们假设,在没有证明或测试的情况下,使用标准数据库通过几千个汽车对象的品牌和模型进行的强力搜索对 ALPHA 版本很有效。

注意在图 8-5 (右下角)中,每辆汽车都是逐帧跟踪的,我们在此不定义跟踪方法。

9781430259299_Fig08-05.jpg

图 8-5 。利用多边形形状特征和颜色进行汽车识别的假想视觉流水线操作

运营和计算资源

对于流水线阶段的每个操作,我们现在探索到可用计算资源的可能映射。首先,我们回顾一下示例系统中可用的主要资源,它包含 8GB 的快速内存,我们假设有足够的空闲空间来映射和锁定内存中的整个数据库以避免分页。我们的系统包含四个 CPU 内核,每个内核都具有 SIMD 指令集,以及一个能够同时运行 128 个 SIMT 线程的 GPU,128GB/s 的内存带宽可供 GPU 和 CPU 共享内存,功能足够强大。让我们假设,总的来说,计算和内存资源对我们的应用来说是很好的,不需要考虑特殊的内存优化。接下来,我们看一下为计算资源分配操作的粗粒度优化。表 8-3 提供了对可能的资源分配的评估。

表 8-3 。将操作分配给计算资源

9781430259299_Table08-03.jpg

资源分配标准

在我们的简单示例中,如表 8-3 所示,为计算单元分配算法的主要标准是处理器适用性和处理器间的负载平衡;对于这种应用,电源不是问题。图 8-5 中提供的资源分配操作是这个假设设计练习的起点;实际的优化会有所不同,根据性能分析进行调整。然而,假设每个算法所使用的内存访问模式是显而易见的,我们可以根据内存访问模式很好地猜测资源分配。在二阶分析中,我们还可以考虑跨流水线的负载平衡,以最大化计算单元的并行使用;然而,这需要实际的性能测量。

在这里,我们将暂时将表 8-3 中的任务分配给资源。如果我们看看内存访问模式,使用 GPU 执行顺序任务 2 和 3 是有意义的,因为我们可以首先将图像映射到 GPU 内存空间,然后使用 GPU 执行三个顺序操作。GPU 有一个纹理采样器,我们将任务 2 分配给它,使用四点扭曲进行几何校正。一些 DSP 或相机传感器处理器也有一个能够进行几何校正的纹理采样器,但在我们的例子中没有。除了几何校正,运动模糊也是 GPU 的一个很好的候选,它可以在着色器中有效地实现为区域操作。对于更高端的 GPU,在媒体部分甚至可能有运动模糊补偿的硬件加速。

稍后,在流水线中,在任务 4 和 5 中图像已经被分割之后,任务 6 中的形态学阶段可以使用 GPU 着色器快速执行;然而,将图像移入和移出 GPU 进行形态学处理的成本实际上可能比在 CPU 上执行形态学处理要慢,因此需要进行性能分析,以做出关于 CPU 与 GPU 实施的最终设计决策。

在阶段 7 到 11 的情况下,如表 8-3 所示,面积、周长、质心和其他测量的算法跨越了一个非局部化的数据访问模式。例如,周界追踪沿着汽车的边缘。因此,我们将使用单个 CPU 通过图像来跟踪周长,并计算每辆汽车的面积、质心和边界框。然后,我们将每个边界框作为一个图像块分配给一个单独的 CPU 线程,用于计算剩余的测量值:径向线段长度、傅立叶描述符和镜像距离。然后每个边界框被分配给一个单独的 CPU 线程,用于计算每个区域的色度,包括货物、车顶和发动机罩,如表 8-3 所示。每个 CPU 线程使用 C++进行颜色转换,并试图使用编译器标志来强制 SIMD 指令优化。

使用形状和颜色特征可以逐帧跟踪汽车;然而,我们在这里不开发跟踪算法。对于通信和匹配,我们依赖于来自第三方的通用数据库,该数据库在 CPU 上的独立线程中运行,与流水线的早期阶段并行执行。我们假设数据库可以将自己的工作分成并行线程。然而,稍后的优化阶段可以重写并创建更好的数据库和分类器,使用并行线程来匹配特征描述符。

面孔、情绪和年龄识别

在这个例子中,我们设计了一个使用局部特征描述符和兴趣点的人脸、情感和年龄识别流水线。人脸识别涉及识别一个独特的人的独特的脸,而人脸检测只涉及确定人脸的位置和感兴趣的特征,如情绪、年龄和性别。我们的例子是面部检测,并找到对象的情绪和年龄。

为简单起见,本例使用固定摄像机拍摄的单人面部照片进行生物识别,以进入安全区域。使用面部照片大大简化了这个例子,因为不需要从许多角度和距离在人群中挑选人脸。关键的设计挑战包括找到一个可靠的兴趣点和特征描述符方法来识别关键的面部标志,确定情绪和年龄,并在标准化的相对坐标系中对标志进行建模,以便计算距离比和角度。

用于生物识别的优秀面部识别系统已经部署了几十年,使用了广泛的方法,实现了接近 100%的准确率。在本练习中,不试图证明性能或准确性。我们根据以下要求定义系统:

  • 1080p RGB 彩色视频(1920x1080 像素),30 fps,水平安装以提供最高的长度分辨率,每种颜色 12 位,65 度 FOV,30 FPS

  • 图像 FOV 覆盖 2 英尺高,1.5 英尺宽,足够一个完整的头部和肩膀顶部

  • 背景是白色下拉屏幕,便于分割

  • 照明位于对象的前方稍上方,在整个面部投射微弱的阴影,突出眼睛、嘴唇和鼻子周围的角落

  • 对于每个面部,系统识别以下标志:

    • 眼睛:两个眼角和一个眼心
    • 主要眼睛颜色:在 CIECAM02 JCH 颜色坐标中
    • 主面颜色:CIECAM02 JCH 颜色坐标
    • 眉毛:眉弧的两个端点和一个中心,用于确定情绪
    • 鼻子:鼻尖上的一个点和鼻孔旁边的两个最宽点,用于决定情感和性别
    • 嘴唇:嘴唇的两个端点,上唇的两个中心脊
    • 脸颊:每个脸颊中心一分
    • 下巴:一个点,下巴的底点,可能会因为面部毛发而不可靠
    • 头顶:一分;可能由于发型而不可靠
    • 独特的面部标志:这些标志可能包括胎记、痣或疤痕,并且必须落在围绕面部区域计算的边界框内
  • 在原始图像上的每个检测到的标志处计算异常特征

  • 准确率达到 99%或更高

  • 简化的鲁棒性标准,仅包括比例

请注意,情绪、年龄和性别都可以从选定的相对距离和面部特征的比例来估计,并且我们假设人脸解剖学专家提供了用于真实系统的正确位置和比例。参见图 8-6 。

9781430259299_Fig08-06.jpg

图 8-6 。(左)基于头部和面部区域的边界框的比例比率作为预测面部标志位置的指导方针。(右)带有检测到的面部标志位置以及标志之间测量的相对角度和距离的注释图像。相对测量值用于确定情绪、年龄和性别

为该示例系统计算的特征集包括:

  1. 诸如眼睛、眉毛、鼻子和嘴的面部标志的相对位置
  2. 地标之间的相对比例和比率,以确定年龄、性别和情感
  3. 每个地标的反常描述符
  4. 眼睛颜色

校准和地面实况数据

校准很简单:在拍摄对象的背后使用白色背景,拍摄对象站在离相机大约 4 英尺的地方,可以拍摄头部和肩膀上部。(我们将在本节稍后讨论用于从背景区域分割头部的操作。)假设我们有一个 1080p 的图像,我们将 1920 个像素分配给垂直方向,1080 个像素分配给水平方向。

假设摄影师足够好,能够将头部置于图像的中心,使头部占据大约 50%的水平像素和大约 50%的垂直像素,那么头部的像素分辨率为大约 540 像素水平和大约 960 像素垂直,这对于我们的应用来说足够好,并且对应于头部高度与宽度的比率。由于我们假设男性和女性成年人的平均头部高度约为 9 英寸,宽度为 6 英寸,使用我们对距离相机 4 英尺的假设,我们有足够的像素精度和分辨率:

image

真实情况数据包括:(1)已知人的面部照片,以及(2)一组用于帮助定位面部标志的相关模板形式的标准眼睛标志特征(相关模板的稀疏码本)。有两组相关模板:一组用于基于使用 Hessian 检测器找到的位置的精细特征,另一组用于基于使用基于可控滤波器的检测器找到的位置的粗糙特征(精细和粗糙检测器将在本示例的后面更详细地描述)。

由于像眼睛和嘴唇这样的面部特征在人与人之间非常相似,所以典型的界标特征相关模板仅提供界标及其位置的粗略识别。提供了覆盖所有标志的年龄和性别范围的几个模板,例如眼角、眉角、眉峰、鼻角、鼻底、唇角和唇中心区域形状。为了简洁起见,我们在这里不开发用于相关性模板的基础事实数据集,但是我们假设该过程是使用通过扭曲或改变真实特征并针对几个真实人脸测试它们以得到最佳典型特征集而创建的合成特征来完成的。相关模板用于面部标志识别阶段,稍后讨论。

兴趣点位置预测

为了找到面部标志,如眼睛、鼻子和嘴巴,这个示例应用通过使用面部照片进行了简化,使面部特征的位置可预测,并允许在预测的位置智能搜索每个特征。对于这个例子,我们使用来自人体解剖学的基本比例假设(被艺术家使用了几个世纪)来预测面部特征位置,并允许在预测的位置搜索面部特征,而不是求助于头部尺寸和形状的科学研究。面部特征比例主要因年龄、性别和种族而异;例如,典型的成年男性比率如表 8-4 所示。

表 8-4 。面部和头部特征的基本近似比例

| 头部高度 | 头部宽度 X 1.25 |
| 头部宽度 | 头部高度 X .75 |
| 面部高度 | 头部高度 X .8 |
| 表面宽度 | 头部高度 X .8 |
| 眼睛位置 | 眼睛中心距离左/右边缘 30%,距离顶部 50% |
| 眼睛长度 | 头部宽度 X 1.25 |
| 眼间距 | 头部宽度 X .5 |
| 鼻部位置 | 比唇角高 25% |
| 鼻子长度 | 头部高度 X .25 |
| 唇角 | 大约眼中心 x ,比下巴 y 高 15%左右 |
| 嘴/嘴唇宽度 | 头部宽度 X .07 |

image 表 8-4 中的信息是根据初级艺术家的材料合成的,用于说明目的,并不保证准确。

要建立的最基本的坐标是头部的边界框。根据边界框,可以预测其他标志面部特征位置。

使用边界框分割头部和面部

如前所述,脸部照片是在白色背景下从大约 4 英尺的距离拍摄的,允许简单地分割头部。我们对简单的颜色强度使用阈值处理,如【RGBI-1】, ,其中 I = (R=G + B) / 3,并且白色水滴背景被识别为最高强度。

被分割的头部和肩部区域用于创建头部和面部的边界框,这将在下面讨论。(注意:狂野发型需要另一种方法,也许是基于面部特征相对于头型和比例的相对大小和位置。)在分割头部的边界框之后,我们继续分割面部区域,然后找到每个标志。头部边界框的粗略尺寸分两步计算:

  1. Find the top and left, right sides of the head— Topxy, Leftxy, Rightxy—which we assume can be directly found by making a pass through the image line by line and recording the rows and columns where the background is segmented to meet the foreground of head, to establish the coordinates. All leftmost and rightmost coordinates for each line can be saved in a vector, and sorted to find the median values to use as Rightx / Leftx coordinates. We compute head width as:

    Hw=右 x -左 x

  2. Find the chin to assist in computing the head height Hh. The chin is found by first predicting the location of the chin, then performing edge detection and some filtering around the predicted location to establish the chin feature, which we assume is simple to find based on gradient magnitude of the chin perimeter. The chin location prediction is made by using the head top coordinates Topxy and the normal anatomical ratio of the head height Hh to head width Hw, which is known to be about 0.75. Since we know both Topxy  and Hw  from step 1, we can predict the x and y coordinates of the chin as follows:

    image

实际上,在某些情况下,发型会使头部的分割变得困难,因为头发可能在顶部堆积得很高,或者在两侧延伸得很宽,覆盖了耳朵。然而,我们可以重复几次下巴检测方法来找到最佳下巴,或者假设我们的分割方法将通过头发过滤器模块以某种方式解决这个问题,因此为了简洁起见,我们继续这个例子。

为了定位下巴位置,在预测位置周围使用水平边缘检测掩模,因为下巴主要是水平边缘。对连接的水平边缘最大值的坐标进行过滤,找到水平边缘集合的最低 y 坐标,将最低 x/y 坐标的中值作为下巴中心位置的初始猜测。稍后,当眼睛位置已知时,下巴 x 位置可以通过眼睛之间的中点位置进行检查,并在需要时重新计算。参见图 8-7 。

9781430259299_Fig08-07.jpg

图 8-7 。面部标志的位置。(左)使用 Hessian 张量的最大特征值增强的面部标志[493]用于生成 Hessian 特征值的 ImageJ 的 FeatureJ 插件(由 Erik Meijering 开发的 FeatureJ)。;注意提供额外细节的细微边缘。(中心)基于模板的特征检测器,使用具有沿着 Canny 检测器[400]的线的附加滤波的可操纵滤波器来提供粗略的细节。(右)用于计算中心图像的方向可调滤波器模式。使用对比窗口重新映射来突出边缘,从而增强两幅图像

包含面部的头部边界框被假定为:

  • BoundingBoxTopLeftx = Leftx
  • BoundingBoxTopLefty = Topy
  • boundingbox bottom right = right
  • boundingbox bottom right = chiny

面部标志识别和计算机特征

既然计算了头部边界框,就可以使用表 8-4 中的基本比例估计来预测面部标志特征集的位置。在每个预测位置周围进行搜索以找到特征;参见图 8-6 。例如,眼睛的中心位置从两侧向内大约 30 %,从头顶向下大约 50%。

在我们的系统中,我们使用具有两个级别的图像金字塔来进行特征搜索,粗级别搜索被下采样四次,以及全分辨率的精细级别搜索来重新定位兴趣点,计算特征描述符,并进行测量。从粗到细的方法允许头部的相对尺寸有很大的变化,以考虑到由于与照相机的距离和/或由于年龄造成的头部尺寸的差异而产生的轻微比例不变性。

在头部倾斜的情况下,我们不在这里增加一个步骤来旋转垂直于笛卡尔坐标的头部;然而,这很容易做到。例如,可以使用迭代过程来最小化正交边界框的宽度,使用从-10 度到+10 度每 2 度进行几次图像旋转。为每次旋转计算边界框,并且取最小的边界框宽度来找到用于校正头部倾斜的图像的角度。

此外,我们没有在这里添加计算皮肤表面纹理的步骤,这对于年龄检测以发现皱纹是有用的,这可以通过分割几个皮肤区域,例如前额、眼角和嘴周围的区域,并使用边缘或纹理度量计算表面纹理(皱纹)来容易地完成。

地标检测步骤包括特征检测、特征描述和计算地标之间的位置和角度的相对测量值,如下所示:

  1. 计算兴趣点:在搜索面部特征之前,使用兴趣点检测器来计算预测位置周围的可能候选位置。这里,我们使用两个检测器的组合:(Hessian 张量的最大特征值[493],以及(2)使用类似于 Canny 方法[400]的边缘检测过滤标准处理的可控过滤器[388],如图 8-7 所示。Hessian 和 Canny-like 边缘检测器图像之后是对比度窗口以增强边缘细节。Hessian 风格和 Canny 风格的图像一起用于在接下来的相关阶段中对最佳兴趣点的实际位置进行投票。
  2. 使用相关性计算界标位置:使用前面描述的一组规范的相关性模板来确定每个面部界标特征的最终位置,包括眼角、眉角、眉峰、鼻角、鼻底、唇角和唇中心区域形状。开始相关搜索的预测位置是来自步骤 1 的两个检测器的平均位置:(Hessian 方法提供精细特征细节,(2)而方向可调滤波器方法提供粗略特征细节。测试将确定相关性本身是否足够,而不需要来自步骤 1 的兴趣点。
  3. 使用反常描述符描述地标:对于步骤 2 中找到的每个地标位置,我们计算反常描述符。SIFT 可能同样有效。
  4. 使用 CIECAM02 JCH 测量主要眼睛颜色:我们使用超像素方法[257,258]分割出眼睛中心周围的颜色区域,并制作超像素细胞颜色的直方图。眼睛的黑色瞳孔和白色应该聚集成直方图中的峰值,并且眼睛的主色也应该聚集在直方图中。使用直方图对应的方法,甚至可以识别多种颜色的眼睛。
  5. 计算界标之间的相对位置和角度:在上面的步骤 2 中,使用相关性来找到每个特征的位置(如果需要,达到亚像素精度[468])。如图 8-6 所示,我们使用地标位置作为测量几个特征相对距离的基础,例如:
    1. 眼睛距离,中心到中心,对年龄和性别有用
    2. 眼睛大小,从眼角到眼角
    3. 眉毛角度,从末端到中心,对情感有用
    4. 眉毛到眼睛的角度,两端到中间的位置,有助于表达情感
    5. 眉毛到眼睛中心的距离,对情感有用
    6. 嘴唇或嘴的宽度
    7. 中央唇线与唇角成角度,有助于表达情感

流水线阶段和操作

管线阶段和操作如图图 8-8 所示。为了对应,我们假设每个特征有一个单独的数据库表。我们对创建优化的分类器来加速模式匹配不感兴趣;暴力搜索没问题。

9781430259299_Fig08-08.jpg

图 8-8 。使用局部特征的面部、情感和年龄检测的假想视觉流水线中的操作

运营和计算资源

对于这个例子,大部分是最适合 CPU 的直线代码。以数据访问模式为指导,边界框、相对距离和比率、反常描述符和通信是 CPU 的良好选择。在某些情况下,可以使用单独的 CPU 线程,例如在单独的线程中计算每个界标处的异常描述符(对于这个简单的应用,线程可能是多余的)。我们假设使用标准数据库进行特征匹配。我们的申请被认为有足够的时间等待信件。

有些操作适合 GPU 例如区域操作,包括 Hessian 和 Canny-like 兴趣点检测器。可以使用单个公共数据读取循环和组合处理循环将这些方法组合并优化到单个着色器程序中,该程序将输出生成两个图像,每个检测器一个图像。此外,我们假设 GPU 为媒体部分中的快速、硬件加速的相关块匹配器提供 API,因此我们利用了硬件加速的相关。

资源分配的标准

在这个例子中,性能不是问题,所以使用计算机资源的标准放宽了。事实上,所有代码都可以编写为在单个 CPU 上的单个线程中运行,并且在我们的目标系统假设下,性能可能足够快。然而,表 8-5 中所示的资源分配旨在说明每个操作的资源的合理使用,以在 SOC 中分配工作负荷。

表 8-5 。将操作分配给计算资源

9781430259299_Table08-05.jpg

图像分类

在我们的下一个例子中,我们设计了一个简单的图像分类系统,用于移动电话,目标是识别相机视野中的主要对象,如建筑物、汽车和人。对于图像分类应用,感兴趣的是整个图像,而不是特定的局部特征。用户将拥有一个简单的应用,允许他们将相机指向一个对象,并从一侧到另一侧摇动相机,以建立 MVS 深度感测的立体基线,稍后讨论。可以应用多种全局度量(如第三章所述),对整个图像进行计算,如纹理、颜色或强度直方图以及连通分量标记方法。此外,局部特征(如第六章所述)可用于描述图像的关键部分。这个假设的应用同时使用了全局和局部特性。

我们根据以下要求定义系统:

  • 1080p RGB 彩色视频(1920x1080 像素),每秒 30 帧,每种颜色 12 位,65 度 FOV,每秒 30 帧
  • 图像 FOV 涵盖了手机摄像头拍摄的无限聚焦视图
  • 无限制的照明条件(好的和坏的)
  • 准确率达到 90%或更高
  • 简化的鲁棒性标准,包括比例、透视、遮挡
  • 对于每个图像,系统计算以下特征:
    • 全局 RGBI 直方图,在 RGB-I 颜色空间
    • GPS 坐标,既然手机有 GPS
    • 通过 MVS 深度感测的相机姿态,使用加速度计数据对正交 FOV 平面进行几何校正(用户被要求在指向对象的同时挥动相机,相机姿态向量根据加速度计数据计算,并使用 ICP 相对于 FOV 中的主要对象)
    • 筛选特征,理想情况下,为每幅图像存储 20 到 30 个特征
    • 通过单目密集深度传感的深度图,用于分割出 FOV 中的对象,深度范围目标为 0.3 米至 30 米,1 米处的精度在 1%以内,30 米处的精度在 10%以内
    • 场景标记和像素标记,基于分割区域的属性,包括 RGB-I 颜色和 LBP 纹理

场景识别是一个经过充分研究的领域,每年都会举行几场大型挑战比赛,以使用已建立的真实情况数据集来寻找提高准确性的方法,如附录 B 所示。在挑战中,各类图像的最佳准确率从 50%到 90%以上不等。在本练习中,不试图证明性能或准确性。

分割图像和特征描述符

对于这个假设的视觉流水线,将同时使用几种用于将场景分割成对象的方法,而不是依赖于单一方法,如下所示:

  1. 密集分割、场景解析、物体标注:使用单目 MVS 生成的深度图,用于分割场景中常见的物品,包括地面或地板、天空或天花板、左右墙壁、背景、场景中的被摄物。为了从移动电话设备计算单目深度,应用提示用户在大约 3 英尺的手臂长度范围内从左向右移动相机,以创建一系列宽基线立体图像,用于使用 MVS 方法计算深度(如第一章中的所述)。MVS 提供了密集的深度图。即使 MVS 计算是计算密集型的,这也不是问题,因为我们的应用不需要连续的实时深度图生成——只需要单个深度图;对于我们假设的移动设备来说,3 到 4 秒获取基线图像并生成深度图被认为是可能的。
  2. 使用超像素的颜色分割和分量标记:使用超像素的颜色分割应该大致对应于深度分割的部分。
  3. LBP 区域分割:这种方法计算起来相当快,表示起来也很简洁,正如在第六章中所讨论的。
  4. 融合分割:使用布尔掩码和形态学以及一些逻辑将深度、颜色和 LBP 分割区域组合成融合分割。该方法使用迭代循环来将颜色、深度和 LBP 分割方法之间的差异最小化到新的融合分割图中。融合分割图是一种全局图像描述符。
  5. 每个分割区域的形状特征:为每个融合的分割区域计算基本形状特征,例如面积和质心。区域质心之间的相对距离和角度也被计算到复合描述符中。

在这个假设的例子中,我们一起使用几个特征描述符方法来获得额外的鲁棒性和不变性,以及一些预处理,概括如下:

  1. 整个图像中的 SIFT 兴趣点被用作附加线索。我们完全遵循 SIFT 方法,因为已知 SIFT 使用三个或四个 SIFT 特征来识别较大的对象[161]。然而,基于训练结果,我们期望将 SIFT 特征计数限制为每个场景 20 或 30 个强候选特征。
  2. 此外,由于我们在移动电话上有加速度计和 GPS 传感器数据,我们可以使用传感器数据作为仅基于位置和相机姿势识别对象的提示,例如假设存在服务器来查找某个区域中地标的 GPS 坐标。
  3. 由于需要照明不变性,我们执行 RGBI 对比度重映射,试图在 SIFT 特征计算、颜色直方图和 LBP 计算之前标准化对比度和颜色。基于真实情况数据测试,我们假设用于计算最佳强度重新映射限制的统计方法被用于展开颜色的总范围以减轻黑暗和过饱和图像,但是我们没有花时间在这里开发算法;然而,在第二章中提供了关于候选算法的一些讨论。例如,在暗图像上计算 SIFT 描述符可能不能提供足够的边缘梯度信息来计算好的 SIFT 描述符,因为 SIFT 需要梯度。过饱和的图像会有褪色的颜色,从而影响良好的颜色直方图。
  4. 融合分割结合了所有颜色、LBP 和深度分割方法的优点,通过将所有分割融合到融合分割图中来最小化分割差异。还使用 LBP,它对弱光和过饱和条件都不太敏感,提供一些平衡。

同样,本着假设练习的精神,除了上面给出的基本描述之外,我们在这里不花时间开发算法。

流水线阶段和操作

管线阶段如图 8-9 所示。它们包括图像预处理阶段,主要用于校正图像对比度、计算深度图和分割图。特征描述阶段计算 RGBI 颜色直方图、SIFT 特征、结合最佳深度、颜色和 LBP 方法的融合分割图,然后将像素标记为连通分量。为了对应,我们假设每个特征有一个单独的数据库表,使用强力搜索;未尝试优化。

9781430259299_Fig08-09.jpg

图 8-9 。使用全局特征的假想图像分类流水线中的操作

将工序映射到资源

我们假设 DSP 提供了一个用于对比度重映射的 API,由于 DSP 已经在处理来自传感器的所有像素,并且像素数据已经存在,因此对比度重映射非常适合 DSP。

MVS 深度图计算遵循线和区域操作的数据模式。我们使用 GPU 来完成 MVS 算法的重要部分,比如左/右图像对模式匹配。我们的算法遵循基本的立体算法,如第一章中所讨论的。立体基线最初是从加速度计估计的,然后在基线图像集上的一些束调整迭代被用于改进基线估计。我们假设 MVS 立体声工作负载是流水线中最重的,在一两秒钟内消耗了大部分 GPU。最后产生密集的深度图,用于深度分割。

使用超像素方法对 RGBI 分量进行颜色分割[257,258]。还在 RGBI 中为每个超像素单元计算颜色分量的直方图。LBP 纹理计算非常适合 GPU,因为它是一种符合着色器编程风格的区域操作。因此,可以将颜色分割和 LBP 纹理分割组合到同一个着色器中,以利用寄存器文件中的数据共享,并避免数据交换和数据复制。

SIFT 特征描述可以分配给 CPU 线程,数据可以在 CPU 线程之间平铺和划分,用于并行特征描述。同样,融合分段也可以分配给 CPU 线程和数据块。注意,切片数据可能包括重叠边界区域或缓冲区,见后面的图 8-12 了解重叠数据切片的说明。也可以使用平铺数据区域,以类似的方式将标记分配给并行 CPU 线程。最后,我们假设一个蛮力匹配阶段,使用每个描述符的数据库表来开发最终得分,并且基于对真实情况数据的训练,我们在最终得分中对一些特征比其他特征加权更多。

资源分配的标准

资源分配的基本标准是在 DSP 上执行早期点处理,因为数据已经驻留,然后使用 GPU SIMT SIMD 模型作为着色器来计算区域操作,以创建深度图、颜色分割图和 LBP 纹理图。流水线的最后阶段很好地映射到线程并行方法和数据分块。给定表 8-6 中所示的选择的资源分配操作,该应用似乎完全可以在线程和 GPU 中跨 CPU 内核进行工作负载平衡和并行化。

表 8-6 。将操作分配给计算资源

9781430259299_Table08-06.jpg

增强现实

在第四个示例中,我们使用可穿戴显示设备(如眼镜或护目镜和可穿戴相机)设计了一个用于设备维护的增强现实应用。整个系统由一个便携式可穿戴设备组成,该设备带有摄像头和显示器,通过无线连接到服务器。处理分布在可穿戴设备和服务器之间。(注:由于实际系统的设计、训练和测试会很复杂,因此这个例子非常高级,并且省略了很多细节。)

服务器系统包含机器的所有 CAD 模型,并提供从任何视点对任何机器部件的按需图形模型或渲染。可佩戴的摄像机跟踪眼睛的注视和机器的位置。该可佩戴显示器允许维修技术人员查看机器并观看显示器上的增强现实覆盖图,说明如何维修机器。当用户看着给定的机器时,增强现实特征识别机器部件,并提供覆盖图和动画来帮助故障排除和修理。该系统使用 RGB 图像的组合作为 3D 深度表面上的纹理,以及机器和所有组成机器部件的 3D CAD 模型的数据库。

该系统将有以下要求:

  • 1080p RGB 彩色摄像机(1920x1080 像素),每秒 30 帧,每种颜色 12 位,65 度 FOV,每秒 30 帧
  • 1080p 立体深度相机,8 位 Z 分辨率,60 fps,65 度 FOV;所有的立体处理都在相机 ASIC 中的硅片上进行,深度图作为输出
  • 480p 近红外摄像机对准技术人员的眼睛,用于视线检测;近红外相机在头戴式显示器周围的低光环境中成像更好
  • 1080p 可穿戴 RGB 显示器
  • 驱动摄像机和显示器、描述符生成以及与服务器的无线通信的可穿戴 PC;该系统采用电池供电,适合移动使用,电池续航时间为 8 小时
  • 包含机器和零件的 CAD 模型的服务器;每个部分将具有预先计算到数据库中的相关描述符;服务器可以通过无线向可穿戴设备提供图形模型或完整的渲染
  • 服务器包含地面实况数据,该数据由根据每个零件的 CAD 模型渲染计算的特征描述符+机器零件每个描述符的标准化 3D 坐标组成
  • 简化的鲁棒性标准包括透视、缩放和旋转

校准和地面实况数据

我们假设 RGB 相机和立体相机系统用正确的光学器件校准以精确成像相同的 FOV,因为 RGB 相机和 3D 深度图必须在每个像素位置对应,以使 2D 特征能够与对应的 3D 深度位置精确关联。然而,眼睛注视相机将需要一些独立的校准,我们假设开发了一个简单的校准应用,通过使用立体和 RGB 相机来定位 FOV 中的特征,然后在监视器上叠加眼睛注视向量以确认眼睛注视向量的准确性,来学习技术人员的眼睛位置。我们在这里不开发校准过程。

然而,真实情况数据需要一些时间来开发和训练,并且需要机器的维修和设计专家在训练期间一起工作。地面实况数据包括每个部分的特征集,包括沿角、边和其他位置(如旋钮)的 2D SIFT 特征。为了创建 SIFT 特征,首先从技术人员可能看到的代表性视点制作每个 CAD 零件模型的一组图形渲染,然后在图形渲染上计算 2D SIFT 特征,并且使用模型的几何来创建每个 SIFT 特征的相对 3D 坐标以进行对应。

2D SIFT 特征位置与相对 3D 坐标一起记录在数据库中,并使用合适的约束条件(如角度和相对距离)关联到对象中,参见图 8-10 。在训练过程中,专家为每个零件选择一个最小的特征集,主要是来自表面拐角和边缘的最强特征。2D SIFT 特征之间的三维相对角度和距离被记录在数据库中,以提供透视、比例和旋转不变性。所有零件的 3D 坐标都标准化为机器的尺寸。此外,每个零件表面的主色和纹理是根据渲染计算的,并存储为纹理和颜色特征。这个系统需要大量的培训和测试。

特征和对象描述

在现场的实际使用中,RGB 相机用于寻找 2D SIFT、LBP 和颜色特征,而立体相机用于创建深度图。因为 RGB 图像和深度图是像素对齐的,所以每个特征具有取自深度图的 3D 坐标,这意味着 3D 坐标可以被分配给 2D SIFT 特征位置。2D SIFT 特征位置之间的 3D 角度和 3D 距离被计算为约束,并且具有 3D 位置约束的组合 LBP、颜色和 2D SIFT 特征被存储为 SIFT 顶点特征并被发送到服务器用于对应。关于 SIFT 顶点描述符和零件对象的布局,参见图 8-10 。注意,3D 坐标与几个描述符相关联,包括 SIFT、LBP 纹理和 RGB 颜色,类似于在计算机图形中通过 3D 位置、颜色和纹理来表示 3D 顶点的方式。在训练期间,从部件的各种视图创建若干 SIFT 顶点描述符,每个视图由数据库中的 3D 坐标关联,允许基于 3D 坐标以及特征的简化搜索和匹配。

9781430259299_Fig08-10.jpg

图 8-10 。SIFT 顶点描述符类似于使用 3D 位置、颜色和纹理的计算机图形顶点。SIFT 顶点描述符包含来自 RGB 相机的 2D SIFT 描述符、从深度相机生成的 2D SIFT 描述符的 3D 坐标、SIFT 顶点处的 RGB 颜色以及 SIFT 顶点处的 LBP 纹理。零件对象包含 SIFT 顶点描述符的列表,以及 SIFT 顶点列表中每个 3D 坐标之间的相对角度和距离

覆盖和跟踪

在服务器中,将场景中的 SIFT 顶点描述符与数据库进行比较,以找到零件对象。在搜索之前,每个特征的 3D 坐标、角度和距离相对于机器的尺寸被标准化。如图 8-10 所示,SIFT 特征在一个 3D 坐标上被组合成一个 SIFT 顶点描述符,具有相关的 2D SIFT 特征、LBP 纹理和颜色。SIFT 顶点描述符与零件对象相关联,零件对象包含描述每个零件的顶点坐标列表,以及 SIFT 顶点特征之间的相对角度和距离。

假设可以使用一小组 SIFT 顶点特征来定义机器零件对象,则可以实时确定尺寸和距离,并且可以连续计算相对 3D 信息,例如每个零件和整个机器的尺寸和位置。使用所识别的部件和特征的 3D 坐标,可以在头戴式显示器中显示增强现实渲染,突出显示部件位置,并使用叠加动画来说明要移除的部件,以及手在修理过程中要遵循的路径。

近红外摄像机跟踪技术人员的眼睛,以在场景上创建 3D 凝视向量。凝视矢量可用于头戴式显示器中的增强现实“帮助”覆盖,允许凝视导向的缩放或信息,为技术人员正在查看的部件显示更详细的渲染和覆盖信息。

流水线阶段和操作

管线阶段如图 8-11 所示。请注意,处理在可穿戴设备(主要用于图像捕捉、功能描述和显示)和用于繁重工作负载(如通信和增强现实渲染)的服务器之间进行。在本例中,可穿戴设备与服务器结合使用,依靠无线网络传输图像和数据。我们假设无线网络上的数据带宽和数据压缩方法足以满足所有必要的数据通信。

9781430259299_Fig08-11.jpg

图 8-11 。假想的增强现实流水线中的操作

将工序映射到资源

我们尽可能少地使用 GPU 进行 GPGPU 处理,并假设服务器有许多可用的 CPU,我们在流水线末端使用 GPU 进行图形渲染。大多数操作使用数据分块很好地映射到单独的 CPU 线程。注意,一个服务器通常有许多高功率和快速的 CPU,所以使用 CPU 线程是一个很好的匹配。参见表 8-7 。

表 8-7 。将操作分配给计算资源

9781430259299_Table08-07.jpg

资源分配的标准

在移动设备上,深度图是在深度相机上的硅中计算的。我们使用 GPU 通过纹理采样器执行 RGB 和深度图对齐,然后在 CPU 上执行 SIFT 计算,因为必须首先进行 SIFT 计算,以使顶点锚定并计算多元描述符信息。我们继续并遵循数据局部性,并使用数据平铺和重叠区域在单独的 CPU 线程中为每个 2D SIFT 点执行 LBP 和颜色计算。参见后面的图 8-12 了解重叠数据平铺的图示。

9781430259299_Fig08-12.jpg

图 8-12 。数据平铺成四个重叠的平铺块。瓦片重叠特定的量,在这种情况下是 16 个像素,允许诸如卷积之类的区域操作读取而不是写入重叠区域,以从相邻区域组装卷积核数据。然而,每个线程仅写入其瓦片内的非重叠区域。每个图块都可以分配给单独的线程或 CPU 内核进行处理

在服务器上,我们已经分配了 CAD 数据库和大部分繁重的工作负载,包括特征匹配和数据库访问,因为服务器预期具有大的存储和内存容量以及许多可用的 CPU。此外,我们希望延长电池寿命并最大限度地减少移动设备的发热,因此服务器是大多数工作负载的首选。

加速替代方案

有多种常见的加速方法 参见可以应用于视觉流水线的加速方法,包括关注内存管理、使用线程的粗粒度并行、使用 SIMD 和 SIMT 方法的数据级并行、多核并行、高级 CPU 和 GPU 汇编语言指令以及硬件加速器。

有两种基本的加速方法:

  1. 跟着数据走
  2. 遵循算法

优化计算设备的算法,如 SIMD 指令集或 SIMT GPGPU 方法,也称为流处理,通常是设计师考虑的显而易见的选择。但是,针对数据流和数据驻留进行优化可以产生更好的结果。例如,在计算资源和数据格式之间来回转换数据不是一个好主意;它消耗了复制和格式转换操作所消耗的时间和能量。慢速系统内存中的数据复制比计算单元内快速寄存器文件中的数据访问慢得多。考虑到内存速度的内存架构层次,如图 8-2 中的所示,并考虑到计算机视觉的图像密集型特征,最好找到跟踪数据的方法,并尽可能长时间地将数据保存在快速寄存器和高速缓冲存储器中,位于计算单元的本地。

内存优化

优化成像或视觉应用时,对内存占用和内存传输带宽的关注是最常被忽视的方面。如表 8-2 和下面的内存讨论所示,视觉流水线通过系统在计算单元和系统内存之间传输几 GB/S 的数据。此外,兴趣点检测和图像预处理等区域处理会通过各计算单元的寄存器文件、高速缓存和系统内存以复杂的路径移动更多数据。

为什么要针对内存进行优化?通过优化内存使用,减少了数据传输,提高了性能,降低了功耗,延长了电池寿命。权力是昂贵的;事实上,一家大型互联网搜索公司已经在哥伦比亚河的水电系统附近建立了服务器农场,以保证清洁电力和降低电力传输成本。

对于移动设备来说,电池寿命是最关心的问题。政府也开始发行碳税和碳信用来鼓励减少能源消耗。因此,内存使用是一个经常被忽略的成本。每个计算平台和操作系统的内存优化 API 和方法都有所不同。参考文献[494]中对 Linux 的内存优化方法进行了很好的讨论。

最小化计算单元之间的内存传输

如果可能,应避免计算单元之间的数据传输。在优化和调优阶段应考虑工作负载整合,以便在同一数据驻留在给定计算单元的寄存器文件和本地缓存中时,对其执行尽可能多的处理。也就是跟着数据走。

例如,使用 GPGPU 着色器进行单区域操作,则在 CPU 上处理相同的数据可能会比在 CPU 上执行所有处理慢。这是因为 GPGPU 内核需要设备驱动程序干预来为每个内核设置内存并启动每个内核,而 CPU 程序直接访问代码和数据,除了初始程序加载之外,不需要设置驱动程序。减少计算单元之间来回切换的一种方法是使用循环合并和任务链接,这将在本节稍后讨论。

内存平铺

当将粗粒度并行性的工作负载划分到几个线程中时,可以将映像分成多个平铺区域,并将每个平铺区域分配给一个线程。平铺适用于点、线和区域处理,其中每个线程在平铺区域上执行相同的操作。通过允许瓦片之间的重叠读取区域,消除了硬边界,并且像卷积这样的区域操作可以读取到相邻的瓦片中用于内核处理,以及将完成的结果写入它们的瓦片中。

DMA、数据复制和转换

通常,视觉流水线中需要图像的多个副本,在某些情况下,数据必须从一种类型转换为另一种类型。一个例子是将存储在 16 位整数中的 12 位无符号颜色通道数据转换成 32 位整数,从而允许下游计算中更准确的数值精度。此外,颜色通道可以被转换到选择的颜色空间,例如 RGBI,用于 I 分量空间(R * G * B)/3 = I;然后,新的 I 值被混合并复制回 RGB 分量。仔细注意数据布局和数据驻留将允许更有效的向前和向后颜色转换。

复制数据时,最好尝试使用直接内存访问(DMA) 单元,以便尽可能快地复制数据。DMA 单元在硬件中实现,直接优化和控制进出存储器的 I/O 互连流量。操作系统提供 API 来访问 DMA 单元[494]。优化 DMA 方法有多种多样,在参考文献[497,495]中可以找到一些比较视觉应用中缓存性能与 DMA 性能的有趣资料。

寄存器文件、内存缓存和锁定

内存系统是每个处理器的虚拟和物理内存的层次结构,由慢速固定存储组成,如文件系统、页面文件和交换文件,用于管理虚拟内存、系统内存、高速缓存和计算单元内的快速寄存器文件,以及它们之间的内存互连。如果要处理的数据驻留在寄存器文件中,则由 ALU 以处理器时钟速率处理。最佳情况下,存储器访问是通过靠近每个 ALU 的寄存器文件进行的,因此将数据保存在寄存器中并在复制数据之前执行所有可能的处理是最佳选择,但这可能需要更改一些代码(本节稍后讨论)。

如果必须访问高速缓存才能获得数据,那么与访问寄存器文件相比,会消耗更多的时钟周期(功率消耗、性能损失)。并且如果存在高速缓存未命中,并且必须访问慢得多的系统存储器,则通常需要数百个时钟周期来通过高速缓存将存储器移动到寄存器文件以进行 ALU 处理。

操作系统提供 API 来锁定或固定内存中的数据,这通常会增加缓存中的数据量,减少分页和交换。(交换是一种隐藏的复制操作,由操作系统自动执行,以便在系统内存中腾出更多空间)。当数据被频繁访问时,数据将驻留在更快的高速缓冲存储器中,如图 8-2 中的所示。

数据结构、打包和矢量与分散-收集数据组织

所使用的数据结构会增加内存流量。数据组织应尽可能允许连续块中的串行访问,以提供最佳性能。从编程的角度来看,数据结构的设计通常考虑到了方便性,没有注意编译器将如何安排数据或由此产生的性能。

例如,考虑一个数据结构,它有几个由字节、整数和浮点数据项组成的字段;编译器可能试图重新安排数据项在数据结构中的位置,甚至为了各种优化以不同的顺序打包数据。编译器通常提供一组编译器指令,如内嵌编译指令和编译器开关,来控制数据打包行为;这些都是值得研究的。

对于点处理,数据的向量是自然结构,并且存储系统将在访问和处理连续向量时以最高性能运行。对于区域操作,使用跨越几行的矩形,并且矩形导致可能产生高速缓存未命中的存储器访问模式。使用分散-收集操作来收集卷积核数据允许将大型数据结构分割成数据向量,从而提高性能。通常,CPU 和 GPU 内存架构会特别关注数据访问模式,并提供隐藏的优化方法。

分散-收集操作,也称为矢量 I/O跨步内存访问,可以在 GPU 或 CPU 芯片中实现,以实现对非连续数据结构模式的快速读/写访问。通常,分散操作将多个输入缓冲区写入单个输出缓冲区中的连续模式,而收集操作类似地将多个输入缓冲区读取到输出缓冲区中的连续模式。

操作系统和计算语言为分散-聚集操作提供了 API。对于 Linux 风格的操作系统,参见 POSIX 1003.1-2001 规范中规定的 readvwritev 函数。OpenCL 为分散-聚集提供了async_work_group_strided_copy函数。

粗粒度平行度

通过将工作分解成线程,以及将工作分配给多个处理器内核,可以使用粗粒度并行性来实现视觉流水线。粗粒度并行性可以通过将计算工作负载分解为线程流水线,或将内存分解为分配给多个线程的小块来实现。

以计算为中心与以数据为中心

粗粒度并行可以通过以计算为中心和以数据为中心的 方法来实现。例如,在以计算为中心的方法中,视觉流水线阶段可以沿着流水线阶段划分到独立的执行线程和计算单元中,数据通过队列和 FIFOs 一次一点地进入下一个阶段。在以数据为中心的方法中,图像可以被分割成小块,如图 8-12 中的所示,每个线程处理一个独立的小块区域。

线程和多核

有几种方法可以将线程分布到多个 CPU 内核上,包括依靠操作系统调度程序来优化每个 CPU 内核的使用并执行负载平衡。另一种方法是将特定的任务分配给特定的 CPU 内核。每个操作系统都有不同的控件可用于调整每个线程的进程调度器,并且还可以提供将特定线程分配给特定处理器的能力。(我们将在本章后面讨论粗粒度线程的编程资源、语言和工具。)每个操作系统都会提供一个线程化的 API,比如 pthreads 。参见图 8-13 。

9781430259299_Fig08-13.jpg

图 8-13 。(左)典型 SIFT 描述符流水线计算分配[180]。(右)ORB、SURF 和 SIFT 的报告计算时间[120]是 24 个 640x480 图像的平均值,每个图像包含约 1,000 个特征。在某些应用中,为 SIFT 改造 ORB 可能是一个不错的选择

细粒度数据并行性

细粒度并行性是指利用并行性的数据组织和相应的处理器架构,传统上称为阵列处理器或矢量处理器。并非所有应用都是数据并行的。部署非数据并行代码在数据并行机器上运行会适得其反;最好用 CPU 和直线代码启动。

数据并行操作应该表现出常见的内存模式,例如大型规则数据阵列,如像素行或像素块,它们以相同的方式处理。回头参考图 8-1 ,注意一些算法是对点、线和像素区域的向量进行操作的。这些数据模式和相应的处理操作本质上是数据并行的。点操作的例子是颜色校正和数据类型转换,区域操作的例子是卷积和形态学。有些算法是直线代码,分支多,并行少。通过 SIMD 和 SIMT 方法直接支持细粒度的数据并行。

SIMD、SIMT 和 SPMD 基本面

昨天的超级计算机现在相当于今天的 GPU 和多核 CPU。科学界对 SIMD、SIMT 和 SPMD 机器及其并行编程语言的性能非常感兴趣。它已经发展了几十年,现在有许多好的资源可以应用于廉价的 SOCs 从国家超级计算应用中心[544]开始。

当内存中的数据布局和算法本身存在细粒度的并行性时,例如对向量进行点、线和区域操作时,可以应用 SIMD 指令和多线程。单指令多数据(SIMD) 指令同时处理一个向量中的几个数据项。为了在 SIMD 级开发细粒度的并行性,计算机语言和相应的 alu 都应该为丰富的矢量数据类型和矢量指令提供直接支持。需要面向向量的编程语言来利用数据并行性,如表 8-8 所示;然而,有时编译器开关可用于利用 SIMD。注意像 C++这样的语言不直接支持向量数据类型和向量指令,而数据并行语言支持,如表 8-8 所示。

表 8-8 。通用数据并行语言的选择

|

语言名

|

标准或专有

|

操作系统平台支持

|
| --- | --- | --- |
| GLSL 像素着色器 | 标准 OpenGL | 几个操作系统平台 |
| HLSL 像素着色器 | Direct3D | Microsoft 操作系统 |
| 计算着色器 | Direct3D | Microsoft 操作系统 |
| 计算着色器 | 标准 OpenGL | 几个操作系统平台 |
| 使用 | 机器人 | 谷歌 OS |
| OpenCL(打开 CL) | 标准 | 几个操作系统平台 |
| C++放大器 | 微软 | 微软操作系统平台 |
| 库达 | 仅适用于 NVIDIA GPUs | 几个操作系统平台 |
| OpenMP | 标准 | 几个操作系统平台 |

在某些情况下,SIMT 的成本超过了它的收益,特别是考虑到数据设置和拆卸的运行时开销、线程管理、代码可移植性问题以及大型和小型 CPU 和 GPU 之间的可伸缩性。

除了 SIMD 指令之外,必须提供一种启动和管理运行相同代码的大型线程组的方法,以利用数据并行性,称为单指令多线程(SIMT) ,也称为单程序多数据(SPMD) 。SIMT 程序被称为着色器,因为历史上计算机图形中使用的像素着色器和顶点着色器是第一个广泛用于开发细粒度数据并行性的程序。着色器也被称为内核

CPU 和 GPU 都支持 SIMD 指令和 SIMT 方法——例如,使用像 OpenCL 这样的语言。CPU 使用操作系统调度程序来管理线程;然而,GPU 使用硬件调度程序、调度程序和记分板逻辑来跟踪线程执行和阻塞状态,允许几个在不同数据上运行相同内核的线程共享同一个 ALU。对于 GPU,每个着色器在 ALU 上运行,直到它在内存传输、函数调用时被阻止,或者当其时间片到期时被 GPU 着色器调度程序换出。

注意,C++ AMP 和 CUDA 似乎都提供了最接近 C++的语言环境。用于 SIMT 编程的编程模型和语言包含运行时执行组件,用于为每个线程封送数据、启动线程以及管理线程组的通信和完成状态。常见的 SIMT 语言见表 8-8 。

请注意,CPU 和 GPU 的执行环境在硬件和软件层面有很大的不同。GPU 依赖设备驱动程序进行设置和拆卸,以及固定功能硬件调度,而 CPU 则依赖操作系统调度程序,可能还有微调度程序。CPU 通常用 C 或 C++编程,程序直接从内存中执行,并由操作系统调度,而 GPU 需要用 SIMT SIMD 友好的语言编写着色器或内核程序,如 DirectX 或 OpenGL 中的计算着色器或像素着色器,或 CUDA 或 OpenCL 等 GPGPU 语言。

此外,着色器内核必须经由运行时系统通过设备驱动程序启动到 GPU,并且在执行之前在 GPU 内创建执行上下文。GPU 还可以使用数据必须驻留的专用系统内存分区,在某些情况下,GPU 还会提供专用的快速内存单元。

GPGPU 编程通过运行时系统具有内存数据设置和程序设置开销,除非在 GPU 中顺序执行几个内核以隐藏开销,否则单个内核的设置和拆卸开销可能会超过通过 GPU SIMD/SIMT 处理获得的任何好处。

决定使用数据并行 SIMT 编程模型会影响程序设计和可移植性。SIMT 的使用不是必须的,在任何情况下,必须使用像 C++这样的标准编程语言来控制 SIMT 运行时环境,以及整个视觉流水线。然而,数据并行 SIMT 模型的性能优势在某些情况下极具吸引力,是最佳选择。然而,请注意,GPGPU SIMT 编程实际上可能比使用具有 SIMD 指令、粗粒度线程和数据切片的多个 CPU 内核慢,尤其是在 GPU 不支持硬件中足够多的并行线程的情况下,较小的 GPU 就是这种情况。

着色器内核语言和 GPGPU

如表 8-8 所示,创建 SIMD SIMT 数据并行代码有几种备选方案,有时也称为 GPGPU 或流处理。如上所述,实际的 GPGPU 程序被称为着色器内核 。历史上,像素着色器和顶点着色器是作为 OpenGL 和 DirectX 等图形标准的数据并行语言开发的。然而,随着专为 NVIDIA GPUs 构建的 CUDA 的出现,在 GPU 中实现标准通用计算功能的想法出现了。这个概念在业界得到了认可,尽管还没有杀手级的应用,像素着色器也可以用来获得同样的效果。最后每个 GPGPU 编程语言无论如何都要翻译成机器语言,所以很多情况下选择高级 GPGPU 语言可能意义不大。

然而,GPGPU 语言的选择有时会受到供应商操作系统的限制。例如,谷歌、微软和苹果等主要供应商不同意对 GPGPU 采用相同的方法,他们提供不同的语言,这意味着行业范围的标准化仍在进行中,着色器代码的可移植性难以捉摸。也许最接近可移植的标准解决方案是 OpenCL,但是用于 DirectX 和 OpenGL 的计算着色器是可行的替代方案。

高级指令集和加速器

每个处理器都有一套用于加速特定操作的高级指令。有关最新信息,请参考供应商的处理器和编译器文档。高级指令汇总如表 8-9 所示。

表 8-9 。高级指令集项目

|

指令类型

|

描述

|
| --- | --- |
| 透析器 | GPU 有特殊的汇编指令来计算图形渲染数学运算的常见超越数学函数,如点积、平方根、余弦和对数。在某些情况下,CPU 还具有超越功能。 |
| 熔断指令 | 诸如乘法和加法的普通操作通常在单个融合 MADD 指令中实现,其中乘法和加法都在单个时钟周期中执行;指令可以有三个或更多操作数。 |
| SIMD 指令 | CPU 有 SIMD 指令集,如英特尔 SSE 和英特尔 AVX 指令,AMD 处理器有类似的 SIMD,ARM 处理器有 NEON。 |
| 高级数据类型 | 一些指令集,如用于 GPU 的指令集,提供了公共语言编译器不支持的奇数数据类型,如半字节整数、8 位浮点数和定点数。部分指令集可能支持特殊数据类型,但不是全部。 |
| 内存访问修饰符 | 一些处理器提供跨步存储器访问能力以支持分散-聚集操作、位重组操作以允许寄存器内容以可编程位模式移动和复制,以及置换存储器访问模式以支持跨通道模式。英特尔处理器还为指针检查提供 MPX 内存保护指令。 |
| 安全 | 可以为诸如 SHA 或 AES 密码之类的普通密码提供密码加速器和特殊指令;比如英特尔 AES-NI。此外,英特尔提供了英特尔 SGX 扩展,以提供封闭的内存区域来执行安全软件;恶意软件无法访问被遮挡的区域。 |
| 硬件加速器 | 常见的加速器包括用于图像变形和子采样的 GPU 纹理采样器,以及用于快速内存复制的 DMA 单元。操作系统提供 API 来访问 DMA 单元[494]。图形编程语言如 OpenGL 和 DirectX 提供了对纹理采样器的访问,GPGPU 语言如 OpenCL 和 CUDA 也提供了纹理采样器 API。 |

操作系统供应商提供的 API 可能使用也可能不使用特殊指令。每个处理器厂商的编译器将优化所有代码,以充分利用高级指令的优势;其他编译器可能提供也可能不提供优化。但是,每个编译器将提供不同的标志来控制优化,因此需要进行代码调优和分析。使用汇编语言是获得高级指令集全部性能的最佳方式。

视觉算法优化和调整

优化可以基于直觉或性能分析,通常是两者的结合。假设确定了热点,可以应用本节中讨论的各种优化方法。性能热点可以从数据、算法或两者的角度来解决。大多数时候,内存访问是一种隐性成本,开发者并不理解(算法很难)。然而,内存优化本身就是提高性能的关键。表 8-11 总结了各种优化方法,这将在下面讨论。

每种算法的数据访问模式可以用 Zinner、Kubinger 和 Isaac 分类法[494]来描述,如表 8-10 所示。请注意,通常首选的数据访问模式是就地(IP)计算,它涉及将数据一次性读入快速寄存器,处理并将结果存储在寄存器中,然后将最终结果写回到原始图像之上。这种方法最大限度地利用了高速缓存行和寄存器,避免了在数据被处理之前的较慢内存。

表 8-10 。图像处理数据访问模式分类法(来自 Zinner 等人【494】)

image

*IP processing is usually the simplest way to reduce memory read/write bandwidth and memory footprint.

编译器和手动优化

通常一个好的编译器可以自动执行表 8-11 中列出的许多优化;但是,请检查编译器标志以了解选项。优化的目标是保持 CPU 指令执行流水线满,或者减少内存流量。然而,表 8-11 中的许多优化需要手工编码,将算法归结为更紧密的循环,在快速寄存器中共享更多数据,减少数据复制。

表 8-11 。常见的优化技术、手动和编译方法

|

名字

|

描述

|
| --- | --- |
| 子函数内联 | 通过内联复制函数代码来消除函数调用 |
| 任务链接 | 将函数的输出逐段送入等待函数 |
| 分支消除 | 重新编码以消除条件分支,或通过组合多个分支条件来减少分支 |
| 循环合并 | 使用更多直线代码将内外循环合并成更少的循环 |
| 包装数据 | 重新安排结构内的数据对齐,并向某些数据项添加填充,以便更好地将数据对齐到更大的数据字或页面边界,从而实现更高效的存储器读写 |
| 循环展开 | 通过在循环内复制代码来减少循环迭代次数;可以使用直线代码复制或通过将多次迭代打包到 VLIW 中来实现 |
| 功能合并* | 将串行函数重写为单个函数,使用单个外部循环来读写系统内存中的数据;在合并函数之间传递快速寄存器中的小数据项,而不是传递大图像缓冲区 |
| ROS-DMA* | 双缓冲 DMA 与处理重叠;DMA 和处理并行发生,在处理过程中 DMA 新数据,DMA 结果输出 |

** Function coalescing and ROS-DMA are not compiler methods, and may be performed at the source code level.* Note: See references[498,499] for more information on compiler optimizations, and see each vendor’s compiler documentation for information on available optimization controls.

调谐

优化之后,可以从几个角度来调整工作视觉流水线。目标是提供运行时控件。表 8-12 提供了一些调优控件的例子,这些控件可以实现运行时或编译时调优。

表 8-12 。视觉流水线的运行时调节控制

| 图像分辨率 | 允许在八度音阶或其他音阶上的可变分辨率以减少工作量 |
| 每秒帧数 | 跳过帧以减少工作量 |
| 特征数据库的大小和精度 | 寻找减小数据库大小的方法,例如,建立一个精度较高的数据库,另一个精度较低的数据库,每个数据库使用不同的分类器 |
| 特征数据库组织和速度 | 通过更好的组织和搜索来提高性能,可能有多个数据库,每个数据库使用不同的组织策略和分类器 |

特征描述符改进、检测器、距离函数

正如在第六章中所讨论的,许多特征描述符方法,如 SIFT,可以进行改造以使用其他表示和特征描述。例如,第六章中讨论的 LBP-SIFT 改进使用局部二进制模式来代替 SIFT 使用的梯度方法,以获得令人印象深刻的加速,同时保留 SIFT 流水线的其他方面。ROOT-SIFT 方法是另一种 SIFT 加速方法,在第六章中讨论。检测器和描述符可以混合和匹配,以实现不变性和性能的不同组合,参见 REIN 框架[397]。

除了描述符提取器本身,距离函数通常在特征匹配阶段消耗相当多的时间。比如 FREAK、ORB 等局部二进制描述符用的是快速的汉明距离,SIFT 用的是欧氏距离,比较慢。改进视觉流水线以使用本地二进制描述符是距离函数如何具有显著性能影响的一个例子。

需要指出的是,第六章中回顾的描述符通常基于学术研究,而不是基于广泛的工程现场试验和优化。每种方法都只是进一步开发和定制的起点。我们可以肯定的是,军事武器系统已经在部署系统的视觉流水线中使用类似但更优化的特征描述方法几十年了。参见图 8-13 。

盒子和卷积加速

卷积是特征描述和图像预处理中最常见的操作之一,因此卷积是优化和硬件加速的关键目标。boxlet 方法 [392]近似于卷积,并提供速度与精度的权衡。Boxlets 可用于优化任何严重依赖卷积的系统,如 LeCun 等人使用的卷积网络方法[85,336,339]。基本方法是将一对 2D 信号(核和图像)近似为低次多项式,从而量化每个信号并减少数据量;然后对这两个信号进行微分以获得脉冲函数和卷积近似。通过对微分的结果进行积分,可以恢复完整的卷积。

另一种卷积和通用区域处理加速方法是在快速寄存器中存在重叠数据时,尽可能多地重用重叠数据,而不是为每个操作读取数据项的整个区域。当执行区域操作时,可以编程使用滑动窗口和指针来尝试重用来自已经在寄存器文件中的相邻矩形的数据项,而不是为每个区域操作将完整的新矩形复制到寄存器中。这是另一个适合硅加速的领域。

此外,在某些情况下,分散-收集指令可用于将卷积数据收集到内存中以加速处理,GPU 通常会优化内存架构以实现快速区域操作。

数据类型优化,整数与浮点

软件工程师通常使用整数作为默认的数据类型,很少考虑内存和性能。通常,在数据类型领域的大多数代码中,都有唾手可得的果实。例如,当不需要额外的位精度时,从int32int16的数据转换,以及从doublefloat的数据转换,都是需要考虑的明显节省空间的项目。

在某些情况下,当整数同样适用时,会使用浮点数据类型。浮点计算通常需要将近四倍的硅面积,这相应地消耗更多的功率。数据类型消耗更多的内存,可能需要更多的时钟周期来计算。作为浮点的替代,一些处理器提供定点数据类型和指令,这可能非常高效。

优化资源

一些软件库和工具形式的资源可用于计算机视觉和图像处理优化。一些列在表 8-13 中。

表 8-13 。视觉优化

|

方法

|

加速策略

|

例子

|
| --- | --- | --- |
| 线程库 | 粗粒度并行性 | 英特尔 TBB pthreads |
| 流水线构建工具 | 将函数连接到流水线中 | PfeLib 视觉流水线库[495]卤化物[543]* |
| 原始加速库 | 功能已经过预先优化 | 英特尔 IPP、英伟达 NPP、高通 FastCV |
| GPGPU 语言 | 开发 SIMT SIMD 代码 | CUDA、OpenCL、C++ AMP、英特尔 CILK++、GLSL、HLSL、OpenGL 和 Direct3D 的计算着色器、RenderScript |
| 编译器标志 | 编译器针对每个处理器进行优化;参见表 8-10 | 特定于供应商 |
| SIMD 指令 | 直接用汇编语言编码,或者使用标准语言的编译器标志,或者使用 GPGPU 语言。 | 特定于供应商 |
| 硬件加速器 | 用于复杂功能的硅加速器 | 纹理采样器;其他由供应商选择性提供 |
| 高级指令集 | 加速复杂的低级运算,或者融合多条指令;参见表 8-9 | 英特尔 AVX、ARM NEON、GPU 指令集 |

*Open source available.

摘要

本章通过开发四个纯粹假设的高级应用设计,将前几章的讨论整合成完整的视觉系统。针对每个流水线讨论了计算资源分配和优化方案等设计细节,旨在引发关于如何设计高效系统的讨论(示例有时很粗略)。探索的应用包括使用形状和颜色特征的汽车识别、使用稀疏局部特征的人脸和情感检测、使用全局特征的整个图像分类以及增强现实。每个示例说明了来自第五章中介绍的视觉度量分类的不同特征描述符族的使用,例如多边形形状方法、颜色描述符、稀疏局部特征、全局特征和深度信息。在示例中使用了多种特征描述方法来说明预处理阶段的挑战。

此外,还对 SOC 架构中计算资源(CPU、GPU 和内存)的优化和负载平衡设计概念进行了一般性讨论,以探索硬件/软件系统挑战,如降低功耗。最后,概述了软件优化资源和具体的优化技术

九、附录 A:合成特征分析

本附录根据第七章的中描述的合成特征字母对几种常见的探测器进行了分析。完整的源代码、shell 脚本和字母图像集可以从 Springer Apress 获得:http://www.apress.com/source-code/ComputerVisionMetrics

9781430259299_AppA-01.jpg

图 A-1。来自下面测试#4 的示例分析结果,(左)显示检测器位置的注释图像,(中)检测的每个字母特征的计数,显示为 2D 阴影直方图,(右)显示所有 10 个检测器的旋转图像集的 2D 阴影直方图集

本附录包含:

  • 分析的背景、方法、目标和期望。
  • 合成字母地面真相图像摘要。
  • 用于标准 OpenCV 方法的检测器参数列表:SIFT、SURF、BRISK、FAST、HARRIS、GFFT、MSER、ORB、STAR、SIMPLEBLOB。注意:没有计算或使用特征描述符,在分析中仅使用了 BRISK、SURF、SIFT、ORB 和 STAR 的检测器部分。
  • 测试 1:兴趣点字母表。
  • 测试 2:角点字母。
  • 测试 3:合成字母表覆盖在真实图像上。
  • 测试 4:检测器对合成字母的旋转不变性。

背景目标和期望

分析的主要目标是:

  • 发展一些关于感兴趣的点和角检测器的人类与机器检测的简单直觉,观察合成字母表上的检测器行为,并发展对设计和调整特征检测器所涉及的问题的一些理解。
  • 测量字母的白色、黑色和灰色版本中的探测器异常。无论背景和前景是否改变,人都会容易地识别出相同的图案;然而,探测器设计和参数设置影响探测器对背景和前景极性的不变性。
  • 测量旋转时检测器对轻微像素插值伪影的灵敏度。

image 注意对于兴趣点和角点检测器方法的能力具有良好直觉的有经验的从业者可能不会在该分析中发现任何惊喜。

该分析使用 OpenCV 库中实现的几种众所周知的检测器方法;见表 A-1 。该分析仅提供检测机信息,无意将检测机的良好性与任何标准进行比较。各种检测器识别合成字母表中哪些特征的细节显示在汇总表中,计算每个网格单元检测特征的次数。对于某些应用,合成兴趣点字母表方法可能是有用的,假设设计了特定于应用的字母表,并且针对应用设计和调整了检测器,例如用于识别制造对象或部件的工厂检测应用。

表 A-1 检测器的调谐参数

|

探测器

|

调谐参数

|
| --- | --- |
| 轻快的 | 八度= 3
阈值= 30 |
| 快的 | threshold = 10
nonmaximal suppression = TRUE |
| 哈里斯 | maxCorners = 60000(捕获所有检测)
quality level = 1.0
minDistance = 1
block size = 3
useharrisdetecorr = TRUE
k = . 04 |
| GFFT(联邦快递) | maxCorners = 60000(捕获所有检测)
quality level = . 01
minDistance = 1.0
block size = 3
useHarrisDetector = FALSE
k = . 04 |
| 姆塞勒 | delta = 5
minaria = 60
maxarea 14400
max variance = . 25
mindiversity = . 2
max evolution = 200
areathreshold = 1.01
minmargin = . 003
edge blursize = 5 |
| 球 | WTA _ K = 2
edge threshold = 31
first level = 0
n features = 60000(捕获所有检测)
n levels = 8
patch size = 31
scale factor = 1.2
score type = 0 |
| 撒 | contrast threshold = 4.0
edgethreshold = 10.0
n features = 0
nOctaveLayers = 3
sigma = 1.0 |
| 星星 | maxSize = 45
response threshold = 30
linethreshold projected = 10
linethreshold binary ized = 8 |
| 冲浪 | extended = 0
hessian threshold = 100.0
nOctaveLayers = 3
nOctaves = 4
upright = 0 |
| 简单斑点 | threshold step = 10
min threshold = 50
max threshold = 220
min repetitive = 2
mindistbethern blobs = 10
filterByColor =true
blob color = 0
filterByArea =true
minArea = 25
max area = 5000
filterByCircularity =false
min circularity
filterByInertia =trueminInertiaRatio = 0.1f
maxinertiararatio = STD::numeric _ limits<float>::max()
filterbyconveillance =true
min conveillance = 0.95 f
max conveillance = STD::numeric _ limits<float>:max |

测试方法和结果

真实情况数据集中的图像被用作一些修改的 OpenCV 测试的输入:

  • opencv_test_features2d

    (轻快,快速,哈里斯,GFFT,MSER,圆球,星星,简单斑点)

  • opencv_test_nonfree

    (冲浪,筛选)

每个探测器使用的调谐参数 见表【A-1】中的;更多信息参见 OpenCV 文档。注意:不尝试调整合成字母的检测器参数。参数设置是合理的默认值;然而,在某些情况下,最大关键点特征计数会增加,以允许记录所有检测到的特征。

每项测试都会产生各种结果,包括:

  1. 显示检测到的特征的位置和方向(如果提供)的注释图像。
  2. 文本文件中跨网格的每个检测到的合成要素的汇总计数,包括兴趣点坐标、检测器响应强度、方向(如果检测器提供)以及找到的检测到的合成要素总数。
  3. 2D 直方图显示了字母表中每个特征的箱数。

检测器参数不适用于合成字母

此处未尝试调整功能检测器。为什么?总之,在缺少(1)使用关键点的特定特征描述符和(2)预期应用和用例的情况下,特征检测器调整具有非常有限的价值。这种方法可能会引起一些反对意见,因为检测器是为调谐而设计的,并且必须被调谐以获得实际应用的最佳结果。然而,此处的测试结果只是一个起点,旨在允许与人类预期相比对检测器行为进行简单观察。

在某些情况下,关键点不适合于产生有用的特征描述符,即使该关键点具有高分和高响应。如果在关键点处计算的特征描述符产生太弱的描述符,则该关键点和相应的描述符都应该被拒绝。每个检测器被设计成对不同类别的感兴趣点有用,并且相应地被调整以将结果过滤成对特定特征提取器有用的一组良好候选。

因为我们在这里不处理任何特定的特征描述符方法,所以调整关键点检测器具有有限的价值,因为在没有特定特征描述的情况下检测器参数调整是不明确的。此外,对于每个探测器-描述符对,探测器调谐将是不同的,对于每个应用是不同的,并且对于每个图像可能是不同的。

调整检测器并不简单。每个探测器都有不同的参数来调整给定图像的最佳结果,并且每个图像对照明、对比度和图像预处理提出了不同的挑战。对于典型的应用,检测到的关键点基于一些过滤标准被剔除和丢弃。OpenCV 提供了几种调整检测器的新方法,但是这里没有使用。OpenCV 调优方法包括:

  • DynamicAdaptedFeatureDetector类将使用 adjusterAdapter() 来调整支持的检测器,以仅保留有限数量的特征,并迭代几次检测器参数并重新检测特征,以便尝试并找到最佳参数,仅保留请求数量的最佳特征。一些 OpenCV 检测器提供了一个 adjusterAdapter() ,而一些没有,API 允许创建调整器。
  • AdjusterAdapter 实现兴趣点的剔除和保留标准。标准可以包括 KNN 最近匹配、检测器响应或强度、到最近的其他检测点的半径距离、移除不能计算描述符的关键点等。
  • 金字塔适配特征检测器 类可用于适配不使用尺度空间金字塔的检测器,该适配器将创建高斯金字塔并检测金字塔上的特征。
  • GridAdaptedFeatureDetector类将图像划分为网格,并调整检测器以找到每个网格单元内的最佳特征。

对测试结果的期望

读者应该把这些测试当作信息,只是为了发展对特征检测的直觉。测试结果并不能证明任何探测器的优点。对测试结果的解释应牢记以下信息:

  1. 一组检测器调谐参数用于所有图像,并且检测器结果将根据调谐参数而变化很大。事实上,这些参数被故意设置为 ORB、SURF 和其他检测器的过度敏感值,以生成可以找到的最大数量的可能关键点。
  2. 有时一个字母特征产生多个检测;例如,单个拐角字母特征实际上可能包含几个拐角特征。
  3. 在图像特征网格中复制特征的分布上,检测结果可能不可重复。换句话说,对人类来说看起来差不多的相同模式,有时在不同的位置是无法识别的。如果不仔细研究每个算法,很难说会发生什么。
  4. 使用诸如 SIFT、SURF、ORB、STAR 和 BRISK 之类的图像金字塔的检测器可以在比例空间中识别偏移的或在实际字母表特征之间的关键点。这是意料之中的,因为检测机正在使用来自多个尺度的特征。

合成字母表真实情况图像概述

这里总结了地面实况数据集。注意,集合中每个图像文件的旋转版本以 10 度的间隔从 0 度到 90 度提供。每组中的 0 度图像为 1024x1024 像素,每组中的旋转图像略大,以包含整个旋转的 1024x1024 像素网格。

合成兴趣点字母表

合成兴趣点字母表包含 83 个独特模式的倍数,如图 A-2 所示。总共 7 x 7 组 83 个特征适合 1024 x 1024 的图像。图像的唯一特征总数为 7 x 7 x 83 = 4116,每个特征有 7 x 7 = 49 个实例。特征被布置在由 10 行和 10 列组成的 14x14 像素网格上,包括几个空的网格位置。灰度图像像素值为 0x40 和 0xc0,黑白像素值为 0x0 和 0xff。

9781430259299_AppA-02.jpg

图 A-2 。综合兴趣点

合成角点字母表

合成角点字母表包含 63 个独特图案的倍数,如图图 A-3 所示。总共 8 x 12 组 63 个特征适合 1024x1024 图像。唯一功能总数为 8 x 12 x 63 = 6048,每个功能有 8 x 12 = 96 个实例。每个特征排列在 14×14 像素矩形的网格上,包括 9 行和 6 列特征。灰度图像像素值为 0x40 和 0xc0,黑白像素值为 0x0 和 0xff。

9781430259299_AppA-03.jpg

图 A-3 。合成角点

合成字母覆盖图

提供了一组合成字母覆盖的图像,包括每个图像的旋转版本,如图 A-4 所示。

9781430259299_AppA-04.jpg

图 A-4 。覆盖在真实图像上的合成字母

测试 1:合成兴趣点字母检测

表 A-2 提供了检测到的合成兴趣点总数。注:探测器总数包括在图像金字塔的每个尺度上计算的特征。对于报告图像金字塔每一级特征检测的检测器,单个金字塔级检测在表 A-3 中显示。

表 A-2 。在合成兴趣点字母表中发现的检测特征的汇总计数,0 度旋转

9781430259299_unAppA-01.jpg

表 A-3 。合成兴趣点字母表中检测到的特征的八度计数,0 度旋转

9781430259299_unAppA-02.jpg

在每个字母单元中检测到的特征的总数在来自注释图像的汇总表中提供。请注意,在每个 14x14 单元内可能会检测到几个特征,并且检测器通常会提供不可重复的结果,这将在本附录的末尾进行讨论。计数显示整个图像中检测到的字母特征的总数,如图图 A-5 所示。

9781430259299_AppA-05.jpg

图 A-5 。注释的 BRISK 检测器结果。注意:有几个非重复性异常

注释的合成兴趣点检测器结果

对于 ORB 和 SURF 检测器,使用 drawkeypoints() 函数 的注释渲染过于密集,无法用于可视化,但包含在在线测试结果中。

根据 OpenCV 关键点类定义,在每个检测到的关键点处绘制的圆的直径对应于“有意义的关键点邻域的直径”,其大小根据检测到该特征的图像金字塔等级而变化。有些探测器不使用金字塔,所以直径总是一样的。检测到的特征的位置被归一化到全分辨率图像,并且所有检测到的关键点被绘制。

在线提供完整图像

为了更好地了解每次测试的检测机结果,应查看整个图像以了解异常情况,例如检测机无法识别相同图案的情况。图 A-5 是显示 BRISK 探测器结果的完整图像,其他图像可在线获取。图 A-6 至 A-15 中显示的测试结果仅显示了部分图像。

9781430259299_AppA-06.jpg

图 A-6 。简单斑点检测器,显示单个字母网格集的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)在网格中的所有字母中、在每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-07.jpg

图 A-7。恒星探测器,显示单个字母网格组的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)在每个 1024x1024 图像、黑色、白色和灰色图像、彩色编码表格的网格中所有字母的单个字母特征检测的汇总计数

9781430259299_AppA-08.jpg

图 A-8。GFFT 检测器,显示单个字母网格集的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-09.jpg

图 A-9。MSER 探测器(白底黑、黑底白、深灰底浅灰无探测特征)

9781430259299_AppA-10.jpg

图 A-10。ORB 检测器(使用默认参数的注释没有用,在线提供图像),结果显示在网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-11.jpg

图 A-11。轻快的检测器,显示单个字母网格集的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-12.jpg

图 A-12。快速检测器,显示单个字母网格组的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-13.jpg

图 A-13。哈里斯检测器,显示单个字母网格集的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-14.jpg

图 A-14。SIFT 检测器,显示单个字母网格集的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-15.jpg

图 A-15 。SURF detector (使用默认参数的注释没有用,在线提供图像),结果显示在网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

测试 2:合成角点字母检测

表 A-4 提供了在所有金字塔等级上检测到的合成角点总数;一些探测器不使用金字塔。注:对于在图像金字塔等级上分别报告特征的检测器,单个金字塔等级检测显示在表 A-5 中。

表 A-4 在合成兴趣点字母表中发现的检测到的特征的汇总计数,0 度旋转

9781430259299_unAppA-03.jpg

表 A-5 。八度计数在合成角点字母表中发现的检测特征,0 度旋转

9781430259299_unAppA-04.jpg

每个特征存在于 14×14 像素区域内,并且在每个单元中检测到的特征总数在带有注释图像的汇总表中提供。请注意,在每个 14 x 14 单元内可能会检测到几个特征,并且检测器通常会提供不可重复的结果,这将在本附录的末尾进行讨论。

注释的合成角点检测器结果

测试 2 与测试 1 中的兴趣点检测器结果完全相同。因此,对于 ORB 和 SURF 检测器,使用 drawkeypoints( ) 函数的注释渲染过于密集而无用,但包含在在线测试结果中。

根据 OpenCV 关键点类定义,在每个检测到的关键点处绘制的圆的直径对应于“有意义的关键点邻域的直径”,其大小根据检测到该特征的图像金字塔等级而变化。有些探测器不使用金字塔,所以直径总是一样的。检测到的特征的位置被归一化到全分辨率图像,并且所有检测到的关键点被绘制。

在线提供完整图像

为了更好地了解每次测试的检测机结果,应查看整个图像以了解异常情况,例如检测机无法识别相同图案的情况。图 A-16 至 A-25 所示的测试结果仅显示了部分图像。

9781430259299_AppA-16.jpg

图 A-16 。简单的斑点检测器(白底黑字是唯一具有检测到的特征的图像),其结果显示了在网格中的所有字母上、在每个 1024×1024 图像上、黑、白和灰图像上、颜色编码的表格上的单个字母特征检测的汇总计数

9781430259299_AppA-17.jpg

图 A-17。恒星探测器,结果显示为一个单一的字母网格集。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-18.jpg

图 A-18。GFFT 检测器,显示单个字母网格集的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-19.jpg

图 A-19。轻快的检测器,显示单个字母网格集的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-20.jpg

图 A-20。快速检测器,显示单个字母网格集的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-21.jpg

图 A-21。哈里斯检测器,显示单个字母网格集的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-22.jpg

图 A-22。SIFT 检测器,显示单个字母网格集的结果。(顶行)高斯和盐/胡椒响应。(中间一行)黑色、白色和灰色响应。(底行)网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-23.jpg

图 A-23。SURF 检测器(使用默认参数的注释没有用,在线提供图像),结果显示在网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-24.jpg

图 A-24。ORB 检测器(使用默认参数的注释没有用,在线提供图像),结果显示在网格中所有字母、每个 1024x1024 图像、黑色、白色和灰色图像、颜色编码表中的单个字母特征检测的汇总计数

9781430259299_AppA-25.jpg

图 A-25。MSER 检测器(白底黑、黑底白、深灰底浅灰无检测特征)

测试 3:覆盖在真实图像上的合成字母

表 A-6 提供了小女孩测试图像中检测到的合成特征总数,如图图 A-3 所示。注意,仅使用 0 度版本(无旋转),并且每个字母表的黑色版本和白色版本都被覆盖。一般来说,白色特征叠加会产生更多的兴趣点和角点检测。

表 A-6 。小女孩的合成叠加图像中检测到的特征的汇总计数

9781430259299_unAppA-05.jpg

叠加图像上的注释检测器结果

带注释的图片可以在网上找到。

测试 4:每个字母表的旋转不变性

本节提供的结果显示检测器响应为黑色、白色和灰色字母的完整 0 到 90 度旋转图像集的旋转不变性。主要观察结果:

  • 白底黑字,黑底白字:旋转不变性一般较少使用黑白图像 与当前的一组检测器和参数,主要是由于(1)用于像素值的 0x0 和 0xff 的最大值和最小值,以及(2)未优化的检测器调谐参数。每个检测器似乎以相似的方式在 0 度和 90 度方向的图像上操作,在每个字母图案上不包含旋转抗锯齿伪影;然而,对于 10 到 80 度的其他旋转,像素伪像结合起来降低了这些字母图案的旋转不变性——每个检测器表现不同。
  • 深灰上的浅灰:旋转不变性对于使用缩小范围的灰度图像字母集的检测器来说通常更好,所述缩小范围的灰度图像使用像素值 0x40 和 0xc0,而不是黑白图像集中使用的全部最大值和最小值范围。格雷字母检测器结果通常显示旋转下最容易识别的字母字符。这可能是由于在感兴趣的点或角的局部区域中更近范围的灰度值的不太明显的局部曲率。

确定旋转不变性的方法

确定旋转不变性的方法在图 A-26 到 A-30 中示出,并通过伪代码示出如下:

For (degree = 0; degree < 100; degree += 10)

        Rotate image (degree)
        For each detector (SURF, SIFT, BRISK, ...):
                Compute interest point locations
                Annotate rotated image showing interest point locations
                Compute bin count (# of times) each alphabet feature is detected
                Create bin count image: pixel value = bin count for each alphabet character

9781430259299_AppA-26.jpg

图 A-26 。计算方法和宁滨检测旋转图像集的字母特征,用于说明的模拟 SIFT 数据。(左)原图。(中左)用检测到的点标注的旋转图像。(中心)整个图像中叠加在字母单元格区域上的所有检测点的计数。(中右)格网单元中检测到的字母特征的汇总箱数。(右)以图像形式呈现箱计数的 2D 直方图;每个像素值都是面元计数。图像中较亮的像素具有较高的箱计数,这意味着字母单元具有较高的检测计数

9781430259299_AppA-27.jpg

图 A-27。10 组 SIFT 灰度角字母特征检测结果显示为 2D 直方图图像,应用塞菲亚 LUT,像素值设置为直方图仓值。每个旋转图像的直方图如下所示:左图= 0 度旋转;从左到右顺序:0,10,20,30,40,50,60,70,80,90 度旋转。注意,直方图仓计数是跨整个图像计算的,对每个字母特征的所有检测求和

9781430259299_AppA-28.jpg

图 A-28。(左)灰色角点 2D 直方图 bin 图像。从左到右:0-90 度旋转,灰度 LUT 应用,浅灰色深灰色兴趣点字母表 2D 直方图宁滨图像,对比度增强,塞菲亚 LUT 应用

图 A-26 和 A-30 显示了跨越 0 到 90 度旋转的合成角点检测的汇总面元计数。每个图像中的十列从左到右显示了作为图像显示的 0 到 90 度旋转图像最终箱数。

9781430259299_AppA-29.jpg

图 A-29。显示为一组 6x9 像素图像的检测到的角字母特征的汇总箱计数,其中每个像素值是箱计数。(左侧 10 x 10 图像组)白底黑字。(中心 10 x 10 图像组)深灰色角上的浅灰色。(右侧 10 x 10 图像组)黑底白字。注意,灰色字母是用最佳旋转不变性检测的。列从左到右 0-90 度旋转,行从上到下,SURF,SIFT,BRISK,FAST,HARRIS,GFFT,MSER,ORB,STAR,SIMPLEBLOB。塞菲娅·LUT 申请了

9781430259299_AppA-30.jpg

图 A-30。显示为一组 10x10 像素图像的检测到的兴趣点字母特征的汇总箱计数,其中每个像素值都是箱计数。(左侧 10 x 10 图像组)白底黑字。(中心 10 x 10 图像组)深灰色角上的浅灰色。(右侧 10 x 10 图像组)黑底白字。注意,灰色字母是用最佳旋转不变性检测的。列从左到右 0-90 度旋转,行从上到下,SURF,SIFT,BRISK,FAST,HARRIS,GFFT,MSER,ORB,STAR,SIMPLEBLOB。塞菲娅·LUT 申请了

结果和不可重复性异常的分析

完整的分析结果是在线的,包括显示检测到的关键点位置的注释图像和包含每个检测到的关键点的摘要信息的文本文件。

警告

每个兴趣点检测器被不同地设计是有故意的原因的;从任何绝对标准来看,没有哪种检测器在所有情况下都是优越的。反对宽松解释这些测试结果的一些论点如下:

  1. 不可预测性:兴趣点检测器发现从人类视觉系统角度来看经常不可预测的特征,并且它们不会被设计限制在这里所示的合成兴趣点和角点的狭窄边界内。通常,兴趣点检测器会找到人类不会选择的特征。
  2. 像素混叠伪像:混叠伪像影响检测,并且对于使用最大值和最小值字母的旋转图像最明显,例如白底黑字或黑底白字,并且对于深灰色字母上的浅灰色不太明显。
  3. 尺度空间:并不是所有的探测器都使用尺度空间,这是一个临界点。例如,SIFT、SURF 和 ORB 在检测过程中使用尺度空间金字塔。尺度空间方法过滤掉在尺度空间金字塔的某些级别中不可见的合成字母表特征。
  4. 二进制与标量值: FAST 使用二进制值比较来建立描述符,而其他方法使用标量值,如梯度。诸如 FAST 的二进制值方法将检测相同的特征,而不管极性或灰度值范围;然而,基于梯度的标量检测器对像素值极性和像素值范围更敏感。
  5. 像素区域大小: FAST 使用 7x7 的补丁来寻找相连的圆形周边区域,而 SIFT、SURF 和 ORB 等其他功能使用更大的像素区域,这些像素区域穿过字母网格单元,导致兴趣点位于字母特征之间的中心,而不是在它们上面。
  6. 区域形状:诸如 MSER 和简单斑点之类的特征被设计成检测没有特定形状的较大的连接区域,而不是诸如兴趣点字母之类的较小的局部特征。诸如 SIFT 之类的仿射不变检测器可以检测对应于仿射尺度和旋转变换的椭圆形或长方形区域中的特征,而诸如 FAST 之类的非仿射检测器可以仅检测与圆形或正方形区域中的模板相同的特征,该模板在尺度上具有一些旋转不变性。
  7. 从图像边界偏移区域:一些检测器,例如 ORB、SURF 和 SIFT,在从图像边界偏移的位置开始检测器计算,因此不在整个图像上计算特征。
  8. 已证实的价值:此处使用的每种检测器方法都已证明对实际应用有用且有价值。

记住这些警告,测试结果就可以自己说话了。

测试 1 和 2 中的不可重复性

在测试 1 和 2 中可见的一个有趣的异常出现在注释图像中,说明检测器结果在合成兴趣点和角字母上是不可重复的。在某些情况下,非线性是惊人的;参见测试 1 和测试 2 的注释图像。人类的期望是相同的兴趣点应该被同样好地识别。以下是一些观察结果:

  1. 无论背景和前景是否改变,人都会容易地识别出相同的图案;然而,一些检测器对极端的背景和前景极性没有太大的不变性。如果不深入研究每种算法,白色、黑色和灰色字母的检测器行为之间的异常就更难预料和解释。
  2. 一些检测器在比 14x14 字母网格更大的区域边界上进行计算,因此检测器实际上忽略字母特征网格并使用相邻的字母特征。
  3. 一些检测器使用尺度空间,因此在某些情况下,在较高的尺度级别会遗漏单个字母特征,而 SIFT DoG 等检测器会一起使用多个尺度。

总之,兴趣点检测和参数调整类似于图像处理操作符和它们的参数:有无限的变化可用于实现相同的目标。人们希望,通过研究这里的测试结果,直觉会增加,新的方法可以设计出来。

测试 3 中的其他不可重复性

我们注意到测试 3 使用带有合成覆盖的小女孩图像的不可重复性异常,但是在该测试中对可重复性的期望较低。可以在线在带注释的合成叠加图像中观察到阳性(白色)和阴性(黑色)特征叠加之间的一些差异分析。

测试总结

所有测试的外卖分析包括以下内容:

  1. 不可重复性:一些不可重复性异常检测几乎相同的特征,仅在局部像素插值伪影的旋转下有所不同。一些检测器也不同地检测黑色、白色和灰色字母。
  2. 灰度级字母(lt. gray on dk.gray) 一般被检测到与人类预期最相似。结果表明,在当前调谐参数下,检测器对灰度级图案的旋转响应更加一致,而不是最大值黑白图案。
  3. 真实图像叠加合成图像测试提供有趣的信息,培养对检测机行为的直觉——仅用于说明目的。

未来的工作

其他分析应包括设计和使用适合给定类型应用的替代字母,包括更大范围的像素大小和比例,尤其是具有更接近灰度值极性的字母,而不是极端最大和最小像素值。检测器调谐也应该在字母表中进行探索。

十、附录 B:真实情况数据集调查

表 B-1 是对各个类别的公共领域数据集 的简要调查,排名不分先后。请注意,许多公共领域数据集可以从大学和政府机构免费获得。

表 B-1 。公共领域数据集

|

名字

|

标签标签标签

|
| --- | --- |
| 描述 | 带注释的场景和对象 |
| 种类 | 超过 30,000 张图片;全面;数百个类别,包括汽车,人,建筑物,道路,人行道,天空,树 |
| 贡献 | 欢迎投稿 |
| 工具和应用 | 用于 iPhone 的 Labelme 应用有助于数据库 |
| 关键论文 | [67][68] |
| 物主 | MTI 作弊 |
| 环 | http://new-labelme.csail.mit.edu/Release3.0/ |

|

名字

|

|
| --- | --- |
| 描述 | 带注释的场景和对象 |
| 种类 | 908 个场景类别,3,819 个对象类别,13,1072 个对象,并且还在增长 |
| 贡献 | 欢迎投稿 |
| 工具和应用 | 图像分类器源代码+ API,iOS app,Android app |
| 关键论文 | [70] |
| 物主 | MTI 作弊 |
| 环 | http://groups.csail.mit.edu/vision/SUN/ |

|

名字

|

加州大学欧文分校机器学习知识库

|
| --- | --- |
| 描述 | 非常有用;许多种类图像的巨大储存库 |
| 种类 | 不胜枚举;非常广泛的类别,数据的许多属性是专门可搜索的,并被设计成真实情况数据集 |
| 贡献 | 进行的 |
| 工具和应用 | 搜索特定地面实况数据集的在线助手 |
| 关键论文 | [550] |
| 环 | http://archive.ics.uci.edu/ml/datasets.html |

|

名字

|

斯坦福 3D 扫描库

|
| --- | --- |
| 描述 | 具有亚毫米精度的高分辨率 3D 扫描图像,包括 XYZ 和 RGB 数据集 |
| 种类 | 多个扫描的 3D 对象,具有 3D 点云,分辨率从 3,400,000 个扫描点到 750,000 个三角形及以上 |
| 环 | http://graphics.stanford.edu/data/3Dscanrep/ |

|

名字

|

卡尔斯鲁厄理工学院 KITTI 基准套件

|
| --- | --- |
| 描述 | 各种城市驾驶场景的立体数据集 |
| 种类 | KITTI benchmark suite 涵盖光流、里程计、目标检测、物体方位估计;卡尔斯鲁厄序列覆盖从穿过城市的移动平台获取的灰度立体序列;卡尔斯鲁厄物体覆盖了从穿过城市的移动平台上拍摄的灰度立体序列 |
| 环 | http://www.cvlibs.net/datasets/index.html |

|

名字

|

加州理工学院物体识别数据集

|
| --- | --- |
| 描述 | 旧但仍然有用;数百个类别中的对象,其中一些带有轮廓注释 |
| 种类 | 超过 256 个类别,动物、植物、人、普通物品、普通食物、工具、家具等等。 |
| 关键论文 | [71] |
| 环 | http://www.vision.caltech.edu/Image_Datasets/Caltech101/
http://www.vision.caltech.edu/Image_Datasets/Caltech256/
http://authors.library.caltech.edu/7694/(最新版本 101 和 256) |

|

名字

|

Imagenet + Wordnet

|
| --- | --- |
| 描述 | 标记的、注释的、包围盒的和特征描述符标记的图像;超过 14,197,122 张图片被编入 21,841 组相似图片或同义词集中,使用姐妹应用 Wordnet 创建 |
| 种类 | 类别包括几乎任何东西 |
| 贡献 | 来自互联网搜索的图片 |
| 工具和应用 | 在线控件:http://www.image-net.org/download-API Source Code: ImageNet Large Scale Visual Recognition Challenge (ILSVRC2010) http://www.image-net.org/challenges/LSVRC/2010/index |
| 关键论文 | [72];几个参见http://www.image-net.org/about-publication |
| 物主 | 图像有单独的所有者;网站是斯坦福和普林斯顿 |
| 环 | http://www.image-net.org/ http://www.image-net.org/challenges/LSVRC/2012/ |

|

名字

|

米德尔伯里计算机视觉数据集

|
| --- | --- |
| 描述 | 学术性和综合性数据集,以及大多数数据集的算法比较 |
| 种类 | 立体视觉(优秀)、多视图立体(优秀)、MRF、光流(优秀)、色彩处理 |
| 贡献 | 可以提交数据集上的算法基准 |
| 关键论文 | 几个;参见网站 |
| 物主 | 米德尔伯里学院 |
| 环 | http://vision.middlebury.edu/ |

|

名字

|

ADL 活动识别数据集

|
| --- | --- |
| 描述 | 常见生活场景的活动识别标注场景 |
| 种类 | 日常生活 |
| 工具和应用 | 活动认证码可用(参见下面的链接) |
| 关键论文 | [73] |
| 环 | http://deepthought.ics.uci.edu/ADLdataset/adl.html |

|

名字

|

麻省理工学院室内场景 67、场景分类

|
| --- | --- |
| 描述 | 专门包含不同室内场景的带注释数据集 |
| 种类 | 15,620 张图片被组织成 67 个室内类别,一些注释采用 Labelme 格式 |
| 关键论文 | [74] |
| 环 | http://web.mit.edu/torralba/www/indoor.html |

|

名字

|

RGB-D 对象识别数据集,U/W

|
| --- | --- |
| 描述 | 数据集包含 RGB 和相应的深度图像 |
| 种类 | 300 个常见的家用物品,51 个类别,使用类似于 Imagenet 风格的 Wordnet(上面回顾的 Imagenet 数据集),每个物品在不同的旋转角度和视角下以 RGB 和 Kinect 深度记录 |
| 关键论文 | [75] |
| 环 | http://www.cs.washington.edu/rgbd-dataset/ |

|

名字

|

NYU 深度数据集

|
| --- | --- |
| 描述 | 使用 RGB-D 数据集+加速度计数据的室内场景注释数据集 |
| 种类 | 超过 500,000 帧,许多不同的室内场景和场景类型,数千个类别,加速度计数据,修复和原始深度信息 |
| 工具和应用 | Matlab 工具箱+ g++代码 |
| 关键论文 | [76] |
| 环 | http://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html |

|

名字

|

英特尔西雅图实验室 -以自我为中心识别手持物体

|
| --- | --- |
| 描述 | 使用可佩戴相机的以自我为中心的手持对象的注释数据集 |
| 种类 | 超过 42 个日常物体在不同的光线、遮挡和视角下;总视频序列数据超过 6GB |
| 关键论文 | [77] [78] |
| 环 | http://seattle.intel-research.net/~xren/egovision09/ |

|

名字

|

乔治亚理工学院 GTEA 以自我为中心的活动——凝视(+)

|
| --- | --- |
| 描述 | 使用可佩戴相机的以自我为中心的手持对象的注释数据集 |
| 种类 | 各种光线、遮挡和视角下的许多日常物体 |
| 工具和应用 | 视觉函数和数学函数的代码库 |
| 关键论文 | [79] |
| 环 | http://www.cc.gatech.edu/~afathi3/GTEA_Gaze_Website/ |

|

名字

|

CUReT:哥伦比亚-乌得勒支反射率和质地数据库

|
| --- | --- |
| 描述 | 广泛的纹理采样和照明数据集方向 |
| 种类 | 60 多个不同的样本,200 多种观察和照明组合,BRDF 测量数据库,等等 |
| 关键论文 | [80] |
| 环 | http://www.cs.columbia.edu/CAVE/software/curet/ |

|

名字

|

麻省理工学院 Flickr 材质表面类别数据集

|
| --- | --- |
| 描述 | 用于识别材料类别的数据集,包括织物、玻璃、金属、塑料、水、植物、皮革、纸张、石头、木材 |
| 种类 | 包含用于表面特性分析的材料图像,与对象或纹理分析相反;10 类材料+每类 100 张图片 |
| 关键论文 | [81] |
| 环 | http://people.csail.mit.edu/celiu/CVPR2010/index.html |

|

名字

|

荒野中的面孔

|
| --- | --- |
| 描述 | 收集了超过 13,000 张带有人名注释的人脸图像 |
| 种类 | 表面 |
| 关键论文 | [82] |
| 环 | http://vis-www.cs.umass.edu/lfw/ |

|

名字

|

CMU 多派人脸数据库

|
| --- | --- |
| 描述 | 具有多个姿态角度的带注释的人脸和情感数据库 |
| 种类 | 在几个月的时间里,为 337 名受试者中的每一位拍摄了 750,000 张人脸图像,拍摄视角超过 15 个视点,采用了 19 种照明方式和带注释的面部表情 |
| 关键论文 | [83] |
| 环 | http://www.multipie.org/ |

|

名字

|

斯坦福 40 招

|
| --- | --- |
| 描述 | 人物动作图像数据库 |
| 种类 | 人们执行 40 个动作,边界框注释,9,532 个图像,每个动作类 180-300 个图像 |
| 关键论文 | [84] |
| 环 | http://vision.stanford.edu/Datasets/40actions.html |

|

名字

|

NORB 从形状识别三维物体

|
| --- | --- |
| 描述 | NYU 物体识别基准 |
| 种类 | 立体图像对;50 个玩具在 36 个方位、9 个高度和 6 种光照条件下的 194,400 幅图像 |
| 工具和应用 | EBLEARN C++学习与视觉库,LUSH 编程语言,VisionGRader 目标检测工具http://www.cs.nyu.edu/~yann/software/index.html |
| 关键论文 | [85] |
| 环 | http://www.cs.nyu.edu/~yann/research/norb/ |

|

名字

|

光流算法评估

|
| --- | --- |
| 描述 | 用于光流评估目的的工具和数据 |
| 种类 | 许多光流序列真实情况数据集 |
| 工具和应用 | 用于生成光流数据的工具,一些光流编码算法 |
| 关键论文 | [86] |
| 环 | http://of-eval.sourceforge.net/ |

|

名字

|

宠物群体感应数据集挑战

|
| --- | --- |
| 描述 | 多传感器摄像机视图组成一个包含人群活动序列的数据集 |
| 种类 | 挑战目标包括人群估计、密度、特定人群跟踪、人群流动 |
| 关键论文 | [94] |
| 环 | http://www.cvg.rdg.ac.uk/PETS2009/a.html |

|

名字

|

工字盖

|
| --- | --- |
| 描述 | 面向安全的挑战地面实况数据集,支持竞争性基准测试,包括定位停放车辆、遗弃行李、安全周界和门口监控的场景 |
| 种类 | 安全领域中的各种类别 |
| 贡献 | 不,由英国政府资助 |
| 工具和应用 | 不适用 |
| 关键论文 | 不适用 |
| 环 | http://computervision.wikia.com/wiki/I-LIDS |

|

名字

|

美国政府 NIST 特雷科维德

|
| --- | --- |
| 描述 | NIST 资助的公共项目,从 2001 年到 2013 年,研究自动分段、索引和基于内容的视频检索 |
| 种类 | 1.语义索引 2。已知项目搜索(KIS) 3。实例搜索 4。多媒体事件检测 5。多媒体事件叙述(MER) 6。监控事件检测(SER)、自然场景、人类、植物、宠物、办公物品等 |
| 贡献 | 美国政府每年 |
| 工具和应用 | 检测评估框架(F4DE)工具、故事评估工具和其他工具 |
| 关键论文 | [95] |
| 环 | http://www-nlpir.nist.gov/projects/trecvid/ |

|

名字

|

微软剑桥研究院

|
| --- | --- |
| 描述 | 按像素标记或分段的对象 |
| 种类 | 几百件物品 |
| 环 | http://research.microsoft.com/en-us/projects/objectclassrecognition/ |

|

名字

|

光流算法评估

|
| --- | --- |
| 描述 | 用于光流算法基准测试的体绘制视频场景 |
| 种类 | 光流的各种场景;主要是通过光线追踪生成的合成序列 |
| 贡献 | 不适用 |
| 工具和应用 | 是,Tcl/Tk |
| 关键论文 | [96] |
| 环 | http://of-eval.sourceforge.net/ |

|

名字

|

Pascal 对象识别 VOC 挑战数据集

|
| --- | --- |
| 描述 | 目标识别领域 2005-2013 年研究挑战的标准化地面实况数据;竞争包括对 20 类数据的分类、检测、分割和行动 |
| 种类 | 由场景中的 20 多类物体组成,包括人、动物、车辆、室内物体 |
| 贡献 | 通过帕斯卡会议 |
| 工具和应用 | 包括用于标记数据和数据库访问的开发工具包和其他有用的软件,以及用于报告基准测试结果的工具 |
| 关键论文 | [97] |
| 环 | http://pascallin.ecs.soton.ac.uk/challenges/VOC/ |

|

名字

|

crcv〔??〕

|
| --- | --- |
| 描述 | 非常广泛;中佛罗里达大学的计算机视觉研究中心拥有大量涵盖多个领域的研究数据 |
| 种类 | 全面的类别集(鸟瞰图、地面图),包括动态纹理、多模态 iPhone 传感器真实情况数据(视频、加速度计、陀螺仪)、几个类别的人体动作、人群分割、停车场、人体动作等等 |
| 贡献 | 不适用 |
| 工具和应用 | 不适用 |
| 关键论文 | [98] |
| 环 | http://vision.eecs.ucf.edu/datasetsActions.html |

|

名字

|

UCB 轮廓检测和图像分割

|
| --- | --- |
| 描述 | 加州大学伯克利分校计算机视觉小组为轮廓检测、图像分割和一些兴趣点方法提供了一套完整的基础数据、算法和性能评估 |
| 种类 | 500 幅自然场景的地面实况图像,包含广泛的主题和标记的地面实况数据 |
| 贡献 | 不适用 |
| 工具和应用 | 基准测试代码( globalPB 用于 CPU 和 GPU) |
| 关键论文 | [99] |
| 环 | http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/resources.html#bench |

|

名字

|

面向情境感知视觉的 CAVIAR 地面实况视频

|
| --- | --- |
| 描述 | 项目网站包含城市和购物中心的标记和注释的真实情况数据,包括 52 个 90K 帧的视频,包括室内办公室场景和购物中心的人们 |
| 种类 | 购物中心和办公室中的脚本和现实生活活动,包括散步、浏览、会议、打架、逛街、进/出商店 |
| 贡献 | 不适用 |
| 工具和应用 | 不适用 |
| 关键论文 | [100] |
| 环 | http://homepages.inf.ed.ac.uk/rbf/CAVIAR/caviar.htm |

|

名字

|

波士顿大学计算机科学系

|
| --- | --- |
| 描述 | 涵盖广泛主题类别的图像和视频数据库 |
| 种类 | 用于头部跟踪和手语的视频序列;一些数据集被标记;用于手跟踪、多人脸跟踪、车辆跟踪等的静止图像 |
| 贡献 | 匿名 FTP |
| 工具和应用 | 不适用 |
| 关键论文 | [101] |
| 环 | http://www.cs.bu.edu/groups/ivc/data.php |

十一、附录 C:图像处理和计算机视觉资源

本附录包含计算机视觉和成像的一些资源列表,包括商业产品、开源项目、组织和标准机构。

商业产品

|

名字

|

矩阵实验室

|
| --- | --- |
| 描述 | 行业标准数学软件包,包含许多科学软件包选项,适用于包括成像和计算机视觉在内的各个领域。包括一个不错的软件开发环境,为计算机视觉、图像处理、可视化等提供附加库。非常适合代码开发。 |
| 库 API | SDE 内部丰富的 API 库。 |
| 同时蒸馏萃取 | 包括用于编码的软件开发环境。 |
| 开放源码 | 不是针对产品,可能是针对用户开发的一些代码。 |
| 环 | http://www.mathworks.com/products/matlab/ |

|

名字

|

数学软件

|
| --- | --- |
| 描述 | 行业标准数学软件包,包含许多科学软件包选项,适用于各种领域,包括图像处理和计算机视觉。非常适合创建出版就绪的可视化和数学笔记本。用于计算机视觉、图像处理、可视化等的附加库。 |
| 库 API | SDE 内部丰富的 API 库。 |
| 同时蒸馏萃取 | 包括一个默认的基于函数的脚本开发环境,以及一些代码开发插件。 |
| 开放源码 | 不针对产品,但可能针对用户开发的代码。 |
| 环 | http://www.wolfram.com/mathematica/ |

|

名字

|

英特尔 TBB、英特尔 IPP、英特尔 CILK++软件

|
| --- | --- |
| 描述 | 英特尔提供针对 IA 指令集优化的库、语言和编译器。英特尔 TBB 是面向单核和多核处理器的多线程库,英特尔 IPP 提供针对 IA 和 SIMD 指令以及某些情况下的 GPGPU 优化的图像和计算机视觉性能原语,英特尔 CILK++是用于编写 SIMD/SIMT 并行代码的语言。 |
| 库 API | 丰富的 API 库。 |
| 同时蒸馏萃取 | 不,但英特尔 CILK++是一种编程语言。 |
| 开放源码 | 号码 |
| 环 | http://software.intel.com/en-us/intel-tbb
|

开源

|

名字

|

开放计算机视觉

|
| --- | --- |
| 描述 | 工业标准计算机视觉和图像处理库,被世界各地的大公司和其他公司使用。 |
| 库 API | 丰富的 API 库。 |
| 同时蒸馏萃取 | 号码 |
| 开放源码 | BSD 许可证。 |
| 环 | http://opencv.org/ |

|

名字

|

影像-斐济

|
| --- | --- |
| 描述 | 图像处理、可视化和计算机视觉的应用。由美国政府国立卫生研究院[502]开发,可供公众使用。广泛。FIJI 是 ImageJ 的一个发行版,有许多用户社区提交的插件。 |
| 库 API | 号码 |
| 同时蒸馏萃取 | 号码 |
| 开放源码 | 公共领域使用。 |
| 环 | http://rsbweb.nih.gov/ij/index.html
http://rsb.info.nih.gov/ij/plugins/
|

|

名字

|

VLFEAT

|
| --- | --- |
| 描述 | 包含一系列用于特征描述、模式匹配和图像处理的通用计算机视觉算法的 c 库。 |
| 库 API | 丰富的 API 库。 |
| 同时蒸馏萃取 | 号码 |
| 开放源码 | BSD 许可证。 |
| 环 | http://vlfeat.org |

|

名字

|

VTK

|
| --- | --- |
| 描述 | C++库,包含一系列常见的图像处理、图形和数据可视化功能。包括 GUI 小部件。VTL 也提供咨询服务。 |
| 库 API | 丰富的 API 库。 |
| 同时蒸馏萃取 | 号码 |
| 开放源码 | BSD 许可证。 |
| 环 | http://vtk.org/ |

|

名字

|

网格实验室

|
| --- | --- |
| 描述 | 用于可视化、渲染、注释和转换 3D 数据网格(如点云和 CAD 设计)的应用。广泛。使用 ISTI 的 VCG 图书馆。 |
| 库 API | 号码 |
| 同时蒸馏萃取 | 号码 |
| 开放源码 | BSD 许可证。 |
| 环 | http://meshlab.sourceforge.net/ |

|

名字

|

pdflib

|
| --- | --- |
| 描述 | 图像处理和计算机视觉加速库。 |
| 库 API | 是的。 |
| 同时蒸馏萃取 | 号码 |
| 开放源码 | 号码 |
| 环 | 参见参考文献[495]。 |

|

名字

|

点云库(PCL)

|
| --- | --- |
| 描述 | 广泛的开源库,主要用于处理 3D 点云,包括来自最新学术研究和可视化方法的许多尖端 3D 描述符的实现。 |
| 库 API | 是的。 |
| 同时蒸馏萃取 | 号码 |
| 开放源码 | 是的。 |
| 环 | http://pointclouds.org/downloads/
http://pointclouds.org/documentation/
|

|

名字

|

幕府机器学习工具箱

|
| --- | --- |
| 描述 | 机器学习和模式匹配库。广泛。 |
| 库 API | 是的。 |
| 同时蒸馏萃取 | 号码 |
| 开放源码 | GPL。 |
| 环 | http://shogun-toolbox.org/page/features/ |

|

名字

|

卤化物高性能图像处理语言

|
| --- | --- |
| 描述 | 针对 SIMD、SIMT 和 GPGPU 优化的 C++语言类。 |
| 库 API | 是的。 |
| 同时蒸馏萃取 | 号码 |
| 开放源码 | 开源 MIT 许可。 |
| 环 | http://halide-lang.org/ |

|

名字

|

REIN(识别基础设施)视觉算法框架

|
| --- | --- |
| 描述 | 机器人学中的计算机视觉框架:使用 ROS 操作系统。参见参考文献[397,503]。 |
| 库 API | 是的。 |
| 同时蒸馏萃取 | 号码 |
| 开放源码 | 麻省理工学院开源许可证。 |
| 环 | http://wiki.ros.org/rein |

|

名字

|

ECTO——计算机视觉的图形网络构建

|
| --- | --- |
| 描述 | 用于为计算机视觉流水线创建函数的有向非循环图的库,支持线程。用 C++/Python 框架写的。可以和 OpenCV,PCL,ROS 集成。 |
| 库 API | 是的。 |
| 同时蒸馏萃取 | 号码 |
| 开放源码 | 很显然。 |
| 环 | http://plasmodic.github.io/ecto/ |

组织、机构和标准

| 微软研究院
http://academic.research.microsoft.com/ | 微软研究院拥有世界上最大的计算机视觉专家团队之一,并积极推动会议和研究。提供了几个好的在线资源。 |
| CIE
http://www.cie.co.at/ | 国际照明委员会(在法语名称后缩写为 CIE)提供了与颜色科学相关的一系列光源的标准照明数据,以及众所周知的颜色空间 CIE XYZ、CIE Lab 和 CIE Luv 的标准。 |
| ICC
http://www.color.org/index.xalter | 国际色彩联盟为成像设备提供 ICC 标准色彩描述文件,以及许多其他行业标准,包括彩色显示器的 sRGB 色彩空间。 |
| 洞穴计算机视觉实验室
http://www.cs.columbia.edu/CAVE/ | 由 Shree Nayar 博士领导的哥伦比亚大学计算机视觉实验室提供世界一流的成像和视觉研究。 |
| RIT Munsel 颜色科学实验室
http://www.rit.edu/cos/colorscience/ | 罗切斯特理工学院 Munsel 色彩科学实验室是色彩科学和成像领域的领先研究机构,提供广泛的资源,并与柯达、施乐等行业成像巨头有着密切的联系。 |
| 开 VX KHRONOS
http://www.khronos.org/openvx | OPENVX 是针对低级视觉图元加速的建议标准,由 KHRONOS 标准组执行。 |
| SPIE 光学和光子学会
医学成像杂志
电子成像杂志
应用遥感杂志
| 光科学的跨学科方法,包括光子学、传感器和成像;推广会议,出版杂志。 |
| IEEE CVPR,计算机视觉与模式识别
PAMI,模式分析与机器智能
ICCV,计算机视觉国际会议
IP,Trans。图像处理http://ieee.org | 期刊和会议出版协会,包括各种计算机视觉和成像主题。 |
| CVF 计算机视觉基础
http://www.cv-foundation.org/ | 促进计算机视觉,提供论文传播。 |
| NIST-图像集团
国家标准研究院
http://www.nist.gov/itl/iad/ig/ | 促进计算机视觉和成像大挑战;涵盖生物识别标准、指纹测试、人脸、虹膜、多模态测试、下一代测试平台。 |
| I20 - Darpa 信息创新办公室
http://www.darpa.mil/Our_Work/I2O/Programs/
http://www.darpa.mil/OpenCatalog/index.html | 用于军事应用的大量计算机视觉和相关程序研究。一些作品通过 OpenCatalog 向公众发布。 |

日记账及其缩写

  • 图形模型/图形模型和图像处理/计算机视觉、图形和图像处理
  • CVIU 计算机视觉和图像理解
  • IJCV 国际计算机视觉杂志
  • IVC 图像和视觉计算
  • 数学成像和视觉杂志
  • MVA 机器视觉及应用
  • TMI - IEEE 医学成像汇刊

会议 及其缩写

  • 3DIM 国际三维成像和建模会议
  • 三维数据处理可视化和传输
  • ACCV 亚洲计算机视觉会议
  • 人脸和手势的 AMFG 分析和建模
  • 生物驱动的计算机视觉
  • BMVC 英国机器视觉会议
  • CRV 加拿大计算机和机器人视觉会议
  • CVPR 计算机视觉和模式识别
  • 医学中的计算机视觉、虚拟现实和机器人技术
  • 计算机图像的 DGCI 离散几何
  • ECCV 欧洲计算机视觉会议
  • 计算机视觉和模式识别中的 EMMCVPR 能量最小化方法
  • FGR IEEE 自动人脸和手势识别国际会议
  • ICARCV 控制、自动化、机器人和视觉国际会议
  • ICCV 计算机视觉国际会议
  • ICCV 工作室
  • ICVS 计算机视觉系统国际会议
  • 网络日志和社交媒体国际会议
  • ISVC 视觉计算国际研讨会
  • 神经信息处理系统
  • 计算机视觉中的尺度空间理论
  • 计算机视觉中的 VLSM 变分、几何和水平集方法
  • 计算机视觉应用研讨会

在线资源

|

名字

|

csonline

|
| --- | --- |
| 描述 | 计算机视觉软件和项目的巨大列表,索引到维基百科 |
| 环 | http://homepages.inf.ed.ac.uk/rbf/CVonline/environ.htm |

|

名字

|

注释计算机视觉书目

|
| --- | --- |
| 描述 | 链接到计算机视觉主题、参考资料、软件等的巨大索引 |
| 环 | http://www.visionbib.com/bibliography/contents.html |

|

名字

|

NIST 在线工程统计手册(USG)

|
| --- | --- |
| 描述 | 统计手册,包括例子和软件 |
| 环 | http://www.itl.nist.gov/div898/handbook/ |

|

名字

|

计算机工业(大卫·洛)

|
| --- | --- |
| 描述 | 包括主要计算机视觉和成像产品公司的链接 |
| 环 | http://www.cs.ubc.ca/~lowe/vision.html |

十二、附录 D:扩展的 SDM 度量

图 D-1 提供了使用 SDM 的图像纹理的可视化。

9781430259299_AppD-01.jpg

图 D-1 。SDM 扩展指标

清单 D-1 展示了来自第三章的扩展 SDM 指标。该准则可在网站上获得

http://www.apress.com/source-code/ComputerVisionMetrics

清单 D-1。 延伸 SDM 度量从第三章

/*
**        CREATED 1991 (C) KRIG RESEARCH, SCOTT KRIG - UNPUBLISHED SOFTWARE
**        PORTED TO MAC 2014
**
**                        ALL RIGHTS RESERVED
**
**        THIS SOFTWARE MAY BE USED FREELY FOR ACADEMIC AND RESEARCH PURPOSES.
**        REFERENCE THIS BOOK AND PROVIDE THIS NOTICE WHEN USING THE SOFTWARE.
*/

using namespace std;

#include <math.h>
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include "/usr/local/include/opencv/cv.h"
#include "/usr/local/include/opencv2/core/core.hpp"
#include "/usr/local/include/opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace cv;

#define TINY       0.0000000001
#define F6U        "%6f.3"
#define F6F        "%.6f"
#define F3F        "%.3f"
#define FXF        "%.0f"
#define FALSE 0
#define TRUE 1

typedef struct area {
        int x;
        int y;
        int dx;
        int dy;
} area_t;

typedef struct {
        double        t0;
        double        t90;
        double        t135;
        double        t45;
        double        tave;
        } ctab;

typedef struct {
        double        median;
        double        ave;
        double        adev;
        double        sdev;
        double        svar;
        double        skew;
        double        curt;
        int           min;
        int           max;
        ctab          xcentroid;
        ctab          ycentroid;
        ctab          _asm;
        ctab          low_frequency_coverage;
        ctab          total_coverage;
        ctab          corrected_coverage;
        ctab          total_power;
        ctab          relative_power;
        ctab          locus_length;
        ctab          locus_mean_density;
        ctab          bin_mean_density;
        ctab          containment;
ctab          linearity;
        ctab          linearity_strength;
        ctab          autocorrelation;
        ctab          covariance;
        ctab          inertia; /* haralick contrast */
        ctab          absolute_value;
        ctab          inverse_difference; /* haralick /* ctab          entropy; /* haralick /* ctab          correlation; /* haralick /* } glob_t;

glob_t        gt;

/* FUNCTIONS */

int i_sort (
int        *x,
int        n,
int        parm)
{
int        k,i,ii;
int        y,found;
int        xi;
int        n2, n2p;

x--;
for (k=1; k<n+1; k++) {
y = x[k];
for (i=k-1, found = FALSE; i>=0 && !found; ) {
xi = x[i];
ii = i+1;
if (y < xi) {
x[ii] = xi;
i--;
} else {
found = TRUE;
}
}
x[ii] = y;
}
if (parm == 0) return 0;
n2p = (n2=(n>>1))+1;
return ( n % 2 ? x[n2p] : (x[n2] + x[n2p]) >>1 );
}

int lmoment(
int        *data,
int        n,
double     *median,
double     *ave,
double     *adev,
double     *sdev,
double     *svar,
double     *skew,
double     *curt)
{
int        j;
double     s,p,ep=0.0;

if (n <= 1) return 0;

s=0.0;
for (j=1; j<=n;j++) s += (double)data[j];
*ave=s/n;
*adev=(*svar)=(*skew)=(*curt)=0.0;
for (j=1;j<=n;j++) {
*adev += abs(s=(double)data[j]-(*ave));
*svar += (p=s*s);
*skew += (p *= s);
*curt += (p *= s);
}

*adev /=n;
*svar = (*svar - ep*ep / n) / (n-1);
*sdev=sqrt (*svar);
if (*svar) {
s = (n*(*svar)*(*sdev));
if (s != 0) *skew /=s;
else *skew = 0;
s = (n*(*svar)*(*svar))-3.0;
if (s != 0) *curt = (*curt) / s;
else *curt = 0;
} else {
*skew = *curt = 0.0;
}
*median = 0;
if (n > 20000) return 0;

*median = (double)i_sort(data, n, 1);

return 0;

}

int        mean_sdev (
int        xp,
int        yp,
int        *xdata,
double     *xmean,
double     *xsdev,
double     *ymean,
double     *ysdev)
{
double     u_x1, a_x1;
int        mx, my,v,t,x,y,z, offset;
int        dif[256];

/* first calculate mean */
offset = 256 * yp;
x = y = 0;
for (z=0; z < 256; x += xdata[offset+z], z++);
for (z=0; z < 256; y += xdata[xp + (z*256)], z++);

mx = x / 256.;
*xmean = (double)mx;
my = y / 256.;
*ymean = (double)my;

/* now calculate standard deviation */
x = y = 0;
z=0;
while (z < 256) {
v = mx - xdata[offset+z];
x += v*v;
v = my - xdata[xp + (z*256)];
y += v*v;
z++;
}
*xsdev = x / 256;
*ysdev = y / 256;

return 0;
}

int lohi(
int     n,
int     *cv,
int     *lo,
int     *hi)
{
int        x;
int        lv, hv;

lv = 0x1fffff;
hv =0;
x=0;
while (x < n) {
if (cv[x] < lv) lv = cv[x];
if (cv[x] > hv) hv = cv[x];
x++;
}

*lo = lv;
*hi = hv;

return 0;
}

int        savegt (
ctab       *ctp,
double     dv1,
double dv2,
double dv3,
double dv4)
{

ctp->t0 = dv1;
ctp->t90 = dv2;
ctp->t135 = dv3;
ctp->t45 = dv4;
ctp->tave = (dv1 + dv2 + dv3 + dv4) / 4;

return 0;
}

int     gtput (
char    *prompt,
char    *fs,
ctab    *ctp,
FILE    *fstream)
{
char        str[256];
char        form[256];

fputs(prompt, fstream);
sprintf(form, "%s       %s    %s    %s    %s \n", fs, fs, fs, fs, fs);
sprintf(str, form, ctp->t0, ctp->t90, ctp->t135, ctp->t45, ctp->tave);
fputs(str, fstream);

return 0;

}

int     put_txfile(
FILE    *fstream)
{
char        str[256];

sprintf(str, "gray value moments:min:%u max:%u mean:%u\n",gt.min,gt.max, (int )gt.ave);
fputs(str, fstream);
sprintf(str, "moments:  adev:%.4f  sdev:%.4f  svar:%.4f  skew:%.6f  curt:%.6f \n",
gt.adev, gt.sdev, gt.svar, gt.skew, gt.curt);
fputs(str, fstream);

fputs("\n", fstream);
fputs("         --------------------------------------\n", fstream);
fputs("            0deg   90deg   135deg   45deg   ave\n", fstream);
fputs("         --------------------------------------\n", fstream);
gtput("xcentroid               ", FXF, &gt.xcentroid, fstream);
gtput("ycentroid               ", FXF, &gt.ycentroid, fstream);
gtput("low_frequency_coverage  ", F3F, &gt.low_frequency_coverage, fstream);
gtput("total_coverage          ", F3F, &gt.total_coverage, fstream);
gtput("corrected_coverage      ", F3F, &gt.corrected_coverage, fstream);
gtput("total_power             ", F3F, &gt.total_power, fstream);
gtput("relative_power          ", F3F, &gt.relative_power, fstream);
gtput("locus_length            ", FXF, &gt.locus_length, fstream);
gtput("locus_mean_density      ", FXF, &gt.locus_mean_density, fstream);
gtput("bin_mean_density        ", FXF, &gt.bin_mean_density, fstream);
gtput("containment             ", F3F, &gt.containment, fstream);
gtput("linearity               ", F3F, &gt.linearity, fstream);
gtput("linearity_strength      ", F3F, &gt.linearity_strength, fstream);

return 0;

}

int     texture(
char    *filename)
{
char        str[256];
int        pmx[256], pmy[256];
int        x,y,z,dx,dy,dz,sz,bpp;
int        accum, tmin, tmax;
int        tmin2, tmax2, yc;
int        *data;
int        mval0, mval90, mval135, mval45;
double  median, ave, adev, sdev, svar, skew, curt;
double  median2, ave2, adev2, sdev2, svar2, skew2, curt2;
int        *dm0, *dm90, *dm135, *dm45;
FILE       *fstream;
int        i0, i90, i135, i45, iave, n;
int        c0, c90, c135, c45, cave;
int        p0, p90, p135, p45, pave;
double     d0, d90, d135, d45, dave;
double     f0, f90, f135, f45;

/**************************************************************/
/* READ THE INPUT IMAGE, EXPECT IT TO BE 8-bit UNSIGNED INT   */
/* Mat type conversion is simple in openCV, try it later      */

Mat imageIn = cv::imread(filename);
dx = imageIn.rows;
dy = imageIn.cols;
unsigned char *pixels = imageIn.data;

cout << "dx" << dx << "dy" << dy << " elemSize() " << imageIn.elemSize() <<endl ;
data = (int *)malloc(dx * dy * 4);
if(data == 0)
{
cout << "mallocerror in texture()" <<endl ;
}
for(y=0; y < dy; y++) {
for(x=0; x < dx; x++) {
int pixel = (int )*(imageIn.ptr(x,y));
if(pixel > 255) { pixel = 255; }
data[(y * dx) + x] = pixel;
}
}

/**********************************************************/
/* PART 1 - get normal types of statistics from pixel data */

lmoment(data, sz, &median, &ave, &adev, &sdev, &svar, &skew, &curt);
lohi(sz, data, &tmin, &tmax);

gt.median = median;
gt.ave = ave;
gt.adev = adev;
gt.sdev = sdev;
gt.svar = svar;
gt.skew = skew;
gt.curt = curt;
gt.min = tmin;
gt.max = tmax;

fstream = fopen("SDMExtended.txt", "w");
if (fstream <= 0) {
cout << "#cannot create file" <<endl ;
return 0;
}

sprintf(str, "texture for object:     %s\n", filename);
fputs(str, fstream);
sprintf(str, "area:                   %u, %u \n", dx, dy);
fputs(str, fstream);

/**********************************************************/
/* PART 2 - calculate the 4 spatial dependencymatricies/* dm0   = (int *)malloc( 256*256*4 );
dm90  = (int *)malloc( 256*256*4 );
dm135 = (int *)malloc( 256*256*4 );
dm45  = (int *)malloc( 256*256*4 );
if ((dm0==0) || (dm90==0) || (dm135==0) || (dm45==0)) {
cout << "mallocerror in texture2" <<endl ;
return 0;
}

x=0;
while (x < 256*256) {
dm0[x] = dm90[x] = dm135[x] = dm45[x] = 0;
x++;
}

y=0;
while (y < dy-1) {
yc = dx * y;

x=0;
while (x < dx-1) {

dm0[ (data[yc + x]&0xff) + ((( data[yc + x + 1]  )<< 8)&0xff00) ]++;
dm0[ (data[yc + x + 1]&0xff) + ((( data[yc + x]  )<< 8)&0xff00) ]++;
dm90[ (data[yc + x]&0xff) + ((( data[yc + x + dx]  )<< 8)&0xff00) ]++;
dm90[ (data[yc + x + dx]&0xff) + ((( data[yc + x]  )<< 8)&0xff00) ]++;
dm135[ (data[yc + x]&0xff) + ((( data[yc + x + dx + 1]  )<< 8)&0xff00) ]++;
dm135[ (data[yc + x + dx + 1]&0xff) + ((( data[yc + x]  )<< 8)&0xff00) ]++;
dm45[ (data[yc + x + 1]&0xff) + ((( data[yc + x + dx]  )<< 8)&0xff00) ]++;
dm45[ (data[yc + x + dx]&0xff) + ((( data[yc + x + 1]  )<< 8)&0xff00) ]++;

x++;
}
y++;
}

/***************** CALCULATE TEXTURE METRICS ******************/

/* centroid/* pmx[0] = pmx[1] = pmx[2] = pmx[3] = 0;
pmy[0] = pmy[1] = pmy[2] = pmy[3] = 0;
i0 = i90 = i135 = i45 = 0;
y=0;
while (y < 256) {
x=0;
while (x < 256) {
z = x + (256 * y);
pmx[0] += (x * dm0[z]);
pmy[0] += (y * dm0[z]); i0 += dm0[z];
pmx[1] += (x * dm90[z]);
pmy[1] += (y * dm90[z]); i90 += dm90[z];
pmx[2] += (x * dm135[z]);
pmy[2] += (y * dm135[z]); i135 += dm135[z];
pmx[3] += (x * dm45[z]);
pmy[3] += (y * dm45[z]); i45 += dm45[z];
x++;
}
y++;
}
pmx[0] = pmx[0] / i0;
pmy[0] = pmy[0] / i0;
pmx[1] = pmx[1] / i90;
pmy[1] = pmy[1] / i90;
pmx[2] = pmx[2] / i135;
pmy[2] = pmy[2] / i135;
pmx[3] = pmx[3] / i45;
pmy[3] = pmy[3] / i45;
x = (pmx[0] + pmx[1] + pmx[2] + pmx[3]) / 4;
y = (pmy[0] + pmy[1] + pmy[2] + pmy[3]) / 4;

gt.xcentroid.t0 = pmx[0];
gt.ycentroid.t0 = pmy[0];
gt.xcentroid.t90 = pmx[1];
gt.ycentroid.t90 = pmy[1];
gt.xcentroid.t135 = pmx[2];
gt.ycentroid.t135 = pmy[2];
gt.xcentroid.t45 = pmx[3];
gt.ycentroid.t45 = pmy[3];
gt.xcentroid.tave = x;
gt.ycentroid.tave = y;

/* low frequency coverage */
i0 = i90 = i135 = i45 = 0;
c0 = c90 = c135 = c45 = 0;
x=0;
while (x < 256*256) {
if((dm0[x] != 0) && (dm0[x] < 3)) i0++;
if((dm90[x] != 0) && (dm90[x] < 3)) i90++;
if((dm135[x] != 0) && (dm135[x] < 3)) i135++;
if((dm45[x] != 0) && (dm45[x] < 3)) i45++;
if(!dm0[x]) c0++;
if(!dm90[x]) c90++;
if(!dm135[x]) c135++;
if(!dm45[x]) c45++;
x++;
}
d0 = (double)i0 / 0x10000;
d90 = (double)i90 / 0x10000;
d135 = (double)i135 / 0x10000;
d45 = (double)i45 / 0x10000;

savegt(&gt.low_frequency_coverage, d0, d90, d135, d45);

d0 = (double)c0 / 0x10000;
d90 = (double)c90 / 0x10000;
d135 = (double)c135 / 0x10000;
d45 = (double)c45 / 0x10000;

savegt(&gt.total_coverage, d0, d90, d135, d45);

d0 = (c0-i0) / (double)0x10000;
d90 = (c90-i90) / (double)0x10000;
d135 = (c135-i135) / (double)0x10000;
d45 = (c45-i45) / (double)0x10000;

savegt(&gt.corrected_coverage, d0, d90, d135, d45);

/* power */
i0 = i90 = i135 = i45 = 0;
c0 = c90 = c135 = c45 = 0;
p0 = p90 = p135 = p45 = 0;
y=0;
while (y < 256) {
z = y * 256;
x=0;
while (x < 256) {
n = x-y;
if(n < 0) n = -n;
if(dm0[x+z] != 0) { i0 += n; c0++;  }
if(dm90[x+z] != 0) { i90 += n; c90++; }
if(dm135[x+z] != 0) { i135 += n; c135++; }
if(dm45[x+z] != 0) { i45 += n; c45++; }
x++;
}
y++;
}
d0 =  (i0 / 0x10000);
d90 =  (i90 / 0x10000);
d135 =  (i135 / 0x10000);
d45 =  (i45 / 0x10000);

savegt(&gt.total_power, d0, d90, d135, d45);

d0 =  (i0 / c0);
d90 =  (i90 / c90);
d135 =  (i135 / c135);
d45 =  (i45 / c45);

savegt(&gt.relative_power, d0, d90, d135, d45);

/* locus density */
d0 = d90 = d135 = d45 = 0.0;
c0 = c90 = c135 = c45 = 0;
p0 = p90 = p135 = p45 = 0;
y=0;
while (y < 256) {
z = y * 256;
i0 = i90 = i135 = i45 = 0;
x=0;
while (x < 256) {
n = x-y;
if(n < 0) n = -n;
if((dm0[x+z] != 0) && (n < 7)) { c0++; p0 += dm0[x+z]; }
if((dm90[x+z] != 0) && (n < 7)) { c90++; p90 += dm90[x+z]; }
if((dm135[x+z] != 0) && (n < 7)) { c135++; p135 += dm135[x+z]; }
if((dm45[x+z] != 0) && (n < 7)) { c45++; p45 += dm45[x+z]; }

if((dm0[x+z] == 0) && (n < 7)) { i0++; }
if((dm90[x+z] == 0) && (n < 7)) { i90++; }
if((dm135[x+z] == 0) && (n < 7)) { i135++; }
if((dm45[x+z] == 0) && (n < 7)) { i45++; }

x++;
}
if(!i0) d0 += 1;
if(!i90) d90 += 1;
if(!i135) d135 += 1;
if(!i45) d45 += 1;
y++;
}

savegt(&gt.locus_length, d0, d90, d135, d45);

d0 = (p0/c0);
d90 = (p90/c90);
d135 = (p135/c135);
d45 = (p45/c45);

savegt(&gt.locus_mean_density, d0, d90, d135, d45);

/* density */
c0 = c90 = c135 = c45 = 0;
p0 = p90 = p135 = p45 = 0;
x=0;
while ( x < 256*256) {
if(dm0[x] != 0) { c0 += dm0[x]; p0++; }
if(dm90[x] != 0) { c90 += dm90[x]; p90++; }
if(dm135[x] != 0) { c135 += dm135[x]; p135++; }
if(dm45[x] != 0) { c45 += dm45[x]; p45++; }
x++;
}
d0 = c0 / p0;
d90 = c90 / p90;
d135 = c135 / p135;
d45 = c45 / p45;

savegt(&gt.bin_mean_density, d0, d90, d135, d45);

/* containment */
i0 = i90 = i135 = i45 = 0;
x=0;
while (x < 256) {
if(dm0[x]) i0++; if(dm0[256*256 - x - 1]) i0++;
if(dm90[x]) i90++; if(dm90[256*256 - x - 1]) i90++;
if(dm135[x]) i135++; if(dm135[256*256 - x - 1]) i135++;
if(dm45[x]) i45++; if(dm45[256*256 - x - 1]) i45++;

if(dm0[x*256]) i0++; if(dm0[(x*256)+255]) i0++;
if(dm90[x*256]) i90++; if(dm90[(x*256)+255]) i90++;
if(dm135[x*256]) i135++; if(dm135[(x*256)+255]) i135++;
if(dm45[x*256]) i45++; if(dm45[(x*256)+255]) i45++;

x++;
}

d0 = 1.0 - ((double)i0 / 1024.0);
d90 = 1.0 - ((double)i90 / 1024.0);
d135 = 1.0 - ((double)i135 / 1024.0);
d45 = 1.0 - ((double)i45 / 1024.0);

savegt(&gt.containment, d0, d90, d135, d45);

/* linearity */
i0 = i90 = i135 = i45 = 0;
c0 = c90 = c135 = c45 = 0;
y=0;
while (y < 256) {
z = y * 256;
if(dm0[z + y] > 1) { i0++; c0 += dm0[z+y]; }
if(dm90[z + y] > 1) { i90++; c90 += dm90[z+y]; }
if(dm135[z + y] > 1) { i135++; c135 += dm135[z+y]; }
if(dm45[z + y] > 1) { i45++; c45 += dm45[z+y]; }
y++;
}
d0 = (double)i0 / 256.;
d90 = (double)i90 / 256.;
d135 = (double)i135 / 256.;
d45 = (double)i45 / 256.;

savegt(&gt.linearity, d0, d90, d135, d45);

/* linearity strength */
d0 = (c0/(i0+.00001)) / 256.;
d90 = (c90/(i90+.00001)) / 256.;
d135 = (c135/(i135+.00001)) / 256.;
d45 = (c45/(i45+.00001)) / 256.;

savegt(&gt.linearity_strength, d0, d90, d135, d45);

/* WRITE ALL STATISTICS INgt. STRUCTURE TO OUTPUT FILE */
put_txfile(fstream);

/*  clip to max value 255 */
mval0 = mval90 = mval135 = mval45 = 0;
x=0;
while (x < 256*256) {
if(dm0[x] > 255)  dm0[x] = 255;
if(dm90[x] > 255)  dm90[x] = 255;
if(dm135[x] > 255)  dm135[x] = 255;
if(dm45[x] > 255)  dm45[x] = 255;
x++;
}

/******************************************************/
/* Convert data to unsigned char to write intopng/* unsigned char *dm0b   = (unsigned char *)malloc( 256*256);
unsigned char *dm90b  = (unsigned char *)malloc( 256*256);
unsigned char *dm135b = (unsigned char *)malloc( 256*256);
unsigned char *dm45b  = (unsigned char *)malloc( 256*256);
if((dm0b==0) || (dm90b==0) || (dm135b==0) || (dm45b==0)) {
cout << "mallocerror in texture3" <<endl ;
return 0;
}

x=0;
while (x < 256*256) {
dm0b[x] = (unsigned char ) (dm0[x] & 0xff);
dm90b[x] = (unsigned char ) (dm90[x] & 0xff);
dm135b[x] = (unsigned char ) (dm135[x] & 0xff);
dm45b[x] = (unsigned char ) (dm45[x] & 0xff);
x++;
}

/*
* write output to 4 quadrants:        0=0, 1=90, 2=135, 3=145
/* char outfile[256];

sprintf(outfile, "%s_SDMQUadrant_0deg_8UC1.png", filename);
Mat SDMQuadrant0(256, 256, CV_8UC1, dm0b);
imwrite(outfile, SDMQuadrant0);
sprintf(outfile, "%s_SDMQUadrant_90deg_8UC1.png", filename);
Mat SDMQuadrant90(256, 256, CV_8UC1, dm90b);
imwrite(outfile, SDMQuadrant90);
sprintf(outfile, "%s_SDMQUadrant_135deg_8UC1.png", filename);
Mat SDMQuadrant135(256, 256, CV_8UC1, dm135b);
imwrite(outfile, SDMQuadrant135);
sprintf(outfile, "%s_SDMQUadrant_45deg_8UC1.png", filename);
Mat SDMQuadrant45(256, 256, CV_8UC1, dm45b);
imwrite(outfile, SDMQuadrant45);

free(dm0);
free(dm90);
free(dm135);
free(dm45);
free(data);
free(dm0b);
free(dm90b);
free(dm135b);
free(dm45b);
fclose(fstream);

return 0;

}

int main (int argc, char **argv)
{
cout << "8-bit unsigned image expected as input" <<endl ;
texture (argv[1]);
return 0;
}