图像处理库综述



转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com

AIQ 机器学习大数据 知乎专栏 点击关注

当需要做一些图像处理方面的学习和研究的时候,首要任务就是选择一套合适的图像处理类库,本文主要简单介绍下各家图像库的一些优缺点。OpenCV,Intel IPP,Halcon,MATLAB ,OpenGL,EmguCv,AForge.net,CxImage,FreeImage,paintlib,AGG,IPL,visDSK。不足之处,还请大家多多提建议,多谢!欢迎微信关注公众号“智能算法”,带您体验不一样的人生!


1. OpenCV

简介:OpenCV 全称是:Open Source Computer Vision Library。是 Intel®开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 是一个基于(开源)发行的跨平台计算机视觉库,可以运行在 Linux、Windows 和 Mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和一些 C++ 类构成,同时提供了 Python、Ruby、MATLAB 等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 用 C 语言编写,它的主要接口也是 C 语言,但是依然保留了大量的 C 语言接口。

OpenCV 功能

提供对图像数据操作,图像 / 视频的输入输出,基本图像处理,结构分析,摄像头定标,运动分析,目标识别以及基本的 GUI 等的函数接口。

OpenCV 模块

cv – 核心函数库;cvaux – 辅助函数库;cxcore – 数据结构与线性代数库;highgui – GUI 函数库;ml – 机器学习函数库

特点:

免费,源代码公开,是一个跨平台的中、高层 API 构成,它不依赖与其它的外部库,尽管也可以使用某些外部库。,为了完全独立于 IPL (INTEL 的图像处理库) OpenCV 复制了 IplImage 和其它一些结构变量的声明。

OpenCV 为 Intel® Integrated PerformancePrimitives (IPP) 提供了透明的用户使用接口。它对 IPP 不存在任何依赖。但如果安装了 IPP,那么 OpenCV 将会通过自动载入 IPP 动态链接库来获取 IPP 的优势,来提升速度。


2. Intel IPP

简介:IPP“Intel Integrated Performance Primitives” ( Intel IPP )是一套跨平台的软件函数库,

他提供了广泛的多媒体功能:音频解码器(例如: H263 、 MPEG-4 )、图像处理 (JPEG) 、信号处理、语音压缩(例如: G723 、 GSM 、 AMR )和加密机制。

Intel IPP 针对大量的 Intel Microprocessor (微处理器)进行优化: Intel Pentium 4 处理器,采用 Intel Centrino 移动运算技术的 Intel Pentium M 处理器组件, Intel Itanium 2 处理器、 Intel Xeon 处理器以及采用 Intel XScale 技术的 Intel PCA 应用处理器。采用一套跨平台结构的通用 API ,使用者除了不需要担心平台兼容性的问题,更节省了开发成本以及研发时间,使用者可以轻轻松松移植原有应用程序。

特点:

IPP 收费源代码不公开

函数库:信号处理,图像处理,多媒体,向量处理等

跨平台和 OS 的通用 API

高性能代码,不需要写汇编代码,获得优化的应用程序, 速度快,效率高。


3. Halcon

简介:德国 MVtec 公司的图像处理软件 HALCON,是世界公认具有最佳效能的机器视觉软件。它发源自学术界,有别于市面一些商用软件包。事实上,这是一套图像处理库,由一千多个各自独立的函数,以及底层的数据管理核心构成。其中包含了各类滤波、色彩分析以及几何、数学变换、形态学计算分析、校正、分类、辨识、形状搜索等等基本的几何以及图像计算功能,由于这些功能大多并非针对特定工作设计的,因此只要用得到图像处理的地方,就可以用 HALCON 强大的计算分析能力来完成工作。应用范围几乎没有限制,涵盖医学、遥感探测、监拎、及工业上的各类自动化检测。近年来,由于机器视觉技术的发展,这种可以”取代人眼”,对重复工作不会疲劳,精度高且稳定的特质,促进了高科技业的发展,例如电子业产量的大幅提升。而 MVTec 公司更是不断的与学术界合作,并且将最新的学术研究成果纳入其中,不但使自己的技术处于业界领导地位,同时也将机器视觉技术推向更高的境界。

机器视觉软件 HALCON 在世界范围内被广泛的使用,用户可以利用其开放式结构快速开发图像处理和机器视觉应用。

一个专业的图像处理工具不只包含一个图像处理函数库。图像处理任务的解决只是整个机器视觉解决方案的一部分,还包括处理控件和或者数据库连接等软件部分,图像获取及其照明等硬件部分。因此,图像处理系统简单易用,并且能活嵌入到开发项目中是非常重要的。Halcon 充分考虑到这些方面,它有如下的特点:

1). HALCON 包含了一套交互式的程序设计接口 HDevelop,可在其中以 HALCON 程序代码直接编写、修改、执行程序,并且可以查看计算过程中的所有变量,设计完成后,可以直接输出 C/ C++,或是 COM(visual basic) 程序代码,嵌入到应用程序程序中。

2). HALCON 不限制取像设备,可以自行挑选合适的设备。原厂己提供了 4 0 余种相机的驱动,即使是尚未支持的相机,除了可以透过指针 (pointer) 轻易的抓取影像,还可以利用 HALOCN 开放性的架构,自行编写 DLL 文件和系统连接。

3). 使用 HALCON 有最好的投资效益。这套软件支持的操作系统除了微软的 NT/XP/2000,还有 Linux, Solaris7,  181X6. 5, "1’ru64 UN1X5. 1 等等,当需要开发出一套系统,就可以轻易转换作业平台,以符合需求。为了加快速度,还可以使用多处理器的计算机,所编写的程序不必更动。

4). 使用 HALOCN,在设计人机接口时没有特别的限制,也不需要特别的可视化组件,可以完全使用开发环境下的程序语言,例如 Mircosoft Visual Studio 等等,架构自己的接口,最终用户看不到开发工具,而且在执行软件的机器上,只需要很少的资源。


**4. MATLAB **

简介:MATLAB 是美国 MathWorks 公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括 MATLAB 和 Simulink 两大部分。

MATLAB 可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

MATLAB 的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用 MATLAB 来解算问题要比用 C,FORTRAN 等语言完成相同的事情简捷得多,并且 MATLAB 也吸收了像 Maple 等软件的优点,使 MATLAB 成为一个强大的数学软件。在新的版本中也加入了对 C,FORTRAN,C++,JAVA 的支持。

特点:

1). 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;

2). 具有完备的图形处理功能,实现计算结果和编程的可视化;

3). 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;

4). 功能丰富的应用工具箱 ( 如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。

功能十分强大,正版软件价钱昂贵,适用于学术研究,仿真和演示。在软件开发,工程应用方面有一定的局限性。


5. OpenGL

OpenGL(全写 Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。

OpenGL 是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含 CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL™ 帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。

特点:

1). 与 C 语言紧密结合。

OpenGL 命令最初就是用 C 语言函数来进行描述的,对于学习过 C 语言的人来讲,OpenGL 是容易理解和学习的。如果你曾经接触过 TC 的 graphics.h,你会发现,使用 OpenGL 作图甚至比 TC 更加简单。

2). 强大的可移植性。

微软的 Direct3D 虽然也是十分优秀的图形 API,但它只用于 Windows 系统(现在还要加上一个 XBOX 游戏机)。而 OpenGL 不仅用于 Windows,还可以用于 Unix/Linux 等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL 的基本命令都做到了硬件无关,甚至是平台无关。

3). 高性能的图形渲染。

OpenGL 是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对 OpenGL 提供强力支持,激烈的竞争中使得 OpenGL 性能一直领先。

总之,OpenGL 是一个很 NB 的图形软件接口。至于究竟有多 NB,去看看 DOOM3 和 QUAKE4 等专业游戏就知道了。


6. EmguCv

EmguCV 是.NET 平台下对 OpenCV 图像处理库的封装。也就是 OpenCV 的.NET 版。它运行在.NET 兼容的编程语言下调用 OpenCV 的函数,如 C#、VB、VC++、IronPython 等。这个封装库可以在 Mono 下编译和在 Linux / Mac OSX 上运行。EmguCV 全部用 C# 编写 ,它可以在 Mono 环境里编 译,在 任何 Mono 支持的平台 (如 Linux, Solaris,MacOSX) 上 运 行 。EmguCV 的其他优势还有,支持通用颜色和深度的图像类,自动垃圾收集,可 XML 序列化的图像,XML 文档和 Intel license 支持, 自由选择图像类或 OpenCV 的 direct invoke 函数 ,图像象 素上的通用操作等。 也就是说 ,EmguCV 不仅继承了 OpenCV 的所有功能和特点 ,而且在跨平台支持方面也有更大的突破 。

将 OpenCv 的绝大部分功能都包装成了.net 类、结构或者枚举。不过文档不全,还是得对照 OpenCv 的文档去看才行。


7. AForge.net

AForge.NET 是一个专门为开发者和研究者基于 C# 框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器人等领域。

这个框架由一系列的类库和例子组成。其中包括的特征有:

AForge.Imaging - 一些日常的图像处理和过滤器

AForge.Vision - 计算机视觉应用类库

AForge.Neuro - 神经网络计算库

AForge.Genetic - 进化算法编程库

AForge.MachineLearning - 机器学习类库

AForge.Robotics - 提供一些机器学习的工具类库

AForge.Video - 一系列的视频处理类库(很方便)

纯.net 类库,接口简单,用起来很方便。


8. CxImage

CxImage 类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如 OpenIL,FreeImage,PaintLib 等等,它们可谓是功能强大,齐全,没必要用其它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚。在这点上,CxImage 类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部分是平台无关的,且用 C 语言写成,有的还夹杂着基本的 C++ wrapper 和成堆的编译选项的声明需要你去处理。而 CxImage 类库在这方面做得很好。作者完全公开了源代码。相对于那些封装好的图形库和 GDI+ 来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。


9. FreeImage

FreeImage 是一款免费的、开源的、跨平台 (Windows 、Linux 和 Mac OS X) 的,支持 20 多种图像类型的 (如 BMP 、JPEG 、GIF 、PNG 、TIFF 等) 图像处理库。其最大优点就是采用插件驱动型架构,具有快速、灵活、简单易用的特点,得到了广泛使用。

FreeImage 的主要功能有多格式位图的读写; 方便的位图信息获取; 位深度转换; 位图页面访问; 基本的几何变换和点处理; 通道合并与混合等。FreeImage 暂时不支持矢量图形和高级图像处理,位图绘制需要由用户来完成。

FreeImage 中的所有函数都以 FreeImage_ 开头,如图像文件的读写函数分别为 FreeImage_Load 和 FreeImage_Save 。FIBITMAP 数据结构保存着位图信息和像素数据,是 FreeImage 的核心。


10. paintlib

paintlib 是一个可移植的用于图像加载、保存和处理的 C 类库。可从 BMP, GIF, JPEG, PCX, PGM, PICT, PNG, PSD, TGA, TIFF 和 WMF 文件中加载图像,且可保存为 BMP, JPEG, PNG 和 TIFF 格式。既可通过在过滤器类中执行过滤, 也可通过直接访问位图来进行图像处理。提供了完整的 C 源码。


11. AGG

AGG,全名:Anti-Grain Geometry,是一个开源的、高效的 2D 图形库

AGG 是一个高效的、高质量的、开源的矢量图形库,类似的有:GTK+ 的 Cairo,Microsoft 的 GDI+。在三者中,AGG 的性能是最高的(不讨论 Skia 和 Direct2D,他们有 OGL 和 DX 的硬件加速,绘图速度根本不是一个档次的)。

特点:

AGG 的功能与 GDI+ 的功能非常类似,但提供了比 GDI+ 更灵活的编程接口,其产生的图形的质量也非常高,而且它是跨平台的,其宣传可以在非常多的操作系统上运行.

AGG 的功能

1). 支持 ALPHA、GAMMA 等变色处理,以及用户自定义的变色处理;

2). 支持任意 2D 图形变换;

3). 支持 SVG 和 PostScript 描述,适于网上图形生成;

4). 支持高质量的图形处理,支持反走样插值等高级功能;

5). 支持任意方式的惭变色处理;

6). 支持所有颜色格式;

7). 支持对位图的多种处理;

8). 支持直线的多种处理,类似于 GDI+;

9). 支持 GPC,即通用多边形裁剪方法;

10). 支持多种字体输出,包括汉字的处理;

效率高,质量高(有反锯齿),功能强大,跨平台和平台 GUI 支持,缺点:没有硬件加速,文档少,门槛略高。


12. IPL

Intel 的 IPL image library 虽然没有开源但是进行普通的图像处理非常好用,像拉布拉斯算子,索贝尔算子等等边缘提取和锐化的函数。 如果目标平台是 PC 机或者工控机又是 Intel 的 CPU,这是一个非常不错的选择。

现在已经没有 IPL 了,IPL 已经是 IPP 的一部分了,不过还是可以下载早期版本。IPP 的教育版 50$,不是很贵,集成大部分算法 1D signal processing, 语音信号处理;2D signal prodessing, image processing, video processing. Open CV 的模式将很类似于 IPL.

特点:

IPL 图象处理库,免费,起初开源,后来不开源。


13. visDSK

MICROSOFT 图像处理库,免费、开源。OpenCV 未出现时很受追捧,但是现在 visDSK 能做的 OpenCV 都可以做,在速度上,OpenCV 还有 Intel 公司的优化支持。visDSK 的时代已然成为过去。

参考文献:

http://wenku.baidu.com/view/e5dced5b90c69ec3d5bb75ba.html?from=search

http://wenku.baidu.com/view/11c961dcc1c708a1284a44bf.html?from=search

http://wenku.baidu.com/view/bd2fd40df12d2af90242e6d0.html?from=search

http://wenku.baidu.com/view/7b70e3afdd3383c4bb4cd211.html

http://wenku.baidu.com/view/7bacd7651ed9ad51f01df29b.html

http://wenku.baidu.com/view/59257440011ca300a6c3903a.html?from=search

http://wenku.baidu.com/view/21b46653ad02de80d5d84004.html?from=searc


更多高质资源 尽在AIQ 机器学习大数据 知乎专栏 点击关注

转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com