Android - 一种相似图片搜索算法的实现
算法
缩小尺寸。
将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
简化色彩。
将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。
计算平均值。
计算所有64个像素的灰度平均值。
比较像素的灰度。
将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
计算哈希值。
将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。
对比指纹
看看64位中有多少位是不一样的。在理论上,这等同于计算”汉明距离”(Hamming distance)。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。
实现关键点
计算灰阶
private static double calculateGrayValue(int pixel) {
int red = (pixel >> 16) & 0xFF;
int green = (pixel >> 8) & 0xFF;
int blue = (pixel) & 255;
return 0.3 * red + 0.59 * green + 0.11 * blue;
}
汉明距离
最终指纹其实是 0101 的二进制数字,举例
111000
111111
那么这两个数字的汉明距离,其实就是 ^ 运算后 1 的个数。
private static int hamDist(long finger1, long finger2) {
int dist = 0;
long result = finger1 ^ finger2;
while (result != 0) {
++dist;
result &= result - 1;
}
return dist;
}
源码
https://github.com/gavinliu/SimilarPhoto
参考资料
相似图片搜索的原理
- 大小: 126.9 KB
- 查看图片附件
Android - 一种相似图片搜索算法的实现相关推荐
- android中图片圆角,Android中实现圆角图片的几种方法
Android中实现圆角图片有多种姿势,不知你解锁了几种? 方法一:setXfermode法 此种方式就是再new一个相同尺寸的bitmap,然后使用paint.setXfermode(new Por ...
- Android 加载本地图片(文件管理器中的图片墙)
Android 加载本地图片(文件管理器中的图片墙) --关于图片墙的一些感悟与疑问,希望大家共同探讨. (By伊叶也) 图片显示及监听 1.图片显示:基本上就5种显示形式(如果同时嵌入5种形式,采用 ...
- 【Android 安装包优化】Android 中使用 SVG 图片 ( Android 5.0 以下的矢量图方案 | 矢量图生成为 PNG 图片 )
文章目录 一.Android 5.0 以下的矢量图方案 二.矢量图生成为 PNG 图片 三.完整的 build.gradle 构建脚本 四.编译效果 五.参考资料 一.Android 5.0 以下的矢 ...
- Android手机内存图片读取,有效解决Android加载大图片内存溢出的问题
今天在交流群里,有人问我他经常遇到加载图片时内存溢出的问题,遇到的情况还是在自己的测试机或者手机里没有问题,做好了, 到了客户手机里就内存溢出了.其实有时候不同的手机和不同的系统对内存的要求不一样,尤 ...
- Android宫格动态列,Android实现宫格图片连续滑动效果
本文给大家介绍如何在Android中实现宫格图片连续滑动效果. 在这之前,写过几篇关于在Android中实现滑动的效果,毕竟滑动效果在Andriod开发中也使用得比较频繁,有兴趣的朋友请查看我以前的文 ...
- Android 性能优化——之图片的优化
Android 性能优化--之图片的优化 在Android性能优化中,我们会发现占内存最大的和对性能影响最大的往往是图片资源,其次是控件资源.相对来说,其他的资源的影响会小一点.这里我就先对图片资源的 ...
- Android开发之刷新图片到相册 | 刷新视频到相册的方法区分发广播刷新方法
我们很多app会有保存图片和保存视频,保存成功后一般在最近文件或者相册就能看到了,这个需要我们在保存文件后自行刷新到相册中,以前老版本方法通过广播刷新方法在API29中已经废弃了无法使用,咱们提供了新 ...
- android图片保存形式,Android应用开发之Android ScrollView截图和图片保存到相册的方式...
本文将带你了解Android应用开发之Android ScrollView截图和图片保存到相册的方式,希望本文对大家学Android有所帮助. 1.1首先来看你一种截取屏幕,这种代码有缺陷,只能截取一 ...
- [Android]使用ViewPager实现图片滑动展示
在淘宝等电商的APP首页经常能看到大幅的广告位,通常有多幅经常更新的图片用于展示促销信息,如下图所示: 通常会自动滚动,也可以根据手势滑动.我没有研究过人家的APP是通过什么实现的,可能有第三方已经封 ...
- Android - 文字中显示图片
Android TextView中显示图片的4种方式 转载于:https://www.cnblogs.com/qlky/p/7282658.html
最新文章
- linux esd转iso,window_Win10 TH2正式版10586官方ESD映像怎么转换成ISO镜像?,今天phpstudy分享了Win10 TH2(Build - phpStudy...
- FPGA之道(29)VHDL的串行语句
- MySQL服务器参数介绍
- 【bitset 技巧 分块】bzoj5087: polycomp
- 【单元测试框架unittest】
- 一篇小文带你走进RabbitMQ的世界
- Ethereum 开发简介
- html语言中%3c%%%3e中语言,[工学]C语言程序设计习题解答.doc
- centos8搭建k8s集群
- 你不了解PHP的10件事情!
- Centos 7安装RabbitMQ 3.7.8版本(单机版)-不使用RPM
- python语言的语法_PYTHON语言常用语法摘要
- different intergers
- 淘宝商品比价定向爬虫
- Model to Text工具Acceleo使用教程(七)——模板服务
- excel怎么平滑滚动_移动平均是啥玩意?移动平均线怎么画?|Excel128
- bmi计算器公式_bmi计算器免费版客户端
- nifi 安装 使用案例
- python网页登录验证码_15.Python实现识别登录验证码(入门)
- SpringBoot整合editormd富文本编辑器