首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改ImageHash Python库中的散列大小

更改ImageHash Python库中的散列大小
EN

Stack Overflow用户
提问于 2015-05-31 15:52:16
回答 1查看 2.4K关注 0票数 5

我正在使用ImageHash库来生成图像的感知散列。该库声称能够生成不同大小的散列(64,128,256),但我不知道如何获得128散列。

哈希大小由库重新缩放时的镜像大小决定,例如:

代码语言:javascript
复制
def average_hash(image, hash_size=8):
    image = image.convert("L").resize((hash_size, hash_size), Image.ANTIALIAS)

此处的默认值为8 (8x8图像= 64像素->灰度-> 64位)。

然而,128位散列是如何创建的呢?

第二件事,pHash的默认大小是32,正如here所解释的那样,但稍后将只计算左上角8x8部分的DCT值,因此同样是64位。离散余弦变换通过scipy.fftpack进行计算

代码语言:javascript
复制
def phash(image, hash_size=32):
    image = image.convert("L").resize((hash_size, hash_size), Image.ANTIALIAS)
    pixels = numpy.array(image.getdata(), dtype=numpy.float).reshape((hash_size, hash_size))
    dct = scipy.fftpack.dct(pixels)
    dctlowfreq = dct[:8, 1:9]
    avg = dctlowfreq.mean()
    diff = dctlowfreq > avg
    return ImageHash(diff)

如何更改散列大小?

无论使用哪个值,计算都将始终基于左上角的8x8,因此将始终为64!

奇怪的是,如果我从8个大小的pHash (从头开始调整图像大小)开始,我得到了56位的最终散列(即,计算7x8图像的散列:我不明白为什么在DCT计算中会发生这种情况-但我真的知道一点。

EN

回答 1

Stack Overflow用户

发布于 2019-06-25 12:24:49

这看起来像是库中的一个bug,后来被修复了。phash的当前实现如下所示:

代码语言:javascript
复制
def phash(image, hash_size=8, highfreq_factor=4):
    """
    Perceptual Hash computation.
    Implementation follows http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
    @image must be a PIL instance.
    """
    if hash_size < 2:
        raise ValueError("Hash size must be greater than or equal to 2")

    import scipy.fftpack
    img_size = hash_size * highfreq_factor
    image = image.convert("L").resize((img_size, img_size), Image.ANTIALIAS)
    pixels = numpy.asarray(image)
    dct = scipy.fftpack.dct(scipy.fftpack.dct(pixels, axis=0), axis=1)
    dctlowfreq = dct[:hash_size, :hash_size]
    med = numpy.median(dctlowfreq)
    diff = dctlowfreq > med
    return ImageHash(diff)

您将注意到,这正确地使用了hash_size而不是硬编码值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30555098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档