【火炉炼AI】机器学习050-提取图像的Star特征
【火爐煉AI】機器學習050-提取圖像的Star特征
(本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )
對于圖像的特征點,前面我們討論過邊緣檢測方法,Harris角點檢測算法等,這些檢測算法檢測的都是圖像的輪廓邊緣,而不是內部細節,如果要進一步提取圖像內部細節方面的特征,需要用到SIFT特征提取器和Star特征提取器。上一篇我們講解了SIFT特征提取器,下面我們來介紹Star特征提取器。
在博文特征點的基本概念和如何找到它們中提到,OpenCV中具有以下特征點模型:(這些函數的使用也同樣適用于OpenCV-Python)
1、Harris-Shi-Tomasi特征檢測器和cv :: GoodFeaturesToTrackDetector
最常用的角點定義是由哈里斯[Harris88]提出的, 這些角點,被稱為哈爾角點,可以被認為是原始的關鍵點;而后被Shi和Tomasi [Shi94]進行了進一步擴展,后者被證明對于大多數跟蹤應用來說是優越的。由于歷史原因,在OpenCV中叫做”GoodFeatures";
2、簡單的blob檢測器和cv :: SimpleBlobDetector
提出“斑點”的概念。斑點本質上沒有那么明確的局部化,而是表示可能預期隨時間具有一定穩定性的感興趣區域。
3、FAST特征檢測器和cv :: FastFeatureDetector
最初由Rosten和Drummond [Rosten06]提出的FAST(加速段測試的特征),其基本思想是,如果附近的幾個點與P類似,那么P將成為一個很好的關鍵點。
4、SIFT特征檢測器和cv :: xfeatures2d :: SIFT
由David Lowe最初于2004年提出的SIFT特征(尺度不變特征變換)[Lowe04]被廣泛使用,是許多隨后開發的特征的基礎;SIFT特征計算花銷很大,但是具有高度的表達能力。
5、SURF特征檢測器和cv :: xfeatures2d :: SURF
SURF特征(加速魯棒特征)最初由Bay等人于2006年提出[Bay06,Bay08],并且在許多方面是我們剛剛討論的SIFT特征的演變。SURF所產生的特征不僅計算速度快得多,并且在許多情況下,它對SIFT特征觀察到的方向或照明變化的魯棒性也更強。
6、Star / CenSurE特征檢測器和cv :: xfeatures2d :: StarDetector
Star特征,也被稱為中心環繞極值(或CenSurE)功能,試圖解決提供哈爾角點或FAST特征的局部化水平的問題,同時還提供尺度不變性。
7、BRIEF描述符提取器和cv :: BriefDescriptorExtractor
BRIEF,即二進制魯棒獨立基本特征,是一種相對較新的算法,BRIEF不找到關鍵點;相反,它用于生成可通過任何其他可用的特征檢測器算法定位的關鍵點的描述符。
8、BRISK算法
Leutenegger等人介紹的BRISK40描述符,試圖以兩種不同的方式改進Brief(Leutenegger11)。 首先,BRISK引入了自己的一個特征檢測器(回想一下,Brief只是一種計算描述符的方法)。 其次,BRISK的特征本身雖然與BRIEF原則相似,卻嘗試以提高整體功能的魯棒性的方式進行二值比較。
9、ORB特征檢測器和cv :: ORB
創建了ORB功能[Rublee11],其目標是為SIFT或SURF提供更高速的替代品。ORB功能使用非常接近于FAST(我們在本章前面看到的)的關鍵點檢測器,但是使用了基本上不同的描述符,主要基于BRIEF。
10、FREAK描述符提取器和cv :: xfeatures2d :: FREAK
FREAK描述符最初是作為Brief,BRISK和ORB的改進引入的,它是一個生物啟發式的描述符,其功能非常類似于BRIEF,主要在于它計算二進制比較的領域的方式[Alahi12]。
11、稠密特征網格和cv :: DenseFeatureDetector類
cv :: DenseFeatureDetector class53的目的只是在圖像中的網格中生成一個規則的特征數組。
1. 使用Star提取圖像特征點
具體代碼和我上一篇文章很類似,可以先看看【火爐煉AI】機器學習049-提取圖像的SIFT特征點
star = cv2.xfeatures2d.StarDetector_create() # 構建Star特征點檢測器對象 keypoints = star.detect(gray, None) # 用Star特征點檢測器對象檢測灰度圖中的特征點 # 將keypoints繪制到原圖中 img_sift = np.copy(img) cv2.drawKeypoints(img, keypoints, img_sift, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) #畫在原圖上,第一個是原圖,第二個image是目標圖,這個flags既包括位置又包括方向,也有只有位置的flags #圓圈的大小表示特征的重要性大小,主要在桌子腿上,腿上邊緣和棱角比較多,更有代表性# 顯示繪制有特征點的圖像 plt.figure(12,figsize=(15,30)) plt.subplot(121) img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) plt.imshow(img_rgb) plt.title('Raw Img')plt.subplot(122) img_sift_rgb=cv2.cvtColor(img_sift,cv2.COLOR_BGR2RGB) plt.imshow(img_sift_rgb) plt.title('Img with Star features')########################小**********結###############################
1,Star特征點的提取方法在代碼上很容易實現,cv2.xfeatures2d.StarDetector_create()這個函數就可以構建Star檢測器并用detect方法就可以實現。
2,Star特征點提取器和SIFT特征點提取器的結果有很多相似之處,都是在桌腿附近有很多特征點。
#################################################################
注:本部分代碼已經全部上傳到(我的github)上,歡迎下載。
參考資料:
1, Python機器學習經典實例,Prateek Joshi著,陶俊杰,陳小莉譯
總結
以上是生活随笔為你收集整理的【火炉炼AI】机器学习050-提取图像的Star特征的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vscode下载安装使用教程_Vscod
- 下一篇: UOS系统启动盘制作