专栏首页算法与数据之美你朋友圈发的假图被我发现了!

你朋友圈发的假图被我发现了!

我们常用的搜索引擎百度,它的搜索框内有一个小相机,不知道大家有没有注意,我们将照片上传可以找到相似图片以及图片的出处。

比方我上传一张Ng的图片,

百度就会给出它的搜索答案。

这件事是如何做到的呢?相似的图片是如何比对找到的呢?

其中有一个最基础的算法:“感知哈希”。这个算法的原理是非常直观且易于理解的,它的作用是对每张图片生成一个"指纹",然后比较不同图片的指纹。如果结果接近,就说明图片相似。

下面我们就来对这个算法做一个简单实现。

1)缩小图片的尺寸

可以将图片缩小到8x8的尺寸,总共64个像素。用来去除这些图片的细节,只保留结构、明暗等基本信息,不考虑不同尺寸以及不同比例带来的图片差异。

这里我们只需要用安装pillow,利用 resize 函数修改图片的尺寸即可。

2)转成灰度图像并计算灰度值的平均值

把缩小后的图像转换成灰度,一共可以得到64个灰度值。接着计算这些灰度值的平均值。

这一步同样容易,我们可以用 convert 函数把图片转化成灰度图像。

im = im.resize((8, 8), Image.ANTIALIAS).convert('L')
avg = reduce(lambda x, y: x + y, im.getdata()) / 64.

3)灰度值比较

把每一个灰度值与平均灰度值进行比较,如果灰度值大于或等于平均,则记为1,反之记为0。

zero_one=[]
data=list(im.getdata()) 
for i in range(64):
    if data[i]>avg:
        zero_one.append(1)
    else:
        zero_one.append(0)

这里定义了一个 zero_one 列表用于存储灰度的0-1值。而这个列表也正是这张图片的“指纹”。

4)“指纹”比较

在得到图片的“指纹”以后,我们就可以对比不同的图片,看看在这64位中共有多少位是不一样的。可以按照不同位个数的差异,来作为图片差异的对照。

一般来说,有5位之内的差异,可以看作是相似的图片;超过5位,便可以当作不相似的图片。

基于这个算法,我们可以通过计算机来识别相似图片。朋友圈的假图(网图)便无所遁形啦。

本文分享自微信公众号 - 算法与数据之美(algo_and_data),作者:斐波那契小李

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 妈妈再也不用担心我没有壁纸啦!

    近期准备参加一个隐写分析的比赛,unsplash是比赛训练数据集来源之一。Unsplash 是一个完全免费的、无版权的高清图片资源网站,里面的图片也是各式各样,...

    老肥码码码
  • 用Python做自己的2020专属Flag动图

    2020年的开头并不顺利,有不少朋友希望能够重启2020。然而时光不可倒流,我们都应该学会积极的向前看。

    老肥码码码
  • 用Python获取可能是全网最全的杰尼龟表情包(第一弹)

    正好,我也是这沙雕网友大军中的一员,通过各种渠道收集了一些杰尼龟的表情包。但,我想要更多,只有拥有沙雕表情包最多的人才能在斗图中立于不败之地,于是便有了用Pyt...

    老肥码码码
  • Python+sklearn使用支持向量机算法实现数字图片分类

    关于支持向量机的理论知识,大家可以查阅机器学习之类的书籍或网上资源,本文主要介绍如何使用Python扩展库sklearn中的支持向量机实现数字图片分类。 1、首...

    Python小屋屋主
  • 2.1 几何阶段第 2 章 GPU 图形绘制管线

    图形绘制管线描述 GPU 渲染流程,即“给定视点、三维物体、光源、照明模式,和纹理等元素,如何绘制一幅二维图像”。本章内容涉及 GPU 的基本流程和实时绘制技术...

    代码咖啡
  • 今天你用了吗?

    随着嵌入式开发的复杂化,靠手工去画状态图分析显然已经不合时宜,IAR的 visualSTATE 是一组基于状态机的高级嵌入式设计工具套件,专门用...

    用户1605515
  • 不再傻傻分不清 云计算和云服务到底有啥区别

    云计算技术在近些年成为了很多人口中的口头禅,然而我们可以注意到,在谈论云计算这种技术的过程当中,往往除了“云计算”这个词之外,我们还会提及“云服务”,对于这样两...

    静一
  • Flutter Hello World

    这里我们创建一个 名叫 myapp 的 flutter项目。(别忘了要先进入你的工作文件夹)

    林小帅
  • 小白入门学习打日志

    如果使用e.printStackTrace();的话,打印在控制的信息分析不方便:

    帅地
  • 一起来涂鸦吧!用风格迁移把iPhoneX的照片变成艺术画

    自从Gatys发表了神经风格迁移算法,我们见证了海量的图片摇身一变成了艺术品。 算法用了一个前馈网络把给定图片的风格输入网络。我们还看到了超厉害的“非艺术气质的...

    AI研习社

扫码关注云+社区

领取腾讯云代金券