隐藏图不是什么新鲜的东西,具体表现在大部分社交软件中,预览图看到的是一张图,而点开后看到的又是另一张图。虽然很早就看到过这类图片,但是一直没有仔细研究过它的原理,今天思考了一下,发现挺有趣的,所以自己也写了个简单的算法把两张图片合成为一张隐藏图。

首先说明,这里的图片搜索并不是通过关键词搜索,而是通过图片搜索图片,或者通过图片推荐图片的场景。

比如下面这张图。

目前还没有一些数据说明到底通过图片搜索或推荐图片的场景有多普遍,但是作为一个经常在淘宝上买买买的剁手党自身体会,我在淘宝常用的功能之一就是拍了照片在淘宝上搜同款。另外最近也会逛逛pinterest,在pinterest中也会有相似图片推荐。

图片 1

如果marketers 或者business
owners了解一些图片优化技巧,可能会让自己的图片或者产品有更多机会的曝光。

 

做搜索引擎优化或者推荐优化与其它在线营销方式很不同一点是,需要了解搜索引擎或者推荐引擎的基本实现原理,当你开始对一些规推荐则有一些大致的了解的时候,就可以开始利用它们了。

 当背景颜色为白色时,通常也就是在预览状态下,它是这个样子的

无意中,正好看到阮一峰写了两篇关于相似图片判定应用比较广泛的几种算法,总结如下:

图片 2

感知哈希算法:

而当背景颜色变黑以后,通常也就是点开图片以后,它是这样子的。。

  1. 把所有图片都缩小成同一尺寸,如 8*8 64个像素

图片 3

2.  把图片转变为64级灰度,并且计算出一个图片的灰度平均值

 

3.
把图片的每一个像素都与这个平均值比较,如果大于等于平均值记为1,否则记为0

 

4.
将上一步的比较结果,组合在一起,就构成了一个64位的整数,即为图片的fingerprints,比较图片的fingerprints,根据不相同的数据位的数量来判断相似度。

隐藏图原理

颜色分布法:

  我们知道一张图片中具有透明度的像素会叠加一部分的背景色,因此当背景色为白色时,所有具有透明度的白色像素全部显示为纯白色,当背景色为黑色时,所有具有透明度的黑色会显示为纯黑色。因此我们只需要把图片一的所有像素根据其灰度值转换成不同透明度的黑色,将图片二的所有像素根据其灰度值转换成不同透明度的白色,并将两图的所有像素按照任意规律交叉排列,即可生成隐藏图。这样当背景色为黑色时,图一的所有像素将会显示为纯黑色,图二的所有像素会因为其透明度不同显现出不同的灰色,此时图一隐藏,图二显现,反之同理。

我们知道,每一种颜色都可以通过rgba(即红,绿,蓝,透明度)来表示,那么一张图片的所有像素的颜色以这种方式表现出来,就会生成一个rgba直方图,如下图:

 

图片 4

算法实现 

图片来自阮一峰博客

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图