算法

缩小尺寸。

将图片缩小到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 - 一种相似图片搜索算法的实现相关推荐

  1. android中图片圆角,Android中实现圆角图片的几种方法

    Android中实现圆角图片有多种姿势,不知你解锁了几种? 方法一:setXfermode法 此种方式就是再new一个相同尺寸的bitmap,然后使用paint.setXfermode(new Por ...

  2. Android 加载本地图片(文件管理器中的图片墙)

    Android 加载本地图片(文件管理器中的图片墙) --关于图片墙的一些感悟与疑问,希望大家共同探讨. (By伊叶也) 图片显示及监听 1.图片显示:基本上就5种显示形式(如果同时嵌入5种形式,采用 ...

  3. 【Android 安装包优化】Android 中使用 SVG 图片 ( Android 5.0 以下的矢量图方案 | 矢量图生成为 PNG 图片 )

    文章目录 一.Android 5.0 以下的矢量图方案 二.矢量图生成为 PNG 图片 三.完整的 build.gradle 构建脚本 四.编译效果 五.参考资料 一.Android 5.0 以下的矢 ...

  4. Android手机内存图片读取,有效解决Android加载大图片内存溢出的问题

    今天在交流群里,有人问我他经常遇到加载图片时内存溢出的问题,遇到的情况还是在自己的测试机或者手机里没有问题,做好了, 到了客户手机里就内存溢出了.其实有时候不同的手机和不同的系统对内存的要求不一样,尤 ...

  5. Android宫格动态列,Android实现宫格图片连续滑动效果

    本文给大家介绍如何在Android中实现宫格图片连续滑动效果. 在这之前,写过几篇关于在Android中实现滑动的效果,毕竟滑动效果在Andriod开发中也使用得比较频繁,有兴趣的朋友请查看我以前的文 ...

  6. Android 性能优化——之图片的优化

    Android 性能优化--之图片的优化 在Android性能优化中,我们会发现占内存最大的和对性能影响最大的往往是图片资源,其次是控件资源.相对来说,其他的资源的影响会小一点.这里我就先对图片资源的 ...

  7. Android开发之刷新图片到相册 | 刷新视频到相册的方法区分发广播刷新方法

    我们很多app会有保存图片和保存视频,保存成功后一般在最近文件或者相册就能看到了,这个需要我们在保存文件后自行刷新到相册中,以前老版本方法通过广播刷新方法在API29中已经废弃了无法使用,咱们提供了新 ...

  8. android图片保存形式,Android应用开发之Android ScrollView截图和图片保存到相册的方式...

    本文将带你了解Android应用开发之Android ScrollView截图和图片保存到相册的方式,希望本文对大家学Android有所帮助. 1.1首先来看你一种截取屏幕,这种代码有缺陷,只能截取一 ...

  9. [Android]使用ViewPager实现图片滑动展示

    在淘宝等电商的APP首页经常能看到大幅的广告位,通常有多幅经常更新的图片用于展示促销信息,如下图所示: 通常会自动滚动,也可以根据手势滑动.我没有研究过人家的APP是通过什么实现的,可能有第三方已经封 ...

  10. Android - 文字中显示图片

    Android TextView中显示图片的4种方式 转载于:https://www.cnblogs.com/qlky/p/7282658.html

最新文章

  1. linux esd转iso,window_Win10 TH2正式版10586官方ESD映像怎么转换成ISO镜像?,今天phpstudy分享了Win10 TH2(Build - phpStudy...
  2. FPGA之道(29)VHDL的串行语句
  3. MySQL服务器参数介绍
  4. 【bitset 技巧 分块】bzoj5087: polycomp
  5. 【单元测试框架unittest】
  6. 一篇小文带你走进RabbitMQ的世界
  7. Ethereum 开发简介
  8. html语言中%3c%%%3e中语言,[工学]C语言程序设计习题解答.doc
  9. centos8搭建k8s集群
  10. 你不了解PHP的10件事情!
  11. Centos 7安装RabbitMQ 3.7.8版本(单机版)-不使用RPM
  12. python语言的语法_PYTHON语言常用语法摘要
  13. different intergers
  14. 淘宝商品比价定向爬虫
  15. Model to Text工具Acceleo使用教程(七)——模板服务
  16. excel怎么平滑滚动_移动平均是啥玩意?移动平均线怎么画?|Excel128
  17. bmi计算器公式_bmi计算器免费版客户端
  18. nifi 安装 使用案例
  19. python网页登录验证码_15.Python实现识别登录验证码(入门)
  20. SpringBoot整合editormd富文本编辑器

热门文章

  1. Beyond Compare 报错 This license key has been revoked: 8454-8413
  2. shell学习笔记:变量篇
  3. 计算机在档案管理中的作用,计算机技术在档案管理应用中的必要性
  4. 小程序中图片的移动、旋转和缩放功能
  5. 蓝桥杯——六面体染色
  6. 2022中国汽车测试及质量监控博览会邀请函
  7. win7虚拟机_虚拟机VMware 15安装教程
  8. 文件备份云服务器,文件备份云服务器
  9. 查看oracle归档日志scn,Oracle 归档日志
  10. 2020年6月电子学会Python等级考试试卷(三级)考题解析