以圖搜圖指的是根據圖像內容搜索出類似內容的圖像。html
構建一個以圖搜圖系統須要解決兩個最關鍵的問題:首先,提取圖像特徵;其次,特徵數據搜索引擎,即特徵數據構建成數據庫並提供類似性搜索的功能。算法
介紹三種方式。數據庫
圖像經過一系列的變換和處理最終獲得的一組哈希值稱之爲圖像的哈希值,而中間的變換和處理過程則稱之爲哈希算法。網絡
圖像的哈希值是對這張圖像的總體抽象表示。app
好比 Average Hash 算法的計算過程:
搜索引擎
參考:http://www.hackerfactor.com/b...編碼
圖像哈希算法有不少種,包含但不限於:人工智能
AverageHash
: 也叫 Different HashPHash
: Perceptual HashMarrHildrethHash
: Marr-Hildreth Operator Based HashRadialVarianceHash
: Image hash based on Radon transformBlockMeanHash
: Image hash based on block meanColorMomentHash
: Image hash based on color moments咱們最多見可能就是 PHash
。spa
圖像哈希能夠對抗必定程度的水印、壓縮、噪聲等影響,即經過對比圖像哈希值的 Hamming distance (漢明距離)能夠判斷兩幅圖像的內容是否類似。設計
圖像的哈希值是對這張圖像的總體抽象表示,侷限性也很明顯,因爲是對圖像總體進行的處理,一旦咱們對總體性進行了破壞,好比在原圖加一個黑邊就幾乎沒法判斷類似性了。
在計算機視覺領域早期,創造了不少經典的手工設計的特徵算法,好比 SIFT
如上圖所示,經過 SIFT
算法提取出來的一系列的特徵點。
一幅圖像提取出來的特徵點有多個,且每個特徵點都是一個局部向量,爲了進行類似性計算,一般須要先將這一系列特徵點融合編碼爲一個全局特徵,也就是局部特徵向量融合編碼爲一個全局特徵向量(用這個全局特徵向量表示一幅圖像),融合編碼相關的算法包括但不限於:
BOW
Fisher vector
VLAD
人工智能興起以後,基於 CNN 卷積神經網絡提取圖像特徵愈來愈主流。
經過 CNN 提取出來的圖像特徵其實也是一個多維向量,好比使用 VGG16 模型提取特徵可參考: https://keras.io/applications...
因爲將圖像轉換爲了特徵向量,所以搜索引擎所要作的就是其實就是向量檢索。
這裏直接推薦 Milvus ,剛開源不久,能夠很方便快捷的使用在工程項目上,具體的相關內容直接查閱官方文檔便可。