百度相似图片搜索…

前几天我已经写了一篇文章来介绍如何有效的拿到标的方法,文章标题是《爆款必备,100%获得新品标的思路和方法》
那么最近呢 依然有很多同学问我说,我已经拿到新品标了,但是过几天就没有了,其实这里面还有更多深层的原因的,今天,我就把这个是如何识别相似图片的原理给大家讲一下,如果您看明白了,自己就可以得出拿到新品标的方法,或者说是如何通过对图片的处理,避免掉被合并同款。
以上两个点:
1丶拿到新品标
2丶避免被合并同款
这两个点,如果在新品上架后能够做到的话,将对你的宝贝权重的提升有非常大的帮助。&
在讲淘宝是如何识别相似图片的原理前,我们先来看下 图片搜索的功能,不知道大家是否已经知道这个功能了,目前有个网站叫 淘淘搜 这个网站我把要搜索的图片上传好,然后选择搜索上衣,
马上这个搜索就帮我把相同的宝贝找到了对于淘宝,现在你去搜索,也都会看到搜索结果中,会有“找同款”和“找相似”的功能,如图:那么他们实现的原理是什么呢??&首先大家要明白,搜索引擎有个算法叫做“信息指纹算法”,这个算法的作用就是对每张图片生成一个"信息指纹"(fingerprint)字符串,然后比较不同图片的指纹,结果越接近,就说明图片越相似。图像比较的原理& (参考资料)&&& 最简单来讲如何比较两张图像是否相似,就是重叠比较。所谓重叠比较就是将两张图片叠加起来,然后看他们有多少是相似的。重叠在实现上最简单的做法是逐像素进行比较,之后我们就可以知道这两张图到底有多少是不一样的。逐点比较需要计算图像中的每个点,那么就可以通过首先将图像划分成很多小的单元格然后比较两个图像子单元格差别是否大就可以知道图像差异是否大了。但是逐点比较是基于两张图像在位置上必须是对齐的,而其一旦在位置或者形状大小上有差异,逐点比较必然会失败。 &&& 以此来看如何实现两张图像的比较我们必须找到图像中有共性的部分,它们共性就是我们所说的特征。特征是一些能反应图像特点的量,如果这些量对上了,我们便可以猜测图像可能是相似的。一些图像当中常用的特征是图像有颜色信息,比如都是红色图像才有可能相似;如果一个红一个绿图像肯定相差十万八千里了。此外图像当中可以利用的特征还有材质纹理信息,特征点信息。比如两张图像都有类似布料图案的信息(如豹纹)那么我们便能够把他们找出来。所谓的特征点信息是图像当中有代表性比较特殊的点,这些点在尺度上和局部分布信息上都有其特别性,如果两张图像有相似的显着特征点,并且相似的局部点数量非常之大,那么便可以推断图像是相类似的。根据以上参考资料我们可以得出搜索引擎在进行相似图片比较的时候,重点要比较如下信息:&1丶图片的颜色信息2丶图片的纹理信息3丶图片形状结构信息&结合淘宝的搜索引擎的话,我们的宝贝要拿到新品标,同时要避免合并同款,有可能比较的信息更多一些,我们一起列举一下:1丶图片的exfi信息2丶图片URL信息3丶图片的颜色信息4丶图片的纹理信息5丶图片形状结构信息6丶宝贝的信息&那么我们知道这些点后我们应该怎么实际操作呢,比如:&1丶删除图片的exfi信息& (用光影魔术手)2丶重新上传图片生成新的图片URL路径3丶修改图片的背景色4丶对图片的纹理进行修改5丶对于图片的结构,可以采用先抠图,然后对宝贝的进行翻转等操作,或者改变角度等6丶宝贝信息方面根据情况做一定的修改7丶对详情页图片,进行重新切图,以及打乱原有详情页图片排列顺序等8丶改变图片格式,将JPG保存为PNG
别具一格 超赞
这个 必须收藏 有用 啊 &就是标题起的不好
学习了受益,赞!
感谢支持!
学习了受益,赞!
看不懂,太专业了
感谢分享传教!
@你关注的人或派友
亲,先登录哦!
电商加油站o为梦想加油
电商服务商o【优选】
3天试用+考核认证,网店装修更靠谱!
专业网店交易服务平台!
复合营销+微信商城,十八般武艺助销量猛涨!
请输入姓名:
请输入对方邮件地址:
您的反馈对我们至关重要!相似图片浏览-百度识图 图片_hao123网址导航
▲▲▲▲▲▲▲▲
网站全称此栏不能为空!网站URL此栏不能为空!主推图片分类图片分类不能为空!图片数量(主推分类下图片总量)此栏不能为空!图片来源(购买版权或图片采集等)此栏不能为空!您的联系方式(必填)真实姓名此栏不能为空!手机此栏不能为空!办公邮箱此栏不能为空!QQ此栏不能为空!验证码验证码不能为空!工作人员将在三个工作日内邮件联系您帐号密码记录我的登录状态还没有hao123帐号?&|&&|&&|&&|&
已成功收藏至收藏夹现在位置: &
& 内容详细页面
相似图片检测之phash
作者: 时间: 17:24 标签: 评论:0人 浏览:<font color="#FF次
Perceptual Hash
图片指纹生成方法: pHash算法简要:
(1) 图片指纹灰值化
(2) 图片缩放到32x32
(3) 计算每个图片的Discrete Cosine Transform (DCT, type II)。
(4) 只保留最左上部的8x8的DCT系数(有32x32大),这样保存了频率最低的那部分(图片信息的大部分)
(5) 计算中值
(6) 生成64维2维码,0表示系数小于中值,反之为1.
说到DCT,其实是把信号转换成很多不同频率和振幅的正玄曲线相加的结果。但是DCT只是用cosine函数。这样的话图片高频率部分会给擦去,只保留低频率部分。因为在给图片操作的时候,往往低频率的DCT系数会给保留,而且大部分图片的信息会给保留在这些低频率DCT系数里。(JPEG压缩也用这个方法来对图片进行压缩)。 DCT 会生成8x8的系数表,那最左上方的表示最低频率的元素,也是最重要的,越往右下的表示相对频率稍高的元素(好多信号出来的东西啊,头好大) 反正到最后能生成一个图片指纹,从别的作者的实验结果来看,效果是相对较好的。在这个网站上phash.org能下到开源的代码,在网站的demo上可以可以试试看计算图片的相似性,通过测试,只有DCT比较靠谱,另外两个的结果非常糟糕。相同的,这个算法的信息量为2^64,冲撞率没那么高。
DCT编码算法表述-离散余弦变换
在编码过程中,首先将输入图像颜色空间转换后分解为大小的数据块,然后用正向二维DCT把每个块转变成64个DCT系数值,其中1个数值是直流(DC)系数,即空域图像了块的平均值,其余的63个是交流(A C)系数,接下来对DCT系数进行量化,最后将变换得到的量化的DCT系数进行编码和传送,形成压缩后的图像格式。在解码过程中,先对己编码的量化的DCT系数进行解码,然后使用二维DCT反变换求逆量化并把DCT系数转化为样本像块,最后将操作完成后的块组合成一个单一的图像,这样就完成了图像的压缩和解压过程。研究表明,DCT将图像块变换为频域时数值集中在左上角,即低频分量都集中在左上角,高频分量分布在右下脚,而低频部分包含了图像大部分信息,相比之下,高频部分包含的信息量较少。为了压缩数据,往往采用忽略高频系数的办法。而较低频系数的修改对原始数据的影响较小。
基于DCT的压缩编码属于有损压缩,通过去除图像本身的冗余量和人的视觉冗余量来达到压缩数据的目的,主要经过以下几个步骤:
(1)向离散余弦变换; &
(2)量化;
(3)Z字形编码;
(4)使用差分脉冲编码调制对直流系数进行编码;
(5)使用行程长度编码对交流系数进行编码;
(6)熵编码;
(7)组成位数据流;
andbase中的实现代码:
* 描述:图像的特征值余弦相似度
* @param bitmap
public static String getDCTHashCode(Bitmap bitmap){
//将图片缩小到32x32的尺寸
Bitmap temp = Bitmap.createScaledBitmap(bitmap, 32, 32, false);
int width = temp.getWidth();
int height = temp.getHeight();
Log.i("th", "将图片缩小到32x32的尺寸:" + width + "*" + height);
//简化色彩。
int[] pixels = new int[width * height];
for (int i = 0; i & i++) {
for (int j = 0; j & j++) {
pixels[i * height + j] = rgbToGray(temp.getPixel(i, j));
releaseBitmap(temp);
int[][] pxMatrix =
AbMathUtil.arrayToMatrix(pixels, width, height);
double[][] doublePxMatrix = AbMathUtil.intToDoubleMatrix(pxMatrix);
//计算DCT,已经变成8*8了
double[][] dtc = FDCT.fDctTransform(doublePxMatrix);
//计算平均值。
double[] dctResult =
AbMathUtil.matrixToArray(dtc);
int avgPixel = AbMathUtil.average(dctResult);
//比较像素的灰度。
// 将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
int[] comps = new int[8 * 8];
for (int i = 0; i & comps. i++) {
if (dctResult[i] &= avgPixel) {
comps[i] = 1;
comps[i] = 0;
//计算哈希值。
//将上一步的比较结果,组合在一起,就构成了一个64位的整数,
//这就是这张图片的指纹。
StringBuffer hashCode = new StringBuffer();
for (int i = 0; i & comps. i+= 4) {
int result = comps[i] * (int) Math.pow(2, 3) + comps[i + 1] * (int) Math.pow(2, 2)+ comps[i + 2] * (int) Math.pow(2, 1) + comps[i + 2];
hashCode.append(AbMathUtil.binaryToHex(result));
String sourceHashCode = hashCode.toString();
// 得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。
//在理论上,这等同于计算"汉明距离"(Hamming distance)。
//如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。
return sourceHashC
* 灰度值计算
* @param pixels 像素
* @return int 灰度值
private static int rgbToGray(int pixels) {
// int _alpha = (pixels && 24) & 0xFF;
int _red = (pixels && 16) & 0xFF;
int _green = (pixels && 8) & 0xFF;
int _blue = (pixels) & 0xFF;
return (int) (0.3 * _red + 0.59 * _green + 0.11 * _blue);
版权申明:欢迎转载! 转载请注明本文地址,谢谢。
acquistare c ialis 说:
acquistare c ialis 说:
comprar c ialis 说:
comprar c ialis 说:
achat cialis 说:
achat cialis 说:
achat cialis 说:
achat cialis 说:
社会话评论真垃圾取消了 09:24
社会话评论终于启用了。 00:37
你不兄点,就没人搭理你。 13:24
开发宝不错!!! 18:32
加班啊,加班。 23:25
终于备案通过,恢复运行,赞一个 21:23
博客的流量要超标了。 16:35
今天搞了一个小应用,算是熟悉了android开发的流程了,随后的开发,用andbase来做,我觉得以开始就用框架,完全不懂细节的话,是很不可取的。 19:28
&&&&30.71ms

我要回帖

更多关于 怎么搜索相似图片 的文章

 

随机推荐