【火爐煉AI】機(jī)器學(xué)習(xí)050-提取圖像的Star特征
(本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )
對于圖像的特征點(diǎn)售担,前面我們討論過邊緣檢測方法站绪,Harris角點(diǎn)檢測算法等身堡,這些檢測算法檢測的都是圖像的輪廓邊緣壤靶,而不是內(nèi)部細(xì)節(jié),如果要進(jìn)一步提取圖像內(nèi)部細(xì)節(jié)方面的特征舔腾,需要用到SIFT特征提取器和Star特征提取器。上一篇我們講解了SIFT特征提取器,下面我們來介紹Star特征提取器弃鸦。
在博文特征點(diǎn)的基本概念和如何找到它們中提到,OpenCV中具有以下特征點(diǎn)模型:(這些函數(shù)的使用也同樣適用于OpenCV-Python)
1幢痘、Harris-Shi-Tomasi特征檢測器和cv :: GoodFeaturesToTrackDetector
最常用的角點(diǎn)定義是由哈里斯[Harris88]提出的唬格, 這些角點(diǎn),被稱為哈爾角點(diǎn),可以被認(rèn)為是原始的關(guān)鍵點(diǎn)购岗;而后被Shi和Tomasi [Shi94]進(jìn)行了進(jìn)一步擴(kuò)展汰聋,后者被證明對于大多數(shù)跟蹤應(yīng)用來說是優(yōu)越的。由于歷史原因喊积,在OpenCV中叫做”GoodFeatures";
2烹困、簡單的blob檢測器和cv :: SimpleBlobDetector
提出“斑點(diǎn)”的概念。斑點(diǎn)本質(zhì)上沒有那么明確的局部化注服,而是表示可能預(yù)期隨時(shí)間具有一定穩(wěn)定性的感興趣區(qū)域韭邓。
3、FAST特征檢測器和cv :: FastFeatureDetector
最初由Rosten和Drummond [Rosten06]提出的FAST(加速段測試的特征)溶弟,其基本思想是女淑,如果附近的幾個(gè)點(diǎn)與P類似拙友,那么P將成為一個(gè)很好的關(guān)鍵點(diǎn)丐谋。
4蚀腿、SIFT特征檢測器和cv :: xfeatures2d :: SIFT
由David Lowe最初于2004年提出的SIFT特征(尺度不變特征變換)[Lowe04]被廣泛使用温鸽,是許多隨后開發(fā)的特征的基礎(chǔ);SIFT特征計(jì)算花銷很大巨税,但是具有高度的表達(dá)能力适篙。
5昵观、SURF特征檢測器和cv :: xfeatures2d :: SURF
SURF特征(加速魯棒特征)最初由Bay等人于2006年提出[Bay06碳抄,Bay08]愉老,并且在許多方面是我們剛剛討論的SIFT特征的演變。SURF所產(chǎn)生的特征不僅計(jì)算速度快得多剖效,并且在許多情況下嫉入,它對SIFT特征觀察到的方向或照明變化的魯棒性也更強(qiáng)。
6璧尸、Star / CenSurE特征檢測器和cv :: xfeatures2d :: StarDetector
Star特征咒林,也被稱為中心環(huán)繞極值(或CenSurE)功能,試圖解決提供哈爾角點(diǎn)或FAST特征的局部化水平的問題爷光,同時(shí)還提供尺度不變性垫竞。
7、BRIEF描述符提取器和cv :: BriefDescriptorExtractor
BRIEF蛀序,即二進(jìn)制魯棒獨(dú)立基本特征欢瞪,是一種相對較新的算法,BRIEF不找到關(guān)鍵點(diǎn)哼拔;相反引有,它用于生成可通過任何其他可用的特征檢測器算法定位的關(guān)鍵點(diǎn)的描述符。
8倦逐、BRISK算法
Leutenegger等人介紹的BRISK40描述符,試圖以兩種不同的方式改進(jìn)Brief(Leutenegger11)。 首先,BRISK引入了自己的一個(gè)特征檢測器(回想一下檬姥,Brief只是一種計(jì)算描述符的方法)曾我。 其次,BRISK的特征本身雖然與BRIEF原則相似健民,卻嘗試以提高整體功能的魯棒性的方式進(jìn)行二值比較抒巢。
9、ORB特征檢測器和cv :: ORB
創(chuàng)建了ORB功能[Rublee11]秉犹,其目標(biāo)是為SIFT或SURF提供更高速的替代品蛉谜。ORB功能使用非常接近于FAST(我們在本章前面看到的)的關(guān)鍵點(diǎn)檢測器,但是使用了基本上不同的描述符崇堵,主要基于BRIEF型诚。
10、FREAK描述符提取器和cv :: xfeatures2d :: FREAK
FREAK描述符最初是作為Brief鸳劳,BRISK和ORB的改進(jìn)引入的狰贯,它是一個(gè)生物啟發(fā)式的描述符,其功能非常類似于BRIEF赏廓,主要在于它計(jì)算二進(jìn)制比較的領(lǐng)域的方式[Alahi12]涵紊。
11、稠密特征網(wǎng)格和cv :: DenseFeatureDetector類
cv :: DenseFeatureDetector class53的目的只是在圖像中的網(wǎng)格中生成一個(gè)規(guī)則的特征數(shù)組幔摸。
1. 使用Star提取圖像特征點(diǎn)
具體代碼和我上一篇文章很類似摸柄,可以先看看【火爐煉AI】機(jī)器學(xué)習(xí)049-提取圖像的SIFT特征點(diǎn)
star = cv2.xfeatures2d.StarDetector_create() # 構(gòu)建Star特征點(diǎn)檢測器對象
keypoints = star.detect(gray, None) # 用Star特征點(diǎn)檢測器對象檢測灰度圖中的特征點(diǎn)
# 將keypoints繪制到原圖中
img_sift = np.copy(img)
cv2.drawKeypoints(img, keypoints, img_sift, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
#畫在原圖上,第一個(gè)是原圖既忆,第二個(gè)image是目標(biāo)圖驱负,這個(gè)flags既包括位置又包括方向,也有只有位置的flags
#圓圈的大小表示特征的重要性大小尿贫,主要在桌子腿上电媳,腿上邊緣和棱角比較多,更有代表性
# 顯示繪制有特征點(diǎn)的圖像
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')
########################小**********結(jié)###############################
1庆亡,Star特征點(diǎn)的提取方法在代碼上很容易實(shí)現(xiàn)匾乓,cv2.xfeatures2d.StarDetector_create()這個(gè)函數(shù)就可以構(gòu)建Star檢測器并用detect方法就可以實(shí)現(xiàn)。
2又谋,Star特征點(diǎn)提取器和SIFT特征點(diǎn)提取器的結(jié)果有很多相似之處拼缝,都是在桌腿附近有很多特征點(diǎn)。
#################################################################
注:本部分代碼已經(jīng)全部上傳到(我的github)上彰亥,歡迎下載咧七。
參考資料:
1, Python機(jī)器學(xué)習(xí)經(jīng)典實(shí)例,Prateek Joshi著任斋,陶俊杰继阻,陳小莉譯