構建圖像搜索引擎並非一件容易的任務。這裏有幾個概念、工具、想法和技術須要實現。主要的圖像處理概念之一是逆圖像查詢(RIQ)。Google、Cloudera、Sumo Logic 和 Birst 等公司在使用逆圖像搜索中名列前茅。經過分析圖像和使用數據挖掘 RIQ 提供了很好的洞察分析能力。html
有不少頂級的技術公司使用 RIQ 來取得了不錯的收益。例如:在 2014 年 Pinterest 第一次帶來了視覺搜索。隨後在 2015 年發佈了一份白皮書,披露了其架構。逆圖像搜索讓 Pinterest 得到了時尚品的視覺特徵,並能夠顯示類似產品的推薦。java
衆所周知,谷歌圖片使用逆圖像搜索容許用戶上傳一張圖片而後搜索相關聯的圖片。經過使用先進的算法對提交的圖片進行分析和數學建模,而後和谷歌數據庫中無數的其餘圖片進行比較獲得類似的結果。python
![Python 高級圖像處理](http://static.javashuo.com/static/loading.gif)
在咱們使用它工做以前,讓咱們過一遍構建圖像搜索引擎的 Python 庫的主要元素:linux
算法
尺度不變特徵變換算法
- 帶有非自由功能的一個專利技術,利用圖像識別符,以識別類似圖像,甚至那些來自不一樣的角度,大小,深度和尺度的圖片,也會被包括在搜索結果中。點擊這裏查看 SIFT 詳細視頻。
- SIFT 能與從許多圖片中提取了特徵的大型數據庫正確地匹配搜索條件。
- 能匹配不一樣視角的相同圖像和匹配不變特徵來得到搜索結果是 SIFT 的另外一個特徵。瞭解更多關於尺度不變關鍵點。
加速魯棒特徵(SURF)算法
- SURF 也是一種帶有非自由功能的專利技術,並且仍是一種「加速」的 SIFT 版本。不像 SIFT,SURF 接近於帶有箱式過濾器的高斯拉普拉斯算子。
- SURF 依賴於黑塞矩陣的位置和尺度。
- 在許多應用中,旋轉不變性不是一個必要條件,因此不按這個方向查找加速了處理。
- SURF 包括了幾種特性,提高了每一步的速度。SIFT 在旋轉和模糊化方面作的很好,比 SIFT 的速度快三倍。然而它不擅長處理照明和變換視角。
- OpenCV 程序功能庫提供了 SURF 功能,SURF.compute() 和 SURF.Detect() 能夠用來找到描述符和要點。閱讀更多關於SURF點擊這裏
KAZE 算法
- KAZE是一個開源的非線性尺度空間的二維多尺度和新的特徵檢測和描述算法。在加性算子分裂(AOS)和可變電導擴散中的有效技術被用來創建非線性尺度空間。
- 多尺度圖像處理的基本原理很簡單:建立一個圖像的尺度空間,同時用正確的函數過濾原始圖像,以提升時間或尺度。
加速的(AKAZE) 算法
- 顧名思義,這是一個更快的圖像搜索方式,它會在兩幅圖像之間找到匹配的關鍵點。AKAZE 使用二進制描述符和非線性尺度空間來平衡精度和速度。
二進制魯棒性不變尺度可變關鍵點(BRISK)算法
- BRISK 很是適合關鍵點的描述、檢測與匹配。
- 是一種高度自適應的算法,基於尺度空間 FAST 的快速檢測器和一個位字符串描述符,有助於顯著加快搜索。
- 尺度空間關鍵點檢測與關鍵點描述幫助優化當前相關任務的性能。
快速視網膜關鍵點(FREAK)
- 這個新的關鍵點描述的靈感來自人的眼睛。經過圖像強度比能有效地計算一個二進制串級聯。FREAK 算法相比 BRISK、SURF 和 SIFT 算法能夠更快的計算與內存負載較低。
定向 FAST 和旋轉 BRIEF(ORB)
- 快速的二進制描述符,ORB 具備抗噪聲和旋轉不變性。ORB 創建在 FAST 關鍵點檢測器和 BRIEF 描述符之上,有成本低、性能好的元素屬性。
- 除了快速和精確的定位元件,有效地計算定向的 BRIEF,分析變更和麪向 BRIEF 特色相關,是另外一個 ORB 的特徵。
Python庫
OpenCV
- OpenCV 支持學術和商業用途,它是一個開源的機器學習和計算機視覺庫,OpenCV 便於組織利用和修改代碼。
- 超過 2500 個優化的算法,包括當前最早進的機器學習和計算機視覺算法服務與各類圖像搜索--人臉檢測、目標識別、攝像機目標跟蹤,從圖像數據庫中尋找相似圖像、眼球運動跟隨、風景識別等。
- 像谷歌,IBM,雅虎,索尼,本田,微軟和英特爾這樣的大公司普遍的使用 OpenCV。
- OpenCV 擁有 python,java,C,C++ 和 MATLAB 接口,同時支持 Windows,Linux,Mac OS 和 Android。
Python 圖像庫 (PIL)
- Python 圖像庫(PIL)支持多種文件格式,同時提供圖像處理和圖形解決方案。開源的 PIL 爲你的 Python解釋器添加了圖像處理能力。
- 標準的圖像處理能力包括圖像加強、透明和遮罩處理、圖像過濾、像素操做等。
詳細的數據和圖表,請看這裏的 OpenCV 2.4.9 特徵比較報告。算法
構建圖像搜索引擎
圖像搜索引擎能夠從預置的圖像庫選擇類似的圖像。其中最受歡迎的是谷歌的著名的圖像搜索引擎。對於初學者來講,有不一樣的方法來創建這樣的系統。提幾個以下:數據庫
- 採用圖像提取、圖像描述提取、元數據提取和搜索結果提取,創建圖像搜索引擎。
- 定義你的圖像描述符,數據集索引,定義你的類似性度量,而後進行搜索和排名。
- 選擇要搜索的圖像,選擇用於進行搜索的目錄,搜索全部圖片的目錄,建立圖片特徵索引,評估搜索圖片的相同特徵,匹配搜索的圖片並得到匹配的圖片。
咱們的方法基本上從比較灰度版本的圖像,逐漸演變到複雜的特徵匹配算法如 SIFT 和 SURF,最後採用的是開源的解決方案 BRISK 。全部這些算法都提供了有效的結果,但在性能和延遲有細微變化。創建在這些算法上的引擎有許多應用,如分析流行統計的圖形數據,在圖形內容中識別對象,等等。編程
舉例:一個 IT 公司爲其客戶創建了一個圖像搜索引擎。所以,若是若是搜索一個品牌的標誌圖像,全部相關的品牌形象也應該顯示在搜索結果。所獲得的結果也可以被客戶用於分析,使他們可以根據地理位置估計品牌知名度。但它還比較年輕,RIQ(反向圖像搜索)的潛力還沒有被徹底挖掘利用。架構
這就結束了咱們的文章,使用 Python 構建圖像搜索引擎。瀏覽咱們的博客部分來查看最新的編程技術。機器學習
本文轉載地址:https://www.linuxprobe.com/python-advanced-image.html函數