1. 程式人生 > >OpenCV框架 各類演算法,Python構建相似圖片搜尋引擎!

OpenCV框架 各類演算法,Python構建相似圖片搜尋引擎!

 

OpenCV框架 各類演算法,Python構建相似圖片搜尋引擎!

頂級公司和反向圖片搜尋

有很多頂級的科技公司把RIQ用得很好。例如,Pinterest 2014年第一次實現視覺搜尋。隨後2015年它釋出了一個白皮書,揭示了視覺搜尋的結構。反向圖片搜尋使得Pinterest能夠從時尚的東西中提取視覺元素,然後給消費者推薦類似的產品。

          學習Python中有不明白推薦加入交流群
                號:516107834
                群裡有志同道合的小夥伴,互幫互助,
                群裡有不錯的學習教程!

眾所周知,Google圖片使用反向圖片搜尋技術,它允許使用者上傳一張圖片然後搜尋相關的圖片。上傳的圖片通過演算法分析,製作出一個數學模型,然後跟Google資料庫中成千上萬的圖片進行比較,知道找到匹配的或者相似的圖片。

這是OpenCV2.4.9特性體驗報告的一張圖

OpenCV框架 各類演算法,Python構建相似圖片搜尋引擎!

 

 

演算法和Python庫

在我們動手之前,讓我們大致看一下構建一個圖片搜尋需要哪些Python元素。

專利演算法

SIFT(尺度不變特徵變換)

  1. 使用影象識別符號來識別相似影象的沒有費用的專利技術。即使圖片的尺寸、角度、深度不同,這項技術還是能將內容相似的圖片匹配成功。
  2. SIFT以大量的從圖片中提取的特性作為搜尋的標準。
  3. 能匹配相同物體從不同視角拍攝的圖片,能夠通過不變的特性進行搜尋匹配。

SURF(加速魯棒特徵)演算法

  1. SURF和SIFT一樣也是不收費的專利演算法,可以說是加速版的SIFT。與SIFT不同的是,SURF使用盒過濾器近似高斯拉普拉斯運算元。
  2. SURF使用Hessian矩陣來判斷影象的位置和大小。
  3. 在許多應用中,旋轉不變性都不是一個必要條件,所以不用尋找方向的話演算法速度會快很多。
  4. SURF包含了幾個特性使得計算的每一個步驟都得到了速度上的提升。圖片經過旋轉和模糊之後,SURF依舊工作的很好,而且比SIFT快3倍。不過在光源和視角變換方面SURF不太行。
  5. OpenCV提供了SURF功能,SURF.compute()和SURF.detect()可以用來找到描述符和關鍵點。

開源演算法

KAZE演算法

  1. KAZE是一個開源2D多尺度和新特性探測和描述演算法,它運作於非線性尺度空間。新增劑運算元分裂(AOS)的有效技術和可變熱導擴散被用來構建非線性尺度空間。
  2. 多尺度影象處理的基礎很簡單--構建一個影象的尺度空間,然後用一個函式處理影象,增強影象的尺度或者時間。

AKAZE(加速KAZE)演算法

  1. 從名字可以猜到,這個演算法更快,它能快速找到兩個圖片之間匹配的關鍵。AKAZE使用一個二進位制描述符和非線性尺度空間來平衡準確度和速度。

 

BRISK(二進位制魯棒尺度不變關鍵點)演算法

  1. BRISK在探測和匹配描述符和關鍵點方面很棒。
  2. 這個演算法適應性很強的、尺度空間基於FAST的、使用bit-string描述符的探測器,它能夠顯著地加快搜索的速度。
  3. 尺度空間關鍵點探測和關鍵點描述有助於效能的優化

FREAK(快速視網膜關鍵點)演算法

  1. 這是一個由人眼啟發的新的關鍵點描述符。根據影象強度的比較有效地計算出一個二進位制級聯字串。相比於BRISK, SURF 和 SIFT,FREAK計算更快,更省記憶體。

 

ORB(原生的FAST和旋轉的BRIEF)

  1. ORB是一個二進位制描述符,它能夠抗噪聲並具有旋轉不變性。ORB基於FAST關鍵點探測和BRIEF描述符,這兩者共同造就了它的低消耗和高效能。
  2. 除了快速和準確的方向元件,計算原生BRIEF,分析變化以及與原生BRIEF的關係,是ORB的另一大特色。

Python庫

OpenCV

  1. OpenCF分學術使用版本和商用版本。作為一個開源機器學習和機器視覺庫,OpenCV使得各類機構能夠很容易地基於OpenCV構建自己的版本。
  2. 超過2500個優化的演算法,包含目前最先進的機器學習和機器視覺演算法,能夠處理各類需求:人臉檢測、物體鑑定、相機移動跟蹤、尋找相似圖片,眼球跟蹤,場景識別等。
  3. 頂級公司像Google, Yahoo, IBM, Sony, Honda, Microsoft 和 Intel 都大量使用OpenCV庫。
  4. OpenCV使用Python, Java, C, C++ 和 MATLAB做程式設計介面,同時支援Windows, Linux, Mac OS 和 Android平臺。

Python Imaging Library(PIL)

  1. PIL在做影象及圖形處理的時候支援若干種語言格式,它使得你的Python能夠處理影象。
  2. 影象處理的標準流程包括影象增強,透明度和遮蔽處理,影象濾波,每畫素的操作等。

構建圖片搜尋引擎

一個圖片搜尋引擎能夠從已有的圖片中挑出相似的圖片,最受歡迎的就是Google的圖片搜尋引擎。對於新的圖片搜尋引擎專案,有很多構建的方法,這裡列舉一些:

  1. 使用影象提取,影象描述提取,元資料提取和搜尋結果提取,建立一個影象搜尋引擎。
  2. 定義你的影象描述符,對資料集進行索引,定義你的相似讀矩陣,然後搜尋並排名。
  3. 選擇要搜尋的圖片,選擇已有圖片的資料夾,在資料夾中遍歷圖片,建立圖片特徵索引,用相同的特徵和要搜尋的圖片進行匹配,獲取能夠匹配的圖片。

我們的做法是一開始匹配圖片的灰度版本,逐漸開始使用像SIFT 和 SURF這樣複雜的特徵匹配演算法,最終使用了開源的演算法BRISK。這些演算法都只需要很小的修改,就能給出有效的結果。基於這些演算法構建一個影象搜尋引擎可以有很多應用,例如分析影象受歡迎程度,圖片內物體的鑑定等等。

例子

一個IT公司需要為客戶構建一個影象搜尋引擎,功能是一個品牌的Logo提交進去,與這個品牌相關的圖片都會顯示出來。客戶可以根據搜尋的結果,分析一個品牌在一個地區的受歡迎程度。這項技術還處於應用的早期,RIQ的潛力還沒有完全被發覺出來。

OpenCV框架 各類演算法,Python構建相似圖片搜尋引擎!