基于Java的相似图片搜索龚成清

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电脑开发与 应用
( 总 785) ·13·
基于 Java 的相似图片搜索
龚成清
( 广东女子职业技术学 院, 广州 511450)
摘 要: 相似图片搜索是当前搜索技术研究的一大热点。利用相似图片搜索的原理结合 Jav a 语言的技术特点, 对要进行搜索的 图片首先 进行图像变换缩小 尺寸, 然后 进行灰度化和二值化 的处理计算出对应 的哈希值形成 图片的指纹, 最后 计算出图片 指纹的 海明距离得出图片的相似度, 实现了一个简单快速的相似图片搜索模型。
3 基于 Java 的相似图片搜索的实现
Java 是一种可以撰写跨平台应用软件的 面向对 象的程序设计语言, Jav a 技术具有卓越的通用性、高 效性、平台移植性和安全性, 广泛应用于个人 PC、数据 中心、游戏控制台、科学超级计算机、移动电话和互联 网。本文利用 Java 的技术特点对相似图片的搜索进行 了实现。
Picit up 是一个 专业图片 搜索引 擎, 功 能非常 强 大, 并支持中文关键字的搜索。Picit up 主要支持关键 字的搜索, 但也可以通过上传图片进行相似图片的搜 索, 而且可以通过在搜索结果页选择过滤方式来筛选 图片, 比如可以按颜色、头像( 人脸) 、风景、产品 4 种类 别来过滤搜索结果。
1 常用的相似图片搜索引擎
当前, 相似图片搜索技术已经成为了科学界研究 的一个热点, 在科学家的努力下, 已经有比较成熟的相 似图片搜索引擎, 为搜索用户提供相似图片的搜索。常 见的相似图片搜索引擎有: 1. 1 Gazopa
Gazopa 是来自美国的一个全新的图片搜索引擎, 通过自动分析图像中的元数据, 例如, 颜色、形状等, 作 为搜索的关键数据, 形成图像的特征从互联网上搜索 相似的图像, 而不是依靠人为设置的文字描述来搜索。 Gazopa 可以通过关键字来搜索图片, 也可以通过图片
3. 5 计算哈希值
Str ingBuffer hashCode = new Str ingBuffer ( ) ; for ( int i = 0; i < co mps. leng th; i+ = 4) { / / 将上一步 的比 较结果, 组合 在一起, 就构 成了一 个 64 位的整 数, 这 就是 这张图片的指 纹。组合的次序并不重 要, 只要保 证所有图片都 采用同样次序就行了。
搜索图片, 还可以使用手绘图搜索图片, 甚至可以通过 视频缩略图搜索视频。 1. 2 Tineye
T ineye 是来自加拿大的一种新的在线图 片搜索 引擎, 它是第一个在网络上使用图像识别技术的图像 搜索引擎。利用 T ineye 可以发现图片的来源与相关信 息、研究追踪图片信息在互联网的传播、找到高分辨率 版本的图片、找到图片所在的网页和图片的不同版本 等。 1. 3 Picitup
性和对内容篡改的区分性, 并满足单向性、篡改定位性
等要求, 为图片内容的识别和认证提供了一种有效的
解决手段。
基于“感知哈希算法”相似图片搜素的实现步骤如
下:
2. 1 图像变换
为了简化图片的处理, 要对图像进行变换。最快速
地去除高频和细节, 只保留结构明暗的方法就是缩小
尺寸。将输入的图片缩小到 8×8 的尺寸, 总共 64 个像
( Percept ualhash algo rithm ) [ 1] , 它 是基于图片的感 知
内容, 将图片唯一地映射为一段数字摘要, 即对每张图
片 生成一个“指纹”( f ing erprint ) 字符串, 然后比较不
同图片的指纹, 比对的结果越接近, 就说明图 片越相
似。“感知哈希算法”具有对图片内容保持操作的鲁棒
数据。把这 64 位的二进制数据组合在一起, 就构成了 一个 64 位的字符串, 这就是这张图片的指纹。组合的 次序并不重要, 可以从左到右, 也可以从右到左, 或者 是用户自定义的顺序, 只要保证所有图片都采用同样 次序就行了。
按照上述方法, 对不同的图片计算“指纹”, 然后对 比不同图片的“指纹”, 统计 64 位二进制数中有不同的 位数。在理论上, 这等同于计算“海明距离”( H am ming distance) 。如果不相同的数据位不超过 5, 就说明两张 图片很相似; 如果大于 10, 就说明这是两张不同的图 片。
Key words: similar pict ure, search, hash, Java
关键词搜索的技术已经非常成熟, 但有些时候搜 索用户希望提供一张图片就可以找到相似的图片( 即 以图搜图, 顾名思义就是上传一张图片, 搜索并显示与 之类似的图片) 。因此, 相似图片搜索就应运而生了。
3. 4 图像二值化
int avg Pix el = Imag eHelper. aver age ( pix els) ; / / 计 算所 有 64 个像素的灰度平均值并设为阀值。
int[ ] com ps = new int[ w idth * heig ht ] ; for ( int i = 0; i < co mps. lengt h; i+ + ) { / / 比较像素的 灰度。将每个像素的灰度, 与平均值进行比 较。大于或等于平均 值, 记为 1; 小于平均值, 记为 0。 if ( pix els[ i] > = av gP ix el) { comps[ i] = 1; } else { comps[ i] = 0; } }
int result = comps[ i] * ( int ) M ath. po w( 2, 3) + comps [ i + 1] * ( int) M ath. pow ( 2, 2) + comps[ i + 2] * ( int ) M ath. po w ( 2, 1) + comps[ i + 2] ;
的功能一样强大。它可以通过关键字搜索图片, 也可以 通过上传图片搜索, 还可以通过拖动图片进行搜索, 具 有搜索精度高、速度快等优点, 深受用户的喜爱。
2 相似图片搜索的原理
不同的搜索引擎实现相似图片搜索的过程会有所
差别, 但根据 Neal Krawet z 博士的解释, 实现相似图
片 搜 素 的 关 键 技 术 叫 做 “感 知 哈 希 算 法 ”
素。这一步的作用是去除图片的细节, 只保留结构、明
暗等基本信息, 摒弃不同尺寸、比例带来的图片差异。
2. 2 图像的灰度化
彩色图像中的每个像素的颜色有 R、G、B 3 个分
量决定, 每一个像素点可以有 1 600 多万的颜色值, 需
要大量的存储空间, 不利于图像的快速处理, 因此必须
对缩小后的图片进行灰度化的处理, 转为 64 级灰度。
Abstract: T he sim ilar imag e search is a hot to pic in current sear ch t echnolo gy . T his pager uses t he principle of sim ilar image search and the t echnical charact eristics of t he Java language t o search t he similar images. Firstl y, it r educes t he original image’s size. T hen it proceeds t he g rayscale and binarizat ion t o calculat e t he hash value and produce the image ‘s fingerpr int . F inally it calculat es t he Hamming dist ance t o realize a sim ple and quick sim ilar imag e search model .
利用tineye可以发现图片的来源与相关信当前相似图片搜索技术已经成为了科学界研究息研究追踪图片信息在互联网的传播找到高分辨率的一个热点在科学家的努力下已经有比较成熟的相版本的图片找到图片所在的网页和图片的不同版本似图片搜索引擎为搜索用户提供相似图片的搜索
第 25 卷 第 10 期 文章编号: 1003-5850( 2012) 10-0013-02
y=
( 1)
0, f ( x ) < T
二 值化处 理常 用的 有中 值滤波 法[ 2] 、数 学形 态
法[ 3] 、图像平均法等。本文采用中值滤波法, 计算所有
64 个像素的灰度平均值作为阀值, 然后将每个像素的
灰度, 与平均值进行比较。大于或等于平均值, 记为 1;
小于平均值, 记为 0。
2. 4 计算哈希值 经过二值化处理后的图片将形成 64 位的二进制
第 25 卷 第 10 期
电脑开发与 应用
( 总 787) ·15·
基本信息, 摒弃不同尺寸、比例带来的图片差异。
3. 3 图像灰度化
int[ ] pix els = new int[ width * heig ht] ; for ( int i = 0; i < w idth; i+ + ) { for ( int j = 0; j < height ; j+ + ) { pix els[ i * heig ht + j] = ImageHelper . rg bT oG ray ( t humb. g etR GB( i, j) ) ; / / 将缩小后的图 片, 转为 64 级灰 度。 也就是说, 所有像素点总共只有 64 种颜色。 } }
* 收稿日期: 2012-06-03, 修回日期: 2012-09-05 * * 龚成清, 男, 1979 年生, 硕士, 讲师, 研究方向: 图像处理, 计算机应用技术。
·14· ( 总 786)
基于 Jav a 的相 似图片搜索
2012 年
1. 4 Google 相似图片搜索 Googl e 是世界著名的搜索引擎, 其相似图片搜索
{ hashCode = pr oduceF ing erP rint ( filename + " ex ample" + ( i + 1) + ". jpg " ) ; hashCo des. add( hashCode) ; }
3. 2 缩小图片尺寸
Buffer edI mage sour ce = Imag eHelper . r eadP N GImag e ( filename) ; / / 读取文件
关键词: 相似图片, 搜索, 哈希, Java 中图分类号: T P 391 文献标识码: A
Similar Image Search Based on Java Language
GONG Cheng -qing
( Guangdong W omen Poly technic, Guangz hou 511450, China)
也就是说, 所有像素点总共只有 64 种颜色。这样可以
大大节省存储的空间同时有效提高处理的速度。
2. 3 图像的二值化处理
图像经过灰度化处理后要进行二值化处理。图像
的二值化处理, 关键要设定一个公示如式( 1) :
1, f ( x ) ≥T
Str ing hashCode = null; Str ing so ur ceHashCo de = pro duceFing er Pr int ( filename + "sour ce . jpg ") ; / / 从指定 的目录下读 取要搜索 的图片, 并产 生对应的 “指纹” for ( int i = 0; i < 10; i+ + ) / / 从指定的目录下读取 10 张图片并产生对应的“指纹”
int w idth = 8; int heig ht = 8; Buffer edI mage thum b = ImageHelper . thumb ( sour ce , w idt h, heig ht, false ) ; / / 将图片 缩小到 8×8 的尺 寸, 总 共 64 个像素。这一步的作用是去除图片的细节, 只保 留结构、明暗等
按照“感知哈 希算法”相 似图 片搜 素的 原理, 在 Java 中实现相似图片搜索的关键代码如下: 3. 1 读取图片
L ist < Str ing > hashCo des = new Ar r ayL ist < St ring > ( );
Str ing filename = Imag eHelper. pat h + " \ \ images \ \ " ; / / 设置图片所在的路径
相关文档
最新文档