Python 高級圖像處理
構建圖像搜索引擎並不是一件容易的任務。這裡有幾個概念、工具、想法和技術需要實現。主要的圖像處理概念之一是 逆圖像查詢 (RIQ)。Google、Cloudera、Sumo Logic 和 Birst 等公司在使用逆圖像搜索中名列前茅。通過分析圖像和使用數據挖掘 RIQ 提供了很好的洞察分析能力。
頂級公司與逆圖像搜索
有很多頂級的技術公司使用 RIQ 來取得了不錯的收益。例如:在 2014 年 Pinterest 第一次帶來了視覺搜索。隨後在 2015 年發布了一份白皮書,披露了其架構。逆圖像搜索讓 Pinterest 獲得了時尚品的視覺特徵,並可以顯示相似產品的推薦。
眾所周知,谷歌圖片使用逆圖像搜索允許用戶上傳一張圖片然後搜索相關聯的圖片。通過使用先進的演算法對提交的圖片進行分析和數學建模,然後和谷歌資料庫中無數的其他圖片進行比較得到相似的結果。
這是 OpenCV 2.4.9 特徵比較報告一個圖表:
演算法 & Python庫
在我們使用它工作之前,讓我們過一遍構建圖像搜索引擎的 Python 庫的主要元素:
專利演算法
尺度不變特徵變換 (SIFT)演算法
- 帶有非自由功能的一個專利技術,利用圖像識別符,以識別相似圖像,甚至那些來自不同的角度,大小,深度和尺度的圖片,也會被包括在搜索結果中。點擊這裡查看 SIFT 詳細視頻。
- SIFT 能與從許多圖片中提取了特徵的大型資料庫正確地匹配搜索條件。
- 能匹配不同視角的相同圖像和匹配不變特徵來獲得搜索結果是 SIFT 的另一個特徵。了解更多關於尺度不變關鍵點。
加速魯棒特徵 (SURF)演算法
- SURF 也是一種帶有非自由功能的專利技術,而且還是一種「加速」的 SIFT 版本。不像 SIFT,SURF 接近於帶有 箱式過濾器 的 高斯拉普拉斯運算元 。
- SURF 依賴於 黑塞矩陣 的位置和尺度。
- 在許多應用中,旋轉不變性不是一個必要條件,所以不按這個方向查找加速了處理。
- SURF 包括了幾種特性,提升了每一步的速度。SIFT 在旋轉和模糊化方面做的很好,比 SIFT 的速度快三倍。然而它不擅長處理照明和變換視角。
- OpenCV 程序功能庫提供了 SURF 功能,SURF.compute() 和 SURF.Detect() 可以用來找到描述符和要點。閱讀更多關於SURF點擊這裡
開源演算法
KAZE 演算法
- KAZE是一個開源的非線性尺度空間的二維多尺度和新的特徵檢測和描述演算法。在 加性運算元分裂 (AOS)和可變電導擴散中的有效技術被用來建立非線性尺度空間。
- 多尺度圖像處理的基本原理很簡單:創建一個圖像的尺度空間,同時用正確的函數過濾原始圖像,以提高時間或尺度。
加速的 KAZE (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 構建圖像搜索引擎。瀏覽我們的博客部分來查看最新的編程技術。
數據來源:OpenCV 2.4.9 特徵比較報告(computer-vision-talks.com)
(感謝 Ananthu Nair 的指導與補充)
via: http://www.cuelogic.com/blog/advanced-image-processing-with-python/
作者:Snehith Kumbla 譯者:Johnny-Liao 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive