中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

相似圖片搜索的原理(二)

2018-07-20    來源:編程學習網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

二年前,我寫了《相似圖片搜索的原理》,介紹了一種最簡單的實現(xiàn)方法。

昨天,我在isnowfy的網(wǎng)站看到,還有其他兩種方法也很簡單,這里做一些筆記。

一、顏色分布法

每張圖片都可以生成顏色分布的直方圖(color histogram)。如果兩張圖片的直方圖很接近,就可以認為它們很相似。

任何一種顏色都是由紅綠藍三原色(RGB)構成的,所以上圖共有4張直方圖(三原色直方圖 + 最后合成的直方圖)。

如果每種原色都可以取256個值,那么整個顏色空間共有1600萬種顏色(256的三次方)。針對這1600萬種顏色比較直方圖,計算量實在太大了,因此需要采用簡化方法?梢詫0~255分成四個區(qū):0~63為第0區(qū),64~127為第1區(qū),128~191為第2區(qū),192~255為第3區(qū)。這意味著紅綠藍分別有4個區(qū),總共可以構成64種組合(4的3次方)。

任何一種顏色必然屬于這64種組合中的一種,這樣就可以統(tǒng)計每一種組合包含的像素數(shù)量。

上圖是某張圖片的顏色分布表,將表中最后一欄提取出來,組成一個64維向量(7414, 230, 0, 0, 8, …, 109, 0, 0, 3415, 53929)。這個向量就是這張圖片的特征值或者叫”指紋”。

于是,尋找相似圖片就變成了找出與其最相似的向量。這可以用皮爾遜相關系數(shù)或者余弦相似度算出。

二、內(nèi)容特征法

除了顏色構成,還可以從比較圖片內(nèi)容的相似性入手。

首先,將原圖轉(zhuǎn)成一張較小的灰度圖片,假定為50×50像素。然后,確定一個閾值,將灰度圖片轉(zhuǎn)成黑白圖片。

如果兩張圖片很相似,它們的黑白輪廓應該是相近的。于是,問題就變成了,第一步如何確定一個合理的閾值,正確呈現(xiàn)照片中的輪廓?

顯然,前景色與背景色反差越大,輪廓就越明顯。這意味著,如果我們找到一個值,可以使得前景色和背景色各自的”類內(nèi)差異最小”(minimizing the intra-class variance),或者”類間差異最大”(maximizing the inter-class variance),那么這個值就是理想的閾值。

1979年,日本學者大津展之證明了,”類內(nèi)差異最小”與”類間差異最大”是同一件事,即對應同一個閾值。他提出一種簡單的算法,可以求出這個閾值,這被稱為”大津法”(Otsu’s method)。下面就是他的計算方法。

假定一張圖片共有n個像素,其中灰度值小于閾值的像素為 n1 個,大于等于閾值的像素為 n2 個( n1 + n2 = n )。w1 和 w2 表示這兩種像素各自的比重。

w1 = n1 / n

w2 = n2 / n

再假定,所有灰度值小于閾值的像素的平均值和方差分別為 μ1 和 σ1,所有灰度值大于等于閾值的像素的平均值和方差分別為 μ2 和 σ2。于是,可以得到

類內(nèi)差異 = w1(σ1的平方) + w2(σ2的平方)

類間差異 = w1w2(μ1-μ2)^2

可以證明,這兩個式子是等價的:得到”類內(nèi)差異”的最小值,等同于得到”類間差異”的最大值。不過,從計算難度看,后者的計算要容易一些。

下一步用”窮舉法”,將閾值從灰度的最低值到最高值,依次取一遍,分別代入上面的算式。使得”類內(nèi)差異最小”或”類間差異最大”的那個值,就是最終的閾值。具體的實例和Java算法,請看這里。

有了50×50像素的黑白縮略圖,就等于有了一個50×50的0-1矩陣。矩陣的每個值對應原圖的一個像素,0表示黑色,1表示白色。這個矩陣就是一張圖片的特征矩陣。

兩個特征矩陣的不同之處越少,就代表兩張圖片越相似。這可以用”異或運算”實現(xiàn)(即兩個值之中只有一個為1,則運算結果為1,否則運算結果為0)。對不同圖片的特征矩陣進行”異或運算”,結果中的1越少,就是越相似的圖片。

標簽: 搜索

版權申明:本站文章部分自網(wǎng)絡,如有侵權,請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Java初學者必知:Java語言的11大特點

下一篇:相似圖片搜索的原理