算法
缩小尺寸。
将图片缩小到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
分享到:
相关推荐
一种生成proguard字典的算法 为了保护我们的JAVA/Android代码,我们常使用proguard对代码进行混淆(http://proguard.sourceforge.net/)。 默认情况下,proguard混淆时将类/变量/方法重命名为a,b,c,...的格式。 我们可以...
根据人体的运动学特征,提出一种基于三轴加速度传感器的人体跌倒行为的实时检测算法. 该算法通过提取运动时的超重强度、持续失重时间、倾斜角度、静止时间为特征值,在 Android智能手机上使用决策树进行实时处理....
简介:https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratioPSNR是最普遍和使用最为广泛的一种图像客
通过对常用字符识别算法的分析和比较,本文结合了模版匹配简单快速的特点,提出了一种基于使用改进的模版匹配进行字符识别的方法。通过给相应模版加高斯噪声的方法模拟现实拍摄环境中出现的照片模糊等现象,使用多...
为了有效地检测 Android 平台上的恶意软件,提出了一种基于敏感权限及其函数调用 流程图的静态综合检测方法.通过对恶意软件进行逆向工程分析,构建了包含恶意代码敏感权 限与函数调用图的特征库.并采用 Munkres ...
在静态分析部分,提取Androi d程序中的权限、API调用序列、组件、资源以及APK 结构构建特征向量,应用相似性度量算法,检测已知恶意代码家族的恶意代码样本;在动态分析部分,通过修改Androi d源码、重新编译成内核镜像,...
针对传统的Camshift算法在跟踪时需要手动定位目标,在颜色干扰、遮挡等复杂背景中容易跟丢目标的问题,提出了一种基于Camshift和Kalman滤波的自动跟踪算法。首先利用帧间差分法和Canny边缘检测法分割出运动目标的...
为了测试性能,我选择了一种简单的算法来从计算第n个质数,并用Java,C和Dart编写了相同的算法。 结果 该应用程序已在调试和发布模式下进行了测试。 发现在两种模式下,Java和C的结果都相似,但是Flutter却令人惊讶...
而Qt又是基于C++一种语言的扩展,大家都知道C++ 有快速、简易、面向对象等很多优点,所以Qt自然也继承者C++这些的优点。 Qt良好的封装机制使得Qt的模块化程度非常高,可重用性较好,对用户开发来货是非常方便的。Qt...
这些算法可用于检测和识别人脸,识别对象,对视频中的人为行为进行分类,跟踪摄像机的运动,跟踪运动的对象,提取对象的3D模型,从立体摄像机生成3D点云,将图像拼接在一起以产生高分辨率整个场景的图像,从图像...
模因匹配算法 Android应用程序可显示来自9个gag的连续模因流,并为他们提供喜欢和不喜欢模因的机会。 根据我们的喜好对视频流... 它是一种完整的社交网络,具有尚未探索的概念。 只是一些改变我们在线帖子体验的东西。
播放器必须以两种颜色的路径不相交的方式连接相似的颜色。 Playstore连结: 难度等级:中等 您可以在以下链接中观看该游戏的演示视频: 概述 首先,使用图像处理功能可以识别所有颜色及其位置。 解决了使用回溯算法...