开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1837|回复: 162
打印 上一主题 下一主题
收起左侧

[易语言纯源码] 基于感知哈希(pHash)的图片相似度对比源码,支持有干扰的图

  [复制链接]
结帖率:100% (6/6)
跳转到指定楼层
发表于 4 天前 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   天津市天津市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 山顶小雪球 于 2025-12-8 22:46 编辑


简介

在数字图像处理时快速准确地识别相似图像是一个具有重要实际价值的技术。传统像素级对比方法在面对尺寸调整、格式转换或轻度编辑的图像时往往表现不佳,这里我们将使用基于pHash(感知哈希)技术开发的图像相似度比对算法。

特点

  • 计算效率高,处理图像~20ms/图 (512×512)
  • 内存占用小,单图哈希值仅需64bit位存储 (本可以是这样的,但易语言无符号处理有些困难,我这里改用64字节储存)
  • 鲁棒性较强,基于DCT的低频特性,对噪声、格式、轻度编辑有良好适应性。
  • 简单依赖少,不依赖深度学习框架,无大量参数需要调优。
  • 确定性输出,相同输入永远产生相同哈希,适合需要可重复性的场景。

局限性

  • 语义理解能力弱,语义相关但视觉差异大如不同品种的猫、相同物体不同背景。
  • 对几何变换敏感,图像旋转、透视变换、镜像翻转、大幅裁剪时相似度会急剧下降。

系统架构

输入层:图像预处理

处理引擎:pHash计算

比对核心:汉明距离计算

结果输出

什么是感知哈希

pHash(Perceptual Hash)是一种基于图像感知内容的哈希算法,它将图像转换为“指纹”字符串。与加密哈希不同,感知哈希的关键特性是:相似的图像会产生相似的哈希值,这一特性使其成为图像相似度检测的理想工具。

基本原理

  • 缩放尺寸

    统一调整为32×32像素(去除尺寸差异影响)

  • 灰度化处理

    转换为灰度图像(降低颜色干扰)

  • 离散余弦变换(DCT)

    DCT是一种特殊的傅立叶变换,将图片从像素域变换为频率域,并且DCT矩阵从左上角到右下角代表越来越高频率的系数。

  • 计算哈希值

    选取左上角8x8的矩阵,计算矩阵均值,将每个系数与均值比较并生成64位二进制哈希值

核心算法

离散余弦变换(Discrete Cosine Transform,简称DCT)是一种将信号从空间域转换到频率域的数学工具。简单来说,它能把一张图片分解成不同频率的"成分",就像把一首复杂的音乐分解成不同频率的音符一样。图像的主要视觉信息通常集中在低频部分(大面积的色块、主要轮廓),而高频部分(细节、噪声、纹理)对人类的视觉感知影响较小。
DCT恰好能:

  • 分离出图像的低频成分
  • 对光照变化不敏感
  • 对压缩和轻微噪声有鲁棒性

基本公式:

F[u][v] = C(u) * C(v) * 
          求和(m=0到M-1) 求和(n=0到N-1) 
          f[m][n] * 
          cos(π * u * (2m+1) / (2M)) * 
          cos(π * v * (2n+1) / (2N))

其中:

  • f[m][n]是原始图像在位置(m,n)的像素值
  • F[u][v]是变换后的频率系数
  • u、v是频率索引(0到M-1,0到N-1)
  • C(u)的定义:
    当u=0时,C(u) = sqrt(1/M)
    当u>0时,C(u) = sqrt(2/M)
  • C(v)同理

优化处理

预处理余弦表

DCT计算涉及大量的三角函数运算,为提高计算效率,我们预先计算并存储了32×32的余弦表。
预计算避免了在每次图像处理时重复计算三角函数,将DCT计算复杂度从O(N4)降低到O(N2),使计算效率提升约40%。

预处理归一化系数

在DCT变换后,为了确保结果的标准化,我们引入了归一化系数。归一化系数的计算基于DCT的逆变换性质,确保正变换和逆变换的一致性。

基于预处理余弦表和归一化系数,DCT计算可以表示为:

F(u,v)=NormCoeff[u,v]×∑ x=0​∑ y=0​f(x,y)×CosTable[x,u]×CosTable[y,v]

相似度评估的数学原理

图像相似度通过汉明距离评估:

HammingDistance=∑ i=0​∣hash​[i]−hash​[i]∣

汉明距离越小,图像越相似。

我们可以使用汉明距离量化图像相似度:

相似度 = 1 - (汉明距离 / 64)

当汉明距离为0时,相似度为100%;距离越大,相似度越低。

结语

基于pHash的图像相似度比对在保持高效率的同时还有不错的准确度。之后我会再基于这一篇的内容,继续开发根据视频相似度查找相同视频文件的项目(其实最开始就是为了删掉电脑里重复的视频才开始写的这个:-) ),届时也会在论坛开源。

源码下载


游客,如果您要查看本帖隐藏内容请回复

点评

图片反转或裁剪小图能有相似度吗?   四川省*  发表于 3 天前

评分

参与人数 13好评 +5 精币 +19 收起 理由
cbl521ysys + 1 感谢分享,很给力!~
恒大大 + 1 感谢分享,很给力!~
文西哥 + 1 感谢分享,很给力!~
xhping + 1 感谢分享,很给力!~
风雨3137 + 1 感谢分享,很给力!~
远赴 + 1 + 3 新技能已get√
cui870222829 + 1 感谢分享,很给力!~
zjbin1989 + 1 感谢分享,很给力!~
2017浮影 + 1 + 2 很强,实测不同分辨率的图片也能判断相似度
tan666 + 1 + 2 支持开源~!感谢分享
szxiao + 1 + 2 感谢分享,很给力!~
外星星人 + 1 + 2 支持开源~!感谢分享
361322548 + 1 支持开源~!感谢分享

查看全部评分


本帖被以下淘专辑推荐:

结帖率:96% (371/385)

签到天数: 11 天

161
发表于 8 小时前 | 只看该作者   福建省泉州市
支持开源!感谢分享,论坛有你更精彩~
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 10 天

160
发表于 8 小时前 | 只看该作者   河南省郑州市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 8 天

159
发表于 9 小时前 | 只看该作者   安徽省芜湖市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 9 天

158
发表于 10 小时前 | 只看该作者   湖南省郴州市
发现优秀帖子请给楼主点赞或评分打赏
回复 支持 反对

使用道具 举报

157
发表于 13 小时前 | 只看该作者   陕西省西安市
6666666666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 7 天

156
发表于 昨天 20:46 | 只看该作者   上海市上海市
回复 支持 反对

使用道具 举报

签到天数: 9 天

155
发表于 昨天 19:00 | 只看该作者   广东省惠州市
        感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 7 天

154
发表于 昨天 11:01 | 只看该作者   浙江省温州市
让我测测
回复 支持 反对

使用道具 举报

结帖率:94% (44/47)

签到天数: 12 天

153
发表于 昨天 09:52 | 只看该作者   陕西省汉中市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 7 天

152
发表于 昨天 09:37 | 只看该作者   广东省揭阳市
感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

关闭

精易论坛 - 有你更精彩上一条 /1 下一条

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表