HIPI介绍

要想完成图像处理,首先要将图像文件存储于HDFS系统中。Hadoop默认处理的是大数据的文本文件[[ii]],而图像文件保存和处理方式与普通文件不一样,Hadoop没有自带图像处理接口。而且Hadoop框架很适合大文件的操作,而我们平时使用的图片的文件都比较小,如果这种小文件不经过处理直接上传,会十分影响性能。

HIPI[[iii]]是基于Hadoop MapReducede平台的一个大型的图像处理和计算机视觉库。它的设计是为了使大型的图像处理变得简单,提高图像处理的效率。HIPI由弗吉尼亚大学(The University of Virginia)的Chris Sweeney等人编写。它提供了用于在分布式计算环境中执行图片处理任务的API,用于合并及切割图像文件。

HIPI中提供了图像的数据类型、文件输入格式和片段读取方式,HIPI中最基本的类是HipiImageBundle类、FloatImage类和CullMapper类。HIPI使用的输入类型被称为HipiImageBundle(HIB)[[iv]]。 ImageHeader和FloatImage分别是一个图像文件的元数据信息和数据信息,ImageBundleInputFormat和ImageBundleRecordReader分别是文件的输入格式和片段读取方式。


为了提高某些程序的效率,HIPI允许用户指定一个挑选功能,剔除不符合标准的图像,如大于1000万像素的图像。如上图所示,用户指定的CullMapper类,然后调用该函数对每个测试图像进行挑选。用户可以在安装过程中通过HipiJob对象修改图像处理的执行参数,并以此来修改MapReduce过程。

基于HIPI的图像处理实现

4.1 上传

通过MyAddImage.java在HDFS上新建一个HipiImageBundle hib,并将本地文件夹下所有图片通过文件遍历方法(共123.5M,297项)上传,合并为一个hib文件,生成test.hib(2.4K)和test.hib.dat(117.8M)(图4-2中input文件夹下)。hib文件是所有图像的元数据信息,而hib.dat文件是图像数据。 该方法实现代码如下:

public static void ReadAllFile() throws IOException {

       Configuration conf=newConfiguration();

       HipiImageBundle hib=newHipiImageBundle(newPath("hdfs://210.31.181.211:9000/input/test.hib"), conf);

       hib.open(AbstractImageBundle.FILE_MODE_WRITE,true);

       File f = null;

       f = newFile("/home/hadoop/input/test/");

       File[] files =f.listFiles();

       List<File> list = newArrayList<File>();

       for (File file : files) {

              FileInputStreamfis=new FileInputStream(file);

              hib.addImage(fis,ImageType.JPEG_IMAGE);

       }

4.2 HIB文件转换为图像束文件


设置CreareSequenceFile.java运行的输入路径和输出路径,参数有两个,第一个参数为待转换的hib文件路径, 第二个参数为输出路径。使用CreareSequenceFile.java将上一步生成的hib文件(117.8M)转换成SequenceFile文件(39.9M,图4-2中part-r-00000)。

4.3 灰度处理

通过Img2Gray.java可以处理SequenceFile文件,输入有三个参数,第一个参数为输入文件路径,第二个参数是输出文件路径,输出文件为jpg格式,第三个参数是输入文件的格式。可以处理四种格式的图像文件:hib、har、small_files、sequence。运行该程序得到经过灰度处理并且用hashcode存储的jpg文件,这一步通过convert(FloatImage.RGB2GRAY)和hashCode()实现。输出的文件名为 hashCode + ".jpg"。将上一步生成的图像束文件进行灰度处理,处理结果及比较如表4-1所示。

4.4 下载

运行Downloader.java可以从互联网下载图片,输入三个参数,第一个参数是存有待下载图片URL的文本文件,第二个参数是输出路径,下载的图像文件合并后将存放在这个文件夹,第三个参数是参与下载任务的节点数。该过程分四步完成:首先,指定图像下载列表;其次,将待下载的RUL分成几组,并发送给Mapper;然后集群从互联网下载图像;最后将图像存储为HIPI图像束。

4.5 HIB文件转换为jpg文件

运行JpegFromHib.java,输入有两个参数,第一个参数是hib文件的路径,第二个参数为jpg文件的输出路径



[2] 余松煜,周源华,张瑞.数字图像处理[M].上海:上海交通大学出版社.2007.

[3] 张学浪.基于Hadoop的海量图像检索关键技术研究[D].西北农林科技大学.2013.

[4] Chris Sweeney,Liu Liu ,Sean Arietta等.HIPI: A Hadoop ImageProcessing Interface for Image-based MapReduce Tasks[EB/OL]. http://cs.ucsb.edu/~cmsweeney/papers/undergrad_thesis.pdf.2014.5

[5] HIPI.http://hipi.cs.virginia.edu.2014.5

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值