`

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
分享到:
评论

相关推荐

    commons-codec-android-1.15

    Base64是一种将二进制数据转换为可打印字符的方法,广泛应用于电子邮件、HTTP传输、图片编码等领域。Apache Commons Codec提供了Base64编码器和解码器,可以方便地将字节流或字符串进行Base64转换。在Android中,...

    Android-Android的感知哈希算法

    在Android开发中,感知哈希(Perceptual Hashing,简称pHash)是一种用于比较图像相似性的算法。这种算法能够生成一个简化的、固定大小的图像指纹,即使图像经过缩放、旋转或轻微修改,其生成的哈希值仍然相似。这种...

    Android-Free是一个Android4的torrent客户端

    总的来说,Android-Free是一款基于libtorrent的高效、功能丰富的Android 4 torrent客户端,它充分利用了libtorrent库的优势,为Android用户提供了一种便捷的P2P文件分享方式。对于开发者而言,研究Android-Free的...

    Android-reactnative弹幕插件android

    在Android开发中,React Native(简称RN)是一种流行的JavaScript框架,它允许开发者使用JavaScript和React来构建原生的Android应用程序。RN的优点在于可以跨平台开发,显著提高开发效率,同时保持与原生应用相似的...

    android--图像检索

    在Android平台上实现基于内容的图像检索,是一种技术挑战性较高的任务。这个项目主要涉及到了计算机视觉和图像处理领域,利用了OpenCV库的功能,尤其是在C++环境中进行开发。OpenCV是一个强大的开源计算机视觉库,...

    Android-Face-Recognition-MTCNN-FaceNet-master.zip

    MTCNN是用于人脸检测的一种高效算法,由三个部分组成:P-Net(Proposal Network)、R-Net(Refine Network)和O-Net(Output Network)。这三部分网络协同工作,首先在图像中快速定位潜在的人脸区域,然后进行精细化...

    基于android opencv图片相似度计算结构相似性感知哈希算法轮廓直线检测圆检测直线交点旋转角度矫正图像匹配灰度.zip

    在Android平台上,使用OpenCV库进行图像处理是一个常见的选择,特别是在进行高级图像分析任务时,如图片相似度计算、结构相似性检测、感知哈希算法、轮廓检测、直线和圆的识别、直线交点计算、图像旋转角度矫正以及...

    安卓手绘图片处理画板相关-直方图图片相似性三十张图片中选择最相似的十张图片显示出来.rar

    一种常见方法是使用直方图距离,如汉明距离(Hamming Distance)或切比雪夫距离(Chebyshev Distance),也可以采用更复杂的相似性度量如归一化的交叉相关(Normalized Cross-Correlation)或结构相似指数...

    三边定位算法-基于java使用三边定位算法实现的IBeacon定位项目.zip

    三边定位算法是一种常见的无线通信中用于确定物体位置的技术,尤其在室内定位系统中被广泛应用。该算法利用了信号传播时间(Time of Arrival, TOA)或者信号强度(Received Signal Strength Indicator, RSSI)来计算...

    基于资源签名的Android应用相似性快速检测方法.pdf

    摘要中提到的是一种针对Android应用相似性检测的新方法,该方法称为“基于资源签名的Android应用相似性快速检测方法”。由于盗版Android应用通常保留了正版应用的用户体验,因此检测这些相似应用的需求变得尤为重要...

    Python-一个python脚本用来压缩android项目的图片和查找相同的图片

    Python是一种强大的、面向对象的编程语言,被广泛用于各种领域,包括图像处理。在这个特定的项目中,我们有一个名为"Python-一个python脚本用来压缩android项目的图片和查找相同的图片"的工具,它专为Android开发者...

    基于andorid opencv实现图片相似度计算直方图峰值信噪比结构相似性感知哈希算法轮廓检测直线检测圆检测角点检测.zip

    - **感知哈希算法(Perceptual Hashing, pHash)**:这是一种将图像转化为固定长度哈希值的方法,通过比较哈希值的相似性来判断图像的相似性。即使图像有微小变化,pHash也能检测出来。 2. **轮廓检测**: - 在...

    Android代码-gesturelock

    在Android开发领域,手势解锁(Gesture Lock)是一种常见的用户验证方式,它允许用户通过画出预设的手势路径来解锁设备或应用。本项目“Android代码-gesturelock”旨在实现一个与Android原生解锁相似的功能,提供了...

    9. OpenCV进行图像相似度对比的几种办法 - zchang81的博客 - CSDN博客1

    峰值信噪比是一种衡量图像质量的客观指标,通过计算像素级别的均方误差来评估图像的相似性。PSNR越高,表示图像的失真程度越低。然而,PSNR并不完全符合人类视觉系统,对于某些情况下的图像失真判断可能与人眼感知...

    opencv4android3.0判断俩张图片是否一样

    在提供的"INTRUSIONDETECT"这个文件中,可能是包含了一个入侵检测系统的源代码或者示例,可能利用了上述的一种或多种方法来判断图片是否相同,以检测潜在的安全威胁。为了具体了解这个系统的工作原理和实现细节,...

    chess--android.zip

    Alpha-Beta剪枝是Minimax算法的一种优化形式,用于减少搜索树的深度。在决策树中,每个节点代表一个游戏状态,分支代表可能的走法。Minimax算法通过模拟所有可能的棋局发展,预测对手的最佳选择,但其效率较低,因为...

    jbig二值图像压缩算法编码实现

    **JBIG(Joint Bi-level Image Group)二值图像压缩算法是一种专为黑白图像设计的高效压缩标准,其第二版JBIG2则是这个领域的国际标准。本文将深入探讨JBIT2编码实现的关键技术和流程,以及在C++中的实现方法。** ...

    Android代码-ProguardDictionaryGenerator

    一种生成proguard字典的算法 为了保护我们的JAVA/Android代码,我们常使用proguard对代码进行混淆(http://proguard.sourceforge.net/)。 默认情况下,proguard混淆时将类/变量/方法重命名为a,b,c,...的格式。 我们可以...

Global site tag (gtag.js) - Google Analytics