PHP比较两张图片的相似度(感知哈希算法 均值哈希)

一、算法原理步骤

将图片转化为8*8的缩略图,根据算法得到这64个像素的哈希值,一次比较两幅图的哈希值,哈希值不一样 count++,若count>=10则不相似,count<=5为最相似(下面的代码中我把哈希值相同的进行count++操作,count越大则相似度越大)
步骤:

  • 1.将图片缩小为8*8的尺寸
  • 2.将小图片变为灰度图像
  • 3.计算每个像素的灰度平均值
  • 4.与平均值进行比较,大于等于为 1,小于为 0,得到指纹
  • 5.将两个图片的指纹依次进行比较,相同 count++ count越大,相似度越高

二、先了解后面用到的函数

pathinfo()
返回值 :数组
以数组形式显示文件信息

在这里插入图片描述
PATHINFO_DIRNAME - 只返回 路径
PATHINFO_BASENAME - 只返回 文件名
PATHINFO_EXTENSION - 只返回 后缀名
PATHINFO_FILENAME - 只返回 不包含后缀名的文件名
eg.
在这里插入图片描述
call_user_func()
回调函数
返回值:回调函数的返回值
eg.
在这里插入图片描述
imagecreatetruecolor()
新建图像
返回值:true || false
在这里插入图片描述
getimagesize()
获得图片信息
返回值:数组
eg.
在这里插入图片描述
在这里插入图片描述
list()
将值赋给list中的参数
返回值:数组
eg.
在这里插入图片描述
imagecopyresampled()
将原图变为目标图
返回值:true || false
在这里插入图片描述
imagedestroy()
销毁图片

imagecolorat()
获得该点像素的颜色索引值
返回值:该点的RGB
在这里插入图片描述
intval()
获取整数值
返回值:int
eg.
在这里插入图片描述

三、代码

<?php
/* 均值哈希
 * 1.将图片缩小为8*8的尺寸
 * 2.将小图片变为灰度图像
 * 3.计算每个像素的灰度平均值
 * 4.与平均值进行比较,大于等于为 1,小于为 0,得到指纹
 * 5.将两个图片的指纹依次进行比较,相同 count++  count越大,相似度越高
 * */

class img_compare{
   

    // 比较相似度  实现步骤5
    public function compare($img1,$img2){
   
        static 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值