以圖搜圖指的是根據圖像內容搜索出類似內容的圖像。html
構建一個以圖搜圖系統須要解決兩個最關鍵的問題:首先,提取圖像特徵;其次,特徵數據搜索引擎,即特徵數據構建成數據庫並提供類似性搜索的功能。算法
介紹三種方式。數據庫
圖像哈希網絡
圖像經過一系列的變換和處理最終獲得的一組哈希值稱之爲圖像的哈希值,而中間的變換和處理過程則稱之爲哈希算法。搜索引擎
圖像的哈希值是對這張圖像的總體抽象表示。編碼
好比 Average Hash 算法的計算過程:人工智能
1.Reduce size : 將原圖壓縮到 8 x 8 即 64 像素大小,忽略細節。spa
2.Reduce color : 灰度處理獲得 64 級灰度圖像。orm
3.Average the colors : 計算 64 級灰度均值。htm
4.Compute the bits : 二值化處理,將每一個像素與上一步均值比較並分別記爲 0 或者 1 。
5.Construct the hash : 根據上一步結果矩陣構成一個 64 bit 整數,好比按照從左到右、從上到下的順序。最後獲得的就是圖像的均值哈希值。
參考:
http://www.hackerfactor.com/b...
圖像哈希算法有不少種,包含但不限於:
咱們最多見可能就是 PHash。
圖像哈希能夠對抗必定程度的水印、壓縮、噪聲等影響,即經過對比圖像哈希值的 Hamming distance (漢明距離)能夠判斷兩幅圖像的內容是否類似。
圖像的哈希值是對這張圖像的總體抽象表示,侷限性也很明顯,因爲是對圖像總體進行的處理,一旦咱們對總體性進行了破壞,好比在原圖加一個黑邊就幾乎沒法判斷類似性了。
傳統特徵
在計算機視覺領域早期,創造了不少經典的特徵算法,好比 SIFT
如上圖所示,經過 SIFT 算法提取出來的一系列的特徵點。
一幅圖像提取出來的特徵點有多個,且每個特徵點都是一個多維的局部向量,爲了進行類似性計算,一般須要先將這一系列特徵點融合編碼爲一個全局特徵,也就是局部特徵向量融合編碼爲一個全局特徵向量(用這個全局特徵向量表示一幅圖像),融合編碼相關的算法包括但不限於:
CNN 特徵
人工智能興起以後,基於 CNN 卷積神經網絡提取圖像特徵愈來愈主流。
因爲將圖像轉換爲了特徵向量,所以搜索引擎所要作的就是其實就是向量檢索。
這裏直接推薦 Milvus ( https://www.milvus.io/ ),剛開源不久,能夠很方便快捷的使用在工程項目上,具體的相關內容直接查閱官方文檔便可。