一种基于颜色统计和特征指纹的图片相似度计算方法

图片相相似度计算(Hash、SSIM、compareHist) 感知哈希算法(Perceptual hash algorithm) 那这种技术的原理是什么呢?根据Neal Krawetz博士的解释,原理非常简单易懂。我们可以用一个快速算法,就达到基本的效果。这里的关键技术叫做感知哈希算法(Perceptual hash algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。下面是一个最简单的实现: 第一步,缩小尺寸。将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片 阅读详情

一种基于颜色统计和特征指纹的图片相似度计算方法

1.摘要

图片相似度有很多实际应用,比如谷歌搜图、淘宝识物购买,现在很多类似应用已经使用神经网络训练实现,但是本文仅仅从图像处理角度出发,根据图像内容特征信息实现图片相似度计算。如题描述,我们将从颜色和内容信息两方面进行。

2.实现

本节内容将从原理、代码实现并结合应用效果介绍感知哈希算法和颜色分量统计算法

from math import sqrt
import numpy as np
import pandas as pd
import itertools

2.1.感知哈希算法

  1. 原理描述:结合离散余弦变换,将灰度图片所包含的特征生成一组指纹(哈希值),计算图片相似度即计算图片指纹的相似度。
  2. 关于离散余弦变换:灰度图是二维矩阵,由不同频率的成分组成。一般来说亮度变化小的区域是低频成分,它描述大范围的信息。而亮度变化剧烈的区域(比如物体的边缘)就是高频的成分,它描述具体的细节。由于大多数自然信号的能量都集中在余弦变换后的低频部分,可以舍弃信息含量更少的高频部分而提高计算效率,具体使用方法是离散余弦变换(DCT)。
  3. 具体步骤:
  • 简化色彩:BGR2GRAY;

  • 计算DCT:计算图片的DCT变换,得到32*32的DCT系数矩阵;

  • 缩小DCT:保留左上角的8*8的矩阵(最低频率);

  • 计算平均值:计算DCT的均值;

  • 计算hash值:根据8*8的DCT矩阵,设置0或1的64位的hash值,大于等于DCT均值的设为”1”,小于DCT均值的设为“0”。将得到的二维数组拉伸成一维,构成了一个长度为64位的向量,这就是这张图片的指纹;

  • 计算两张图片指纹,使用汉明距离计算相似度。

    结果并不能告诉我们真实性的低频率,只能粗略地告诉我们较于平均值频率的相对比例。只要图片的整体结构保持不变,hash结果值就不变。能够避免伽马校正或颜色直方图被调整带来的影响。

#均值哈希算法
def aHash(img):
    img=cv2.resize(img,(8,8),interpolation=cv2.INTER_CUBIC)
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    s=0
    hash_str=''
    for i in range(8):
        for j in range(8):
            s=s+gray[i,j]
    avg=s/64
    for i in range(8):
        for j in range(8):
            if  gray[i,j]>avg:
                hash_str=hash_str+'1'
            else:
                hash_str=hash_str+'0'            
    return hash_str

#差值感知算法
def dHash(img):
    img=cv2.resize(img,(9,8),interpolation=cv2.INTER_CUBIC)
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    hash_str=''
    for i in range(8):
        for j in range(8):
            if   gray[i,j]>gray[i,j+1]:
                hash_str=hash_str+'1'
            else:
                hash_str=hash_str+'0'
    return hash_str

# 感知哈希算法
def pHash(img):
    img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    img=cv2.resize(img,(32,32),interpolation=cv2.INTER_CUBIC)

    _ = np.array(img,np.float32)
    __ = cv2.dct(_)
    #取低频区域
    img_dct = __[:8,:8]

    #把二维list变成一维list
    img_list = []
    for i in img_dct.tolist():
        for j in i:
            img_list.append(j)
    
    #计算均值并哈希转换
    avg = sum(img_list)*1./len(img_list)
    hash_str = ''
    for i in img_list:
        if i > avg:
            hash_str=hash_str+'1'
        else:
            hash_str=hash_str+'0' 
    return hash_str
    
#Hash值对比
def compCode(code1,code2,length):
    num = 0
    for index in range(0,len(code1)):
        if code1[index] != code2[index]:
            num+=1
    return (1-(num / length))
# 感知哈希算法使用:
compCode(pHash(img_a),pHash(img_b),64)

2.2.颜色分量统计算法

  1. 原理描述:每张图片都有自己特定的颜色分布。将1600多万种颜色分为N个颜色区间,对每张图片,统计其每个颜色区间的像素个数,获得一组长度为N的向量。计算图片相似度即计算向量之间的相似度。
  2. 具体步骤:
  • 规整尺寸:resize(102410243);
  • 颜色分区:将RGB每个颜色通道均分为m个数值区间,共得到m的三次方(记为N)个颜色区间;
  • 统计每个颜色区间内的像素个数,获得向量;
  • 计算向量之间的相似度;
# 代码不贴了 有兴趣私聊

3.验证效果

感知哈希算法中,经过了余弦离散变化,图像内部信息的大都集中在低频区域,将计算重点缩小至该区域,但是仅仅对灰度图研究,丢失了颜色信息,而颜色分量统计算法从颜色角度出发,统计了整张图片的颜色分布情况,两种方法结合保证了相似度的准确性。

以下风景图(450×800×3)为例,记为img
Original

  • 将原图上下平均拆分
    img_up:225×800
    img_dn:225×800
  • 将原图左右比例拆分
    img_left:450×600
    img_right:450×600

感知哈希算法效果如下:
这里写图片描述

综合两种算法一起的效果如下:
这里写图片描述

参考:https://blog.youkuaiyun.com/haofan_/article/details/77097473?locationNum=7&fps=1

图像相似度对比分析软件,图像相似度计算方法 1、首先打开微信,选择底部“发现”。如图所示。2、然后在点击进入“小程序”。如图所示。3、然后输入“腾讯AI体验中心”搜索,点击进入。4、选择“人脸对比”。如图所示。5、上传两张图片上去,点击“人脸比对”。6、最后两个人的相似度就出来了。完成效果图。谷歌人工智能写作项目:神经网络伪原创AI发猫。图像相似度计算之哈希值方法OpenCV实现分类:OpenCVImageProcessing2014-12-2521:27180人阅读评论(0)收藏举报感知哈希算法(perceptualhashalgorithm),它 阅读详情

相关推荐

颜色直方图+余弦相似度 c++opencv实现

原理部分来自阮一峰博客 http://www.ruanyifeng.com/blog/2013/03/similar_image_search_part_ii.html 颜色分布法: 每张图片都可以生成颜色分布的直方图(color histogram)。如果两张图片的直方图很接近,就可以认为它们很相似。 任何一种颜色都是由红绿蓝三原色(RGB)构成的,所以上图共有4张直方图(三原色直方...

znHD的博客 4209

图片指纹技术检测图片相似度

每张图片都有一个指纹。正如人的指纹可以识别人,图片的指纹能识别图片。

zchang81的博客 7139

常见的图片相似度算法介绍

PSNR数值越大,表示图像的失真越小,即图像质量越好。在实际应用中,可以利用滑动窗将图像分块,令分块总数为N,考虑到窗口形状对分块的影响,采用高斯加权计算每一窗口的均值、方差以及协方差,然后计算对应块的结构相似度SSIM,最后将平均值作为两图像的结构相似性度量,即平均结构相似性SSIM。然而,PSNR并未考虑到人眼的视觉特性,如人眼对空间频率较低的对比差异敏感较高、人眼对亮度对比差异的敏感度较色度高,以及人眼对一个区域的感知结果会受到其周围临近区域的影响等因素,因此有时候评价结果与人的主观感觉不一致。

wwxsoft的专栏 6577

图像指纹算法终极指南:5种ImageHash技术快速掌握

图像指纹算法是现代图像处理中的核心技术,能够为每张图片生成独特的数字签名。ImageHash作为Python生态中最优秀的图像哈希库,提供了5种强大的图像指纹算法,帮助开发者快速实现图像相似性比较、重复图片检测等关键功能。本文将为初学者和普通用户详细解析这5种图像指纹算法的原理和应用场景。 ## 🔍 什么是图像指纹算法? 图像指纹算法是一种将图像转换为固定长度数字签名(哈希值)的技术。与传统

gitblog_00474的博客 1085

相似图片搜索原理

给定一张图片,怎样在互联网上找出和它近似的图片? 可以使用Google的相似图片搜索功能,匹配程度相当高。 那么,计算机是采用怎样的技术判定两张图片的相似程度的呢?方法有很多。 在这里,我们从图片的轮廓和色彩两方面入手,做一个简单的算法实现,重在原理呈现。 轮廓篇   图片的轮廓是判断图片相似性的最主要影响因素,那么怎样确定图片的主要轮廓呢?实际上,若将图

源码物语 3537

图片相似算法(1)

灰度了解: 灰度就是没有色彩,RGB色彩分量全部相等。如果是一个二值灰度图象,它的象素值只能为0或1,我们说它的灰度级为2。用个例子来说明吧:一个256级灰度的图象,如果RGB三个量相同时,如:RGB(100,100,100)就代表灰度为100,RGB(50,50,50)代表灰度为50。 彩色图象的灰度其实在转化为黑白图像后的像素值(是一种广义的提法),转化的方法看应用的领域而定,一般按加权的

FREEDOM 1万+

java指纹识别+google图片识别技术_源代码

demo下载地址:http://download.youkuaiyun.com/detail/chao2263263364/8795949 主类: [java] view plaincopy import java.awt.image.BufferedImage;   import java.util.ArrayList;   import java.

电量不足zZ 1769

Python图像相似度计算实战:从颜色直方图到深度学习特征

图像相似度计算是计算机视觉和多媒体检索领域的核心基础技术,其原理在于将图像内容转化为可度量的数学特征。从技术实现层面看,主要分为基于全局特征、局部特征和深度学习特征三大类方法。全局特征如颜色直方图和感知哈希(pHash),计算速度快,适用于快速初筛和精确匹配,但对图像裁剪、旋转等几何变化敏感。局部特征如SIFT和ORB算法,通过检测关键点并生成描述子,具备良好的尺度与旋转不变性,能应对复杂场景下的物体识别。基于深度学习的CNN特征向量则实现了语义级检索,利用预训练模型提取的高维向量能捕捉图像的深层语义信息。

weixin_33046983的博客 288

JAVA图片相似度判断(1)颜色分布法

每张图片都可以生成颜色分布的直方图(color histogram)。如果两张图片的直方图很接近,就可以认为它们很相似。 任何一种颜色都是由红绿蓝三原色(RGB)构成的,所以上图共有4张直方图(三原色直方图 + 最后合成的直方图)。 如果每种原色都可以取256个值,那么整个颜色空间共有16...

chisunxie2239的博客 1337

Windows 10/11 下用 Docker 一键部署 CVAT 标注工具(附 WSL2 配置指南)

本文详细指导如何在Windows 10/11系统上,通过配置WSL2和Docker Desktop,实现CVAT标注工具的一键部署。内容涵盖从环境准备、Docker安装、CVAT服务启动到性能优化与安全配置的全流程,为计算机视觉开发者提供稳定高效的本地标注平台解决方案。

weixin_28839601的博客 466

求助:有没有基于pscad的锂电池仿真模型

求助:有没有基于pscad的锂电池仿真模型 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变没有 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写...

qq_38922523的博客 1222

Google 图片搜索的原理是什么?

Google 图片搜索的原理是什么? 1 条评论  分享 按投票排序按时间排序 18 个回答 389赞同 反对,不会显示你的姓名 知乎用户,安全行业 XsXs、知乎用户、知乎用户 等人赞同 针对这个问题,请教了算法组的同事,他分享了基本的思路: 对于这种图像搜索的

凌风探梅的专栏 3751

ESP32、MicroPython、天问ASR-PRO,串口发送数据并播报

天问ASRPRO语音芯片内置脑神经网络处理器,支持DNN、TDNN、RNN等神经网络及卷积运算硬件运算,非软件运算,支持语音识别、声纹识别、语音增强、语音检测、单麦克风降噪增强、单麦克风回声消除、360度全方位拾音等功能。ASR-PRO可以图形化编程,降低开发难度,对小白友好。之前使用ASRPRO与ESP32进行过语音控制,这次由于一个项目需要对ESP处理过后的数据进行播报,就想到利用该模块。以下程序主要为测试代码,并非实际项目,仅供参考学习(若有错误,欢迎指正)。二者通过串口通信,波特率为9600。

weak_student的博客 5951

相似图片搜索的原理和实现——颜色分布法

#1,原理 每张图片都可以生成颜色分布的直方图(color histogram)。如果两张图片的直方图很接近,就可以认为它们很相似。 任何一种颜色都是由红绿蓝三原色(RGB)构成的,所以上图共有4张直方图(三原色直方图 + 最后合成的直方图)。 如果每种原色都可以取256个值,那么整个颜色空间共有1600万种颜色(256的三次方)。针对这1600万种颜色比较直方图,计算量实在太大了,因此

sophia_xw的博客 4278

滤波算法实现大全——基于匀速直线运动模型的kalman滤波算法

滤波算法实现大全——基于匀速直线运动模型的kalman滤波算法

jane0819的博客 523

基于深度学习的涂胶缺陷类型检测:数据集处理与YOLOv8模型实现

本文提出了一种基于YOLOv8深度学习的涂胶缺陷检测系统,针对断胶、溢胶、缺胶、气泡及胶条宽度异常等常见缺陷类型,实现了从数据采集到模型部署的完整解决方案。系统采用工业相机采集涂胶图像,通过多形态数据增强策略解决样本稀缺问题,利用YOLOv8框架实现高效检测。相比传统人工目检和规则式机器视觉方法,该系统在检测精度(mAP达97.5%)和实时性(单图检测耗时0.038秒)方面表现优异,可满足智能制造场景下的涂胶质量检测需求。

huanghm88的专栏 275

相似图片搜索的原理

你可以用一张图片,搜索互联网上所有与它相似的图片。点击搜索框中照相机的图标。 一个对话框会出现。 你输入网片的网址,或者直接上传图片,Google就会找出与其相似的图片。下面这张图片是美国女演员Alyson Hannigan。 上传后,Google返回如下结果: 类似的"相似图片搜索引擎"还有不少,TinEye甚至可以找出照片的拍摄背景。 ==============...

moonlightpeng的博客 1213

构建栅格地图matlab代码

1 使用MATLAB实现地图栅格化 效果图如下所示 图1 ...

qq_59747472的博客 4519

图片搜索的原理

http://www.zhihu.com/question/19726630 Google 图片搜索的原理是什么? 1 条评论 分享 按投票排序按时间排序 18 个回答 389赞同反对,不会显示你的姓名 知乎用户,安全行业 XsXs、知乎用户、知乎用户等人赞同 针对这个问题,请教了算法组的同事,他分享...

weixin_30485291的博客 1207

如何在MacBook上安装部署原生openclaw

本文介绍了在MacBook上安装OpenClaw的详细步骤:首先通过curl或国内镜像源安装nvm和Node.js(版本≥22),然后使用nvm安装Node.js 24并验证安装。接着通过脚本快速安装OpenClaw,完成安装后选择Qwen作为AI模型并进行OAuth认证。配置过程中可跳过联网搜索和Agent技能设置,最后选择Web界面作为呈现方式。安装完成后,系统会启动openclaw-gateway进程并打开Web界面,用户可通过简单的"hello"指令开始与AI对话。目前基础功能已

木简熙的博客 810

基于深度学习的智能监考系统(UI界面 + YOLOv8/v7/v6/v5代码 + 训练数据集)

行为检测与识别:能够自动识别考生在考试中的异常行为,如作弊、看手机、交头接耳等。实时监控:在考试期间,系统能够对考生的行为进行实时监控,及时发出警报。用户交互:通过简洁易用的UI界面,便于监考人员进行实时监控、查看警报和视频回放等操作。行为分析与反馈:系统能够识别出考生的违规行为,并提供反馈。本文详细介绍了如何构建基于YOLOv5的智能监考系统,从数据集的准备、YOLO模型的训练,到UI界面的设计与实现,展示了一个完整的深度学习监控系统。

YOLO 781

相似图片搜索的原理(二)

转:相似图片搜索的原理(二) 二年前,我写了《相似图片搜索的原理》,介绍了一种最简单的实现方法。 昨天,我在isnowfy的网站看到,还有其他两种方法也很简单,这里做一些笔记。 一、颜色分布法 每张图片都可以生成颜色分布的直方图(color histogram)。如果两张图片的直方图很接近,就可以认为它们很相似。 任何一种颜色都是由红绿蓝三原色(RGB)构成的,所以上图共有4张...

qq506930427的博客 292

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

相似图片搜索原理四(内容特征法)

说明:这里为阮一峰的一篇blog:http://www.ruanyifeng.com/blog/2013/03/similar_image_search_part_ii.html,其中颜色分布法就是颜色直方图的一种,我的上一遍blog阐述过了。 二年前,我写了《相似图片搜索的原理》,介绍了一种最简单的实现方法。 昨天,我在isnowfy的网站看到,还有其他两种方法也很简单,这里做一些笔

小村长技术blog 3213

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

感知哈希-图片相似度分析

‍本文作者是360奇舞团开发工程师引言最近在做小程序换肤功能,因为不同主题色的小程序对应了不同图片库,项目内图片引用的方式又是线上URL地址配置形式,新加一套图片时,就要将图片和线上URL链接对比之后,配置到对应的Key上。这么人工操作一遍后发现费时费力。因为不同图片库间主要是颜色差异,想着能不能通过图片相似度对比以后,自动将图片匹配对应的Key。最后研究了下,通过感知哈希实现了我的需求,记录一下...

奇舞周刊 1179

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

相似图片搜索、算法、识别的原理解析(下)

原文地址:http://www.36dsj.com/archives/3206 之前,我写了《相似图片搜索的原理》,介绍了一种最简单的实现方法。 昨天,我在isnowfy的网站看到,还有其他两种方法也很简单,这里做一些笔记。 一、颜色分布法 每张图片都可以生成颜色分布的直方图(color histogram)。如果两张图片的直方图很接近,就可以认为它们很相似。

jianzhanger的专栏 1万+

图片搜索引擎相似图片搜索的原理(二)

昨天,我在isnowfy的网站看到,还有其他两种方法也很简单,这里做一些笔记。 一、颜色分布法 每张图片都可以生成颜色分布的直方图(color histogram)。如果两张图片的直方图很接近,就可以认为它们很相似。 任何一种颜色都是由红绿蓝三原色(RGB)构成的,所以上图共有4张直方图(三原色直方图 + 最后合成的直方图)。 如果每种原色都可以取256个值,那么整个颜色空间共有...

iteye_13349的博客 298
上一篇: Python数据处理过程中一些方法记录
下一篇: 常用软件破解-持续更新
奥特曼不秃头
博客等级 码龄10年 24粉丝 24原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奥特曼不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值