日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

角点检测——发现图像的特征

發布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 角点检测——发现图像的特征 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 寫在最前
      • 角點檢測是什么?有什么用?
      • OpenCV中的角點檢測
      • Harris角點檢測
    • Shi-Tomasi 角點檢測
    • 特征檢測,從ORB說起
    • 寫在最后
      • 往期文章
      • 下載

寫在最前

不知不覺,漫談計算機視覺也寫了四篇了,我們從最基本的除噪引出計算機圖形學的各種技術,然后又學會了發現圖像的輪廓,發現圖像的邊緣,等等,但是始終沒有接觸一個核心的問題——特征。我們肯定經常在數據科學或者人工智能領域不斷的聽到這個詞匯,我們之前做的內容比如輪廓發現,計算輪廓面積周長,發現圖像邊緣等等其實也都或多或少能夠在很多牽扯到圖像的領域中用來發現或者創造特征,但是卻始終沒有直接接觸計算機視覺中的特征這一概念。而角點檢測算得上是第一次真正的接觸。

角點檢測是什么?有什么用?

角點檢測,一如其名,就是檢測圖像中的角點的。本質上角點是一種很容易在圖像中定位的局部特征,并且廣泛存在于人造物體中,如桌子椅子車子房子等等(自然界中多曲線,這個你可以在散步的時候觀察一下)。另外角點可以被精確地檢測(即使是亞像素級精度)這點對于實用也非常有價值。

至于角點的用處,本質上來說,角點是作為圖像的一種特征來使用的。我們可以想象一下拼圖,很明顯角點信息對于圖像的拼接,對齊都有極大的價值,而圖像或者圖像中的物體發生變化時,如圖像檢測,運動追蹤等也同樣具有不小的價值。

OpenCV中的角點檢測

我們的主要工具還是OpenCV,所以還是要主講OpenCV中的角點檢測。比較簡單的角點檢測,OpenCV中的角點檢測主要有Harris角點檢測,Shi-Tomasi角點檢測。除了一般性的角點檢測外,OpenCV中還有一些更正式的基于角點檢測的特征點檢測算法,如ORB,ASIFT等等。這些正式的特征點檢測器更適合我們直接使用。不過由淺入深,我們還是需要從最基本的角點檢測器講起。

Harris角點檢測

Harris角點檢測的基本假設來自于人眼對角點的識別,對于整個圖像我們選擇一個小窗作為我們實際觀察的部分,如果一個點上下左右移動后他周圍的灰度變化比較大,那么他應該就是一個角點,如果延一個方向變化大一個方向變化小,那么他就很可能是一條線。這樣我們通過設定一個固定窗口,對比其左右變化就可以得到區域中的角點了。

同樣也因此,我們需要設定三個參數,觀察窗口的大小,需要考慮領域(也就是角點范圍,或者說這個角點可能有多大)的大小,以及閾值。對于Harris算法,我們可以直接調用OpenCV中的cornerHarris算法,而這三個關鍵參數,則是

  • blockSize —— 角點檢測中要考慮的領域大小。

  • ksize —— Sobel 求導中使用的窗口大小

  • k ——Harris 角點檢測方程中的自由參數,取值參數為 [0.04,0.06].

下面是有關代碼,這里我們使用了opencv的github項目中的一張圖片,你可以到opencv的github下載原圖片或者fongtian的github項目–漫談計算機視覺下載所有代碼和圖片:

img = cv2.imread('/home/fonttian/Data/image/OpenCV/blox.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # cornerHarris函數圖像格式為 float32 ,因此需要將圖像轉換 float32 類型 gray = np.float32(gray)blockSize = 2 # 領域尺寸 ksize = 3 # 口徑尺寸 k = 0.04 # Harris dst = cv2.cornerHarris(src=gray, blockSize=blockSize, ksize=ksize, k=k) # 變量a的閾值為0.01 * dst.max(),如果dst的圖像值大于閾值,那么該圖像的像素點設為True,否則為False # 將圖片每個像素點根據變量a的True和False進行賦值處理,賦值處理是將圖像角點勾畫出來 a = dst > 0.01 * dst.max() img[a] = [0, 0, 255] # 顯示圖像 cv2.imshow('corners', img)

上面的代碼中我們并沒有直接使用獲取的焦點數據,而是對數據進行了過濾,然后再繪制角點,這樣避免了角點過多的問題,除此之外,我們也可以使用一個更合適的角點檢測器來簡化我們的代碼,那就是——goodFeaturesToTrack函數,具體使用請看接下來的代碼。

Shi-Tomasi 角點檢測

Shi-Tomasi 角點檢測是對Harris角點檢測的改進。由于 Harris 角點檢測算法的穩定性和與k 值這個經驗數值有關,因此并不能太好的直接獲得最佳數值。但是Shi-Tomasi 發現,角點的穩定性其實和矩陣 M 的較小特征值有關,于是直接用較小的那個特征值作為分數,于是便有了不需要調整k值的新算法。

下面的第一個公式是Harris的原始分數公式,第二個是《Good_Features_to_Track》論文中改進后的分數公式
R=λ1λ2?k(λ1+λ2)2R=\lambda_1\lambda_2-k(\lambda_1+\lambda_2)^2 R=λ1?λ2??k(λ1?+λ2?)2

R=min(λ1?λ2)R=min(\lambda_1-\lambda_2) R=min(λ1??λ2?)

至于Shi-Tomasi 角點檢測的使用,我們可以直接在OpenCV中使用goodFeaturesToTrack函數獲取最好的幾個點,并選定角點檢測方法為Shi-Tomasi算法,該函數具體參數如下:

  • maxCorners:返回角點的最大數目,值為0表表示沒有設置最大值限制,返回所有檢測到的角點。
  • qualityLevel:質量系數(小于1.0的正數,一般在0.01-0.1之間),表示可接受角點的最低質量水平。該系數乘以最好的角點分數(也就是上面較小的那個特征值),作為可接受的最小分數;例如,如果最好的角點分數值為1500且質量系數為0.01,那么所有質量分數小于15的角都將被忽略。
  • minDistance:角之間最小歐式距離,忽略小于此距離的點。
  • mask:可選的感興趣區域,指定想要檢測角點的區域。
  • blockSize:默認為3,角點檢測的鄰域大小(窗口尺寸)
  • useHarrisDetector:用于指定角點檢測的方法,如果是true則使用Harris角點檢測,false則使用Shi-Tomasi算法。默認為False。
  • k:默認為0.04,Harris角點檢測時使用,Shi-Tomasi不需要。

這個函數的特殊之處就在于,他幫助我們完成了點的篩選,之前我們通過自己設定的dst > 0.01 * dst.max()進行參數篩選。而該函數首先獲取所有右焦點,然后忽略低于質量系數的角點并排序。之后保留質量最高的一個焦點,然后刪除最小距離內的角點,并依次進行該步驟并獲得最終的N個最佳角點。代碼和效果如下:

img = cv2.imread('/home/fonttian/Data/image/OpenCV/blox.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) corners = cv2.goodFeaturesToTrack(gray, maxCorners, qualityLevel, minDistance)# print(len(corners)) # print(corners) for i in corners:x, y = i.ravel()cv2.circle(img, (x, y), 2, (0, 0, 255), -1)cv2.imshow('Shi-Tomasi', img)

特征檢測,從ORB說起

我們之前所說的都是直接的角點檢測,而角點本質是一種圖像的特征點,而除了這些直接獲取角點的算法外,我們還有需要很多其他的特征點檢測算法可以直接使用,而這些特征點檢測算法同樣都離不開各種基礎算子。比如ORB算法。

RB特征是將FAST特征點的檢測方法與BRIEF特征描述子結合起來,并在它們原來的基礎上做了改進與優化。

首先,它利用FAST特征點檢測的方法來檢測特征點,然后利用Harris角點的度量方法,從FAST特征點從挑選出Harris角點響應值最大的N個特征點。

除了上述的描述外,ORB算法本身還牽扯到很多內容,比如旋轉不變性(FAST特征本身沒有),多尺度不變性,非極大值抑制等等,需要想要詳細的了解類似ORB算法的特征提取算法,是需要大量筆墨的所以我們放在下一章節再來講。不過在OpenCV中使用起來卻十分簡單:

img = cv2.imread('/home/fonttian/Data/image/OpenCV/blox.jpg')orb = cv2.ORB_create()kp = orb.detect(img, None)kp, des = orb.compute(img, kp)img = cv2.drawKeypoints(img, kp, img, color=(0, 255, 0), flags=0)cv2.imshow('p', img)

上面的第一行代碼是讀取圖片,第二行代碼就是ORB的創建,之后使用detect進行特征檢測,并使用compute進行特征的計算,最終繪制。這里des實際上并沒有用到,之后我們再講解具體怎么使用。但是僅從代碼分析,我們可以很清楚的看到創建,檢測,繪制各只需要一行代碼,而繪制這一步,我們甚至只需要調用OpenCV中封裝好的類即可,可以說非常簡單了。效果則如下所示,具體繪制效果我們也可以通過參數修改:

與orb類似的事,opecv中還有很多其他的有用的特征檢測器,使用起來同樣十分方便。我們將會在下一篇文章中講解。

寫在最后

往期文章

  • 從去除噪點的說起,有OpenCV要什么PS?
  • 計算機視覺的基石-濾波
  • 發現你的身形——OpenCV圖像輪廓
  • 圖像邊緣檢測,檢測亦或簡化

下載

fongtian的github項目–漫談計算機視覺

總結

以上是生活随笔為你收集整理的角点检测——发现图像的特征的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 96av在线视频 | 91学生片黄 | 国产成人无码精品久久久性色 | 久久精品1| 亚洲国产日韩欧美在线观看 | 亚洲av久久久噜噜噜熟女软件 | 亚洲最新偷拍 | 少妇高潮一区二区三区99 | 日本一区二区三区在线播放 | 欧美xxxxx视频 | av噜噜色 | 国产精品69久久久久孕妇欧美 | 激情久久久| 日本中文在线 | 高清av一区二区 | 黑人满足娇妻6699xx | 天干夜天干天天天爽视频 | 免费av不卡| 中文字幕精品一二三四五六七八 | 欧美小视频在线观看 | 疯狂做爰的爽文多肉小说王爷 | 日本黄色录相 | 99热这里只有精品首页 | 久久艹中文字幕 | 亚洲国产成人精品91久久久 | 男女操操操 | 亚洲天堂999 | 在线观看成人免费视频 | aaaaaa毛片| 亚洲综合久 | 999视频在线 | 日本爽爽| 新x8x8拨牐拨牐永久免费影库 | av在线播放不卡 | 中文字幕导航 | 国产大片一区二区 | 日韩短视频 | 亚洲va欧美 | 日本少妇久久久 | 男女操操操 | 久久视频99 | 日韩中文字幕免费 | 欧美一级免费黄色片 | 欧美日韩在线观看视频 | 在线观看亚洲精品视频 | 不卡一区二区在线观看 | 天天干天天操心 | 国产一级二级三级在线观看 | 成人网在线 | 艳母动漫在线播放 | 一区二区三区在线视频播放 | 69精品人妻一区二区三区 | 奇米777视频 | 中文字幕在线观看网址 | 96日本xxxxxⅹxxx70 | 日本高清视频一区二区三区 | 成人福利免费视频 | 九九视频网| 中文字幕在线播 | 超碰在线98 | 丁香婷婷六月天 | av成人天堂 | 欧美日韩综合网 | 国产羞羞| 先锋影音av在线 | 抱着老师的嫩臀猛然挺进视频 | 神马久久精品 | 69色堂| 欧美性另类 | 琪琪色综合网 | 午夜影院在线视频 | 国产精品一区二区欧美 | 就爱av| 国产在线综合视频 | 亚洲国产精品成人av | 99国产精品久久久久99打野战 | 97人妻精品一区二区三区动漫 | 色婷婷aⅴ一区二区三区 | 97自拍网 | 亚洲自拍三区 | 国产又粗又长又硬免费视频 | 电影桑叶2在线播放完整版 222aaa | av无码精品一区二区三区宅噜噜 | 草草视频在线 | 亚洲一区二区三区四区视频 | 777在线视频 | 蜜桃av噜噜一区二区三区网址 | 夜夜天天拍拍 | 欧美精品videos极品 | 国内久久精品 | 在线国产视频一区 | 古装三级吃奶做爰 | 国产美女91| 日韩中文字 | 四色成人网 | www.天天操| 国产99久久久欧美黑人 | 韩国毛片基地 | 精品国产黄色 |