使用SIFT匹配金馆长表情包
python使用opencv計算SIFT特征點的示例
- 前言
- 潛在的問題記錄
- demo1:計算并繪制特征點
- demo2:使用SIFT匹配兩幅圖像
- 參考文章地址
前言
SIFT(Scale-invariant feature transform)是2004年提出的,至今已經經受住各種考驗,被證實是在同類描述子中具有很強健壯性的算法。
SIFT既是一種特征點檢測算法,也同時提供特征點的描述子。
本文使用兩個示例,簡單介紹在python下如何使用opencv計算SIFT特征點
完整代碼及更多算法demo,見我最近開始構建的 AI ToolBox
我建立 AI ToolBox 的初衷是,將工作學習中編寫的代碼中可復用的部分總結起來,組成一個工具箱,提高工作中嘗試算法的時間成本。希望也能對大家有用,我會持續的進行更新
下面進入正題
潛在的問題記錄
由于SIFT及SURF等特征點檢測算法已經申請專利,其算法實習是獨立于opencv之外的
因此,(假設你已經安裝了opencv)你在搜索網上教程嘗試使用SIFT算法時,你可能遇到下面的問題
’module’ object has no attribute 'xfeatures2d’
這是由于你沒有安裝 opencv-contrib-python 庫導致的,解決方法:
pip install opencv-contrib-python但愿程序已正常運行,但是,取決于你的各種版本配置,你還可能遇到這樣的問題:
…Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'cv::xfeatures2d::SIFT::create’
在 stackflow 上可以找到該問題的若干解決辦法
由于我猜測這是和版本相關的問題,我是用如下方法解決的,很簡單。
先卸載 opencv 和 opencv-contrib-python, 再重新安裝統一版本的兩個庫。依此輸入如下命令:
pip uninstall opencv-python pip uninstall opencv-contrib-python pip install opencv-python==3.3.0.10 pip install opencv-contrib-python==3.3.0.10demo1:計算并繪制特征點
我們先來簡單感受一下SIFT在做什么
調用很簡單:
使用detectAndCompute方法檢測特征點
使用drawKeypoints將特征點繪制處理
# -*- coding: utf-8 -*- """ Created on Thu Nov 8 15:34:41 2018SIFT特征點檢測demo1 計算SIFT特征點并繪制于圖像中@author: zyb_as """import cv2# 1) 以灰度圖的形式讀入圖片 psd_img_1 = cv2.imread('jgz1.jpg', cv2.IMREAD_GRAYSCALE)# 2) SIFT特征計算 # 初始化detector sift = cv2.xfeatures2d.SIFT_create() # 檢測特征點 psd_kp1, psd_des1 = sift.detectAndCompute(psd_img_1, None)# 3) 繪制特征點 #畫出特征點 im_keypoint = cv2.drawKeypoints(psd_img_1, psd_kp1, psd_img_1, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow('image', im_keypoint)#展示圖片 cv2.waitKey(0)#等待按鍵按下 cv2.destroyAllWindows()#清除所有窗口結果如下:
demo2:使用SIFT匹配兩幅圖像
我們可以用SIFT點做些什么呢?
最常見的應用有圖像拼接、模板匹配等
在demo2中,我們假設這樣的應用場景: 已有一張人臉模板,在另一幅圖像中,嘗試判斷其中是否包含這個人的臉。
核心思路是:
1)使用SIFT分別檢測圖片和模板的特征點
2)對兩組特征點進行KNN匹配
3)使用RANSAC剔除誤匹配的點對
4)通過最后留下的配對成功的點對的數量,通過一個閾值,判斷圖像中是否出現了模板人臉對應的同一個人
這里我們對前兩部進行實現練習:
代碼詳見AI ToolBox中的sift_demo2.py
看下效果:
可以看到,強大的SIFT描述子可以很好的匹配出兩幅圖中的同一個人,即使是像金館長這種已經被做成表情包的例子,都可以匹配成功。
同時,對于不是同一個人的情況,即使都是人(都有同樣人類的面部結構),SIFT也能夠進行很好的區分。
參考文章地址
David G.Lowe Distinctive Image Features from Scale-Invariant Keypoints. January 5, 2004.
Python-opencv3 SIFT算法做特征匹配
Python進行SIFT圖像對準
SIFT算法詳解
SIFT detector and descriptor
總結
以上是生活随笔為你收集整理的使用SIFT匹配金馆长表情包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jsp和java使用值_如何将表单的值从
- 下一篇: PID控制器开发笔记之十三:单神经元PI