都已经还给老师了... package com.imageretrieval.features; import com.imageretrieval.utils.ImageUtil; /** * pHash...> * http://blog.csdn.net/luoweifu/article/details/8220992 * @author VenyoWang * */ public class PHash...srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null); return buffImg; } /** * 用于计算pHash
前面已经整理了aHash和dHash的算法原理和python代码(戳:图片相似度识别:aHash算法,图片相似度识别:dHash算法),今天来介绍hash三兄弟的最后一个——pHash。...1 pHash算法 pHash中文叫感知哈希算法,通过离散余弦变换(DCT)降低图片频率,相比aHash有更好鲁棒性。 基本原理: 缩小尺寸。将图片缩小为32*32大小。 灰度化处理。..._01 = (dct_roi>avreage)+0 phash_list = phash_01.reshape(1,-1)[0].tolist() hash = ''.join([str...(x) for x in phash_list]) return hash def dHash(img,leng=9,wid=8): img=cv2.resize(img,(leng,...3 优缺点 pHash相对aHash鲁棒性更好,但速度会略慢。从上述例子也可以看出,用不同的方法最后的相似度数值不同,因此在实际应用中还需结合实际效果不断调整确定阈值。
pHash跟simhash很多相近的地方。一个是较多用于图像,一个较多用于文本。...算法+hamming距离(simhash)(三) LSH︱python实现MinHash-LSH及MinHash LSH Forest——datasketch(四) 一、pHash跟simhash...二、pHash算法python+opencv实现 参考自:opencv resize (C/C++/Python) 主要针对图像来进行解析。...下面的是pHash算法的主函数: import cv2 import numpy as np from compiler.ast import flatten import sys def pHash...= ch2 for ch1, ch2 in zip(s1, s2)]) 那么有了主函数,有了海明距离,就可以简单地实现: HASH1=pHash('C:\\001.png') HASH2=pHash('
本期的每周一库带来的是img_hash,一个rust下的pHash算法实现。...关于pHash,一般翻译为感知哈希算法,算法通过DCT离散余弦来用固定大小矩阵(一般位8 X 8)把图像像素数据转换为频率数据,然后通过二值化计算得到图像的二进制数组,最后通过计算Hamming distance
算法获取图片素材指纹、phash算法实现流程、phash算法效果展示图以及源码实践、phash算法的优点和不足和通过聚类解决部分素材图片裁剪相似度低的问题;最后介绍了微软开源的cv-recipes项目实现图片相似度识别...02 基于phash算法的图片相似度识别 2.1 当前的基于phash算法获取图片素材指纹 当前我们解决图片相似度识别任务主要是基于phash(感知哈希算法,Perceptual hash algorithm...2.2 phash算法实现流程 phash算法计算图片相似度主要有以下几个流程: 首先将图片统一转化为小图,一般为(64X64)。...下面是构建的图片测试集示例图: 图3 构建的图片测试集示例图 下面是通过phash算法计算两张图片的相似度效果图: 图4 通过phash算法计算两张图片的相似度 使用phash算法计算两张图片的相似度...phash算法。
它的工作原理在频域中作为pHash但它使用DWT代替DCT变换。...phash leanna400 : 99c6562d7533a296 phash leanna512 : 99c6562d7533a296 phash leannatext : 98d4946d6e2a72b6...phash leanna400 compare leanna512 : 0.0 phash leanna400 compare leannatext : 0.28125 phash leanna512.../res/lenna317x360_add_text.jpg') p = imagehash.phash(lenna400) p1 = imagehash.phash(lenna512) p2 = imagehash.phash...(lennaText) print('phash leanna400 : ', p) print('phash leanna512 : ', p1) print('phash leannatext
->hash[index]; if (NULL == phash->hash[index]) { //phead = pnode; phash->hash[index] =...pnode; } else { pnode->next = phash->hash[index]; phash->hash[index] = pnode;...} } //更新index位置值 //phash->hash[index] = phead; phash->count++; return 0; } //从HASH表查找元素 int...search_hash(hash_t *phash, int data) { int index = 0; int elm = 0; node_t *phead = NULL; /.../通过HASH函数计算表索引 index = hash_code(data); //取得链表头 phead = phash->hash[index]; //从链表phead中查找data
代码(Python) 计算pHash: def phash(img): img = img.resize((8, 8), Image.ANTIALIAS).convert('L') avg...return bin(a^b).count('1') 计算两个图片是否相似: def is_imgs_similar(img1,img2): return True if hamming_distance(phash...(img1),phash(img2)) <= 5 else False 其中计算部分用到了lambda表达式和reduce,可参考此文:廖雪峰:map和reduce
具体步骤:(1)缩小尺寸:pHash以小图片开始,但图片大于8x8,32x32是最好的。这样做的目的是简化了DCT的计算,而不是减小频率。(2)简化色彩:将图片转化成灰度图像,进一步简化计算量。...最终为相似度 if hash1[i] == hash2[i]: n = n + 1 return n/(shape[0]*shape[1]) # 感知哈希算法(pHash...)def pHash(img,shape=(10,10)): # 缩放32*32 img = cv2.resize(img, (115, 114)) # , interpolation=cv2...template.jpg') img1 = cv2.resize(img1,(115,114)) img2 = cv2.imread(jpgfile) hash1 = pHash...(img1) hash2 = pHash(img2) n = cmpHash(hash1, hash2) print('{}的相似度是:{}'.format(file
方法2-感知Hash 生成图片的pHash,并计算pair之间pHash的Hamming distance。当然这种方法复杂度也是非常高的O(n^2)。...网上搜到的方法 方法1-pHash分块局部探测 该算法的主要步骤是这样 生成所有图片的pHash(64bit)指纹特征,也可以是图片的二值化特征向量; 将每个图片的二值化特征等分成n等分,比如对于64bit...不过条件是pHash的效果要比较好才行。即相似的图片pHash之间具有较小的Hamming distance。...基于minHash的LSH方法步骤: 用pHash或者网络生成图片的2值化特征向量。...1.生成图片的phash分块索引库。
可以使用 pip 直接安装: pip install imagededup 仅需要 4 行代码即可实现图像去重: from imagededup.methods import PHash phasher...= PHash() # 生成图像目录中所有图像的二值hash编码 encodings = phasher.encode_images(image_dir='path/to/image/directory...该库目前包含的算法有: Convolutional Neural Network (CNN) Perceptual hashing (PHash) Difference hashing (DHash)
特性计算 - 相似性计算 对于两张图像的 pHash 值,具体如何计算其相似的程度?答案是 Hamming distance 汉明距离,汉明距离越小,图像内容越相似。 汉明距离又是什么?...变通的思想是:如果两个 pHash 值的汉明距离是接近的,那么将 pHash 值进行切割后,切割后的每一个小部分大概率相等。...经过变换之后,其实你可以发现,汉明距离的计算问题,变成了等值匹配的问题,我把每一个 pHash 值给分成了 8 段,只要里面有超过 5 段的值是完全相同的,那么我就认为他们相似。 等值匹配如何解决?...第一代系统总结 第一代搜图系统在技术上选择了 pHash + ElasticSearch 的方案,它拥有如下特点: •pHash 算法计算简单,可以对抗一定程度的压缩、水印、噪声等影响。...当然这套系统的局限性也很明显:由于 pHash 算法是对图像的整体进行抽象表示,一旦我们对整体性进行了破坏,比如在原图加一个黑边,就会几乎无法判断相似性。
主函数:def phash(image, hash_size=8, highfreq_factor=4): 两个参数,一起决定了图片resize的大小,最适合的才最好,按照公式: img_size...的尺度 案例: highfreq_factor = 1 hash_size = 8 img_size = hash_size * highfreq_factor hash1 = imagehash.phash...hash_size=hash_size,highfreq_factor=highfreq_factor) print(hash1) # > 354adab5054af0b7 hash2 = imagehash.phash...它的工作原理在频域中作为pHash但它使用DWT代替DCT变换。
// 如果启用了 SO_REUSEPORT,则根据哈希值计算随机值 // matches 表示当前已经查找到多少个相同得分的 socket matches++; // 通过 phash...计算 [0, matches-1] 之间的值 int res = reciprocal_scale(phash, matches); if (res == 0) result =...sk; // 根据 phash 计算下一轮计算的 phash 随机值 phash = next_pseudo_random32(phash); } } /* * if the nulls...matches++; if (reciprocal_scale(phash, matches) == 0) result = sk; phash = next_pseudo_random32...(phash); } } /* * if the nulls value we got at the end of this lookup is * not the expected one
导语: 本文从从图片的dhash,ahash,phash,颜色分布向量到基于语义的sift,surf,gist特征,构建一套分层相似图片检测系统。...7886_1507861540560.png] 检测过程中可能用到的7个基础特征如下: [1507861556216_307_1507861551601.png] 简单解释下,dhash,ahash,phash...本工程的初衷是检测图标仿冒,系统结构如下: [1507861600676_6168_1507861596058.png] 思路:先把已标位正牌的图标特征(dhash,ahash,phash等)收集起来形成一个特征库...从图片dhash,ahash,phash的算法过程可以认为它们就是一种局部敏感哈希。所以可以用来检测相似。
拿到内外轮廓后,我使用感知哈希pHash + 汉明距离进行相似度计算,它主要通过颜色低采样将图片统一缩小到32×32尺寸并输出图像签名,很好地解决相似形状中大小不一致带来的误差。...drawBorder(filled1 - filled2, center[i]) return scale, center[i], filled2 return None """使用pHash...算法计算轮廓之间相似度""" def isSimilar(img1, img2, th=0.8): HASH1 = PHash.pHash(img1) HASH2 = PHash.pHash...(img2) distance, score = PHash.hammingDist(HASH1, HASH2) print(score) return score > th 总结.../zhuanlan.zhihu.com/c_1284080123894366208 相关资料 最全综述 | 图像分割算法:https://zhuanlan.zhihu.com/p/70758906 pHash
https://github.com/idealo/imagededup 安装库 pip install imagededup 示例代码 from imagededup.methods import PHash...phasher = PHash() # 生成图像目录中所有图像的二值hash编码 encodings = phasher.encode_images(image_dir='/tmp/close_eyes_jt...repeat_img.extend(v) print(len(is_img)) 项目中应用实例 """ 图片去重 """ import os from imagededup.methods import PHash...def process_file(img_path): """ 处理图片去重 :return: """ try: phasher = PHash....imread("img1.jpg") img1 = Image.fromarray(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)) hash1 = imagehash.phash
感知哈希算法是一类算法的总称,包括aHash、pHash、dHash。顾名思义,感知哈希不是以严格的方式计算Hash值,而是以更加相对的方式计算哈希值,因为“相似”与否,就是一种相对的判定。...pHash:感知哈希。精确度比较高,但是速度方面较差一些。 dHash:差异值哈希。精确度较高,且速度也非常快 1. 平均哈希算法(aHash): 该算法是基于比较灰度图每个像素与平均值来实现。...pHash的计算步骤: 缩小图片:32 * 32是一个较好的大小,这样方便DCT计算转化为灰度图 计算DCT:利用Opencv中提供的dct()方法,注意输入的图像必须是32位浮点型,所以先利用numpy...# phash def phash(path): # 加载并调整图片为32*32的灰度图片 img = cv2.imread(path) img1 = cv2.resize(img...差异值哈希算法(dHash): 相比pHash,dHash的速度要快的多,相比aHash,dHash在效率几乎相同的情况下的效果要更好,它是基于渐变实现的。
这个分两种,一种是基本的均值哈希感知算法(dHash),一种是余弦变换哈希感知算法(pHash)。dHash是我自己命名的,为了和pHash区分。...pHash算法就是基于dHash算法调整而来的,用第一次计算得到的值进行余弦变换。所以命名为余弦哈希感知算法。它可以识别变形程度在25%以内的图片。...用这个算法计算2.jpg和3.jpg的哈希值和与1.jpg对比的汉明距离分别是: 2.jpg:7ffc0000ffffe000,汉明距离是5 3.jpg:7fff0000fffff800,汉明距离是5 很明显,pHash
. */ phash = inet_ehashfn(dst_addr, dst_port, src_addr, src_port); /* Select socket from...sk’s SO_REUSEPORT group using phash.*/ result = reuseport_select_sock(sk, phash); if (result...num_socks); return reuse->socks[index]; reciprocal_scale() [8] 是一个优化的函数,它使用乘法和移位操作实现伪模运算 如前面所看到的, ‘phash...’ 是在 __inet_lookup_listener() 函数中计算, phash = inet_ehashfn(dst_addr, dst_port, src_addr, src_port);_...函数 reciprocal_scale(phash, num_socks) 计算一个索引,索引>= 0,但是 < num_socks。该索引用于从 SO_REUSEPOR T套接字组中获取套接字。
领取专属 10元无门槛券
手把手带您无忧上云