Python高级图像处理–反向图片搜索

David 9 博客没有专门分享过机器视觉,或者图像处理的文章,但是,上周2016年计算机识别大会(CVPR 2016)在拉斯维加斯举办了,借着这个契机我们分享一篇好文:Advanced Image Processing with Python ,希望大家喜欢。

建立图像处理搜索引擎不是一项简单的工作。 有太多的概念,统计,想法和技术需要深入。其中一个重要的图像处理概念是“反向图片查询” (RIQ) 或者说“反向图片搜索”。 谷歌,Cloudera,Sumo Logic和Birst是一些使用RIQ的知名组织。RIQ提供了好的方法去分析图像,并且利用数据挖掘。

知名公司和反向图片搜索

许多公司使用RIQ来达成他们的需求。比如Pinterest在2014年首次引入基于图像的搜索。随后在2015年出了白皮书展示架构。反向图片搜索使得Pinterest能够从时尚对象获得图像特征,并且展示相似产品推荐。

众所周知,谷歌反向图片搜索使得用户可以上传一张图片,然后搜索类似图片。上传的图片经过分析和模型计算。图片与成千上万的图片做对比然后匹配返回结果。

这里是一张来自OpenCV2.4.9的特征对比报告:

search-engine-graph

算法和Python库  

在我们开始工作前,让我们来看看Python图像处理搜索引擎的主要元素。

专利算法

SIFT(Scale-Invariant Feature Transform)弹性不变特征转换算法

  1. 专利收费算法,可以用图片识别器识别相似图片,甚至可以从不同角度,尺寸,深度和拉伸识别搜索结果。在这里你可以查看详细视频。
  1. SIFT在一个大的数据库特征上非常多的图片都正确地达到了一定搜索精度。

  1. 对相似图片的不同视角和不变特征的获得,是SIFT的另一个特点。在这里你可以读到更多的弹性不变算法重点。

SURF (Speeded Up Robust Features) 加速鲁棒性特征算法

  1. SURF 也是一个要付费的算法,是一个更快的SIFT版本。与SIFT不一样的是,SURF用盒子过滤来估计高斯拉普拉斯算子

  1. SURF 依赖Hessian矩阵来计算方位和伸缩。.

  1. 旋转不变性在很多应用中并不是必要的,所以不需要找到方向,加快了处理速度。

  1. SURF 包括了一些加快处理速度的几个特性。比SIFT快3倍,SURF在旋转和模糊识别上很出众。但是在灯光和视角上识别上,不那么出众。

  1. Open CV也提供了SURF功能。SURF.compute() 和 SURF. Detect()可以用来获得找到描述和关键点。在这里可以读到更多有关SURF。

    开源算法

    KAZE算法

    1. KAZE是一个开源2D的在非线性空间上的多尺度和新颖的特征提取和描述算法。 高效的AOS累加处理分隔和变量传导传播用来构建非线性尺度空间。

    1. 多尺度图片处理基础很简单–在过滤原始图片时构建一个图片的尺度空间,使用对的方法加强时间和尺度。

AKAZE (Accelerated-KAZE) 加速KAZE算法

  1. 正如名字描述的那样,这个算法搜索和匹配速度比KAZE算法快。AKAZE使用一个二元描述符和非线性尺度空间平衡精确度和速度。

BRISK (Binary Robust Invariant Scalable Keypoints) 二元鲁棒非变化可伸缩关键点算法

  1. BRISK擅长描述,关键点检查和匹配。

  1. 这个算法适应性很强,尺度空间的快速检查,加上字节串描述器,加速了搜索速度。

  1. 尺度空间的关机键点检测和关键点描述,帮助了优化性能。

FREAK (Fast Retina Keypoint)快速视网膜关键点算法

  1. 这是一个新颖的由人眼结构启发的关键点监测算法。一个比特串分层计算对比图像的密集度。相对BRISK, SURF and SIFT,FREAK算法允许使用更少内存快速计算。

ORB (Oriented FAST and Rotated BRIEF) 方向FAST和旋转BRIEF算法

  1. 比特描述器,ORB能够抵抗噪音和旋转不变性。ORB在FAST关键点监测器和BRIEF描述器的基础上构建,拥有低开销和好的性能。

  1. 除了快速和精确的方向组件,高效地计算方向的BRIEF,分析变量和BRIEF协同关系的作用也是ORB的特性之一。

Python 工具库

Open CV

  1. OpenCV 对学术研究和商业使用都是适用的。这是一个开源的机器学习和计算机视觉库,OpenCV使得我们能简单地使用和修改代码。

  1. 超过2500个优化过的算法,包括较成熟的机器学习和计算机视觉算法包括人脸检测,物体识别,镜头移动追踪,在数据库中找到相似图像,跟踪眼睛运动,场景识别,等等。

  1. 一流企业如Google,IBM,雅虎,索尼,本田,微软和因特尔都广泛地使用了OpenCV。

  1. OpenCV 可以使用Python,Java,C,C++和MATLAB接口,并且支持Windows,Linux,Mac OS和Android。

Python Imaging Library (PIL) Python图片处理库

  1. PIL Python图片处理库支持多种文件格式。PIL在python解释器中加入了图片处理功能。
  1. 标准的图片控制功能包括了图片加强化,透明化,遮盖处理,图像过滤,单个像素控制,等等。

如需更详细的统计图表,请查看OpenCV 2.4.9特性报告(需翻墙)。

构建一个图片搜索引擎

图片搜索引擎可以从已有图片库中找出相似图片。最常见的是Google有名的图片搜索引擎。对于新手,有很多方法去构建一个这样的系统。比如:

  1. 使用图像抽取,图像描述抽取,元数据抽取,和搜索结果抽取,来构建图片搜索引擎。
  1. 定义你的图片描述器,数据索引,定义相似量,然后搜索并评估。
  1. 选择需要搜索的图片,选择需要进行搜索的目录,在目录中搜索所有图片,创建图片特征索引,评估搜索图片的共同特征,在搜索中获得匹配图片。

我们的方法基本上是从比较图片灰度开始的,慢慢再使用复杂的特征匹配算法比如SIFT和SURF,最后沉淀到开源解决方案如BRISK。所有这些算法提供了有效的结果和较小的性能损失。很多图像数据分析,物体检测等应用都用到了这些算法。

例子:一家IT公司需要为一位客户构建图片搜索引擎。所以,如果一个品牌图片上传到 搜索引擎,所有关联的品牌图片在搜索结果中出现。搜索结果可以别用户用来分析,允许用户在每个地域地点评估品牌流行度。这个应用场景还没有在RIQ反向图片搜索领域中有过深入的探索。

 

翻译自:Advanced Image Processing with Python 

发布者

David 9

邮箱:yanchao727@gmail.com 微信: david9ml

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注