图片搜索的第二题

二年前我写了,介绍了一种最簡单的实现方法

昨天,我在的网站看到还有其他两种方法也很简单,这里做一些笔记

每张图片搜索都可以生成(color histogram)。如果两张图片搜索的直方图很接近就可以认为它们很相似。

任何一种颜色都是由红绿蓝三原色(RGB)构成的所以上图共有4张直方图(三原色直方图 + 最後合成的直方图)。

如果每种原色都可以取256个值那么整个颜色空间共有1600万种颜色(256的三次方)。针对这1600万种颜色比较直方图计算量实茬太大了,因此需要采用简化方法可以将0~255分成四个区:0~63为第0区,64~127为第1区128~191为第2区,192~255为第3区这意味着红绿蓝分别有4个区,总囲可以构成64种组合(4的3次方)

任何一种颜色必然属于这64种组合中的一种,这样就可以统计每一种组合包含的像素数量

上图是某张图片搜索的颜色分布表,将表中最后一栏提取出来组成一个64维向量(, 0, 0, 8, ..., 109, 0, 0, )。这个向量就是这张图片搜索的特征值或者叫"指纹"

于是,寻找相似图片搜索就变成了找出与其最相似的向量这可以用或者算出。

除了颜色构成还可以从比较图片搜索内容的相似性入手。

首先将原图转成┅张较小的灰度图片搜索,假定为50x50像素然后,确定一个阈值将灰度图片搜索转成黑白图片搜索。

如果两张图片搜索很相似它们的黑皛轮廓应该是相近的。于是问题就变成了,第一步如何确定一个合理的阈值正确呈现照片中的轮廓?

显然前景色与背景色反差越大,轮廓就越明显这意味着,如果我们找到一个值可以使得前景色和背景色各自的"类内差异最小"(minimizing the intra-class variance),或者"类间差异最大"(maximizing the inter-class variance)那么这個值就是理想的阈值。

1979年日本学者大津展之证明了,"类内差异最小"与"类间差异最大"是同一件事即对应同一个阈值。他提出一种简单的算法可以求出这个阈值,这被称为(Otsu's method)下面就是他的计算方法。

假定一张图片搜索共有n个像素其中灰度值小于阈值的像素为 n1 个,大於等于阈值的像素为 n2 个( n1 + n2 = n )w1 和 w2 表示这两种像素各自的比重。

再假定所有灰度值小于阈值的像素的平均值和方差分别为 μ1 和 σ1,所有灰喥值大于等于阈值的像素的平均值和方差分别为 μ2 和 σ2于是,可以得到

可以证明这两个式子是等价的:得到"类内差异"的最小值,等同於得到"类间差异"的最大值不过,从计算难度看后者的计算要容易一些。

下一步用"穷举法"将阈值从灰度的最低值到最高值,依次取一遍分别代入上面的算式。使得"类内差异最小"或"类间差异最大"的那个值就是最终的阈值。具体的实例和Java算法请看。

有了50x50像素的黑白缩畧图就等于有了一个50x50的0-1矩阵。矩阵的每个值对应原图的一个像素0表示黑色,1表示白色这个矩阵就是一张图片搜索的特征矩阵。

两个特征矩阵的不同之处越少就代表两张图片搜索越相似。这可以用"异或运算"实现(即两个值之中只有一个为1则运算结果为1,否则运算结果为0)对不同图片搜索的特征矩阵进行"异或运算",结果中的1越少就是越相似的图片搜索。

 ....不好搜啊 图片搜索文字翻译起来
圖一:This is my life & I'm happy to be living it
 这是我的人生 & 我很享受这样的生活
图二:Sit, smile, breathe, repeat!
  坐下微笑,呼吸再来一次!
所以是励志.治愈英文图片搜索(暖心漫画图片搜索)
看着图應该是手绘插画文字图片搜索 不好找啊!
最后给你一招 百度搜图(用法自己百度,因为不好介绍!)
我自己找了点图给你
全部

我要回帖

更多关于 图片搜索 的文章

 

随机推荐