- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
“随手拍”物品信息查询系统应用设计与实现.doc
“随手拍”物品信息查询系统应用设计与实现
摘要:本文利用图像识别技术的模式识别,设计了一种用于识别衣物品牌与型号的基于Android平台的物品识别软件。其在结构上总共分两大模块,即客户端板块和服务器板块,用户通过客户端拍取图片,将图片上传到服务器上,服务器自动截取图片,通过3轮识别,找到最相似的图片。
关键词:模式识别;图像识别;Android平台
中图分类号:G642 文献标志码:A 文章编号:1674-9324(2015)39-0238-02
一、引言
随着手机的发展,人们的生活也变得越来越便捷,但是在某些方面人们仍然会会遇到困难,比如说走在街上,看到街边行人身上漂亮的衣服,不知道其品牌,更不知道在哪儿能够买到。有些时候人们会选择一种方式,即先把别人穿的衣服拍下来,然后再去网上查找,或者去实体店查找。但是在偌大的市场上找到一件相似的衣服如同大海捞针。所以急需要物品识别的软件产生,帮助人们解决寻找喜欢的物品的难题。
二、系统的设计与实现
1.功能设计。本文所设计的基于Android平台的物品识别软件主要包括客户端和服务器两部分。客户端主要负责对衣服拍照并发送图片给服务器,服务器则负责接收数据后对图像进行识别,并将识别出的衣服的品牌和型号返还给客户端。
在Android客户端采用的C/S结构,如图1所示。客户端的作用是获取图片并发送给服务器。服务器的作用是获取客户端发送的图片,分别经过三轮的识别,得到图像的信息。用户与客户端的交互是通过Activity类完成的。服务端与数据库相连,实现图像的读取与识别。Android客户端与服务器端的数据交换是基于Socket实现的。
用户使用本文所设计的物品信息查询系统时,只需打开软件,点击识别,软件就可自动对图片进行截图,并将所截图片发给识别模块,分别进行三轮识别,具体的识别模块流程如图2所示。
2.系统的关键技术的实现。(1)自动截图的实现。据统计,有90%的人物图片的背景与目标图像的灰度值存在很大的不同,所以提取截图就是依托这种情况来得到目标图像的。具体实现如下:①把图像用灰度数组表示。创建一个行和列都和图像相同的整型的灰度数组,从左到右、从上到下依次扫描原图像的像素点,通过提取灰度值得函数,得到每一个像素点的灰度值,存进数组中。②得到平均灰度值。计算灰度平均值可以通过式(1)计算。
其中,size1为灰度数组的总的列数,size2为灰度数组总的行数,p[i][j]代表第i列,第j行的图像的灰度值,r为平均灰度值。③得到二值数组。求二值数组的目标是让背景取值为0,目标图像的取值为1。首先算出中间部分的平均灰度值,整幅图的平均灰度值大于中间部分的平均灰度值则令t1=0,t2=1;如果平均灰度值小于中间部分的平均灰度值则令t1=1,t2=0。建立行数,列数和灰度数组行数和列数相同的二值数组,从左到右,从上到下的扫描灰度数组,比较灰度值和整幅图的平均灰度值大小,如果灰度数组的灰度值大于平均灰度值,则把二值数组对应灰度数组的位置的值设置为t1,否则设置为t2。④求取截图的开始坐标和结束坐标。从左到右求取每一列的灰度数组的1占有每一列的长度的比例,如果比例大于10%则X1的值设置为列值;从右到左求取每一列的灰度数组的1占有每一列的长度的比例,如果比例大于10%则X2的值设置为列值;从上到下求取每一行的灰度数组的1占有每一列的长度的比例,如果比例大于60%则Y1的值设置为行值;扫描的终止位置离底部的距离不能超过(X2-X1)*3/2。如果描到这个位置,那么就设置Y1的值为这个行值。令底部的行值为Y,如果(Y-Y1)(X2-X1)*3/2,则Y2=Y1+(X2-X1)*3/2,否则Y2=Y。⑤截图。上一步得到了开始坐标(X1,Y1)和结束坐标(X2,Y2),可以创建出一个图像数组A[X2-X1][Y2-Y1],把原图在开始坐标和结束坐标内的图像数组存进该数组中,就得到了截图。(2)第一轮识别:颜色识别。本节主要讲述怎么通过识别颜色,来实现第一轮数据的获取。①获取图片。拍下的照片先把它转化为Android的Bitmap类,再把图片发送至服务器。服务器获取图片后先自动截图,获取目标图片。再通过BufferedImage类的getRGB()方法获取图像的像素数组。②获取图片的颜色二维数组。先做预处理,把颜色的3个向量的每一个向量分作6个组,得到216种颜色,用肉眼去区分不同的颜色,并按红橙黄绿青蓝紫和同一颜色颜色的深浅排序。把每一种颜色都映射到这一维数组上,实现3维数组向一维数组转换。以得到整张图片的颜色数组。③提取平均颜色并识别。通过得到的图像的颜色数组去算出颜色平均值,再与数据库中的颜色平均值所比较,得到与图像颜色平均值最近的前
文档评论(0)