OpenCV Fast角点检测
生活随笔
收集整理的這篇文章主要介紹了
OpenCV Fast角点检测
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
FAST是一種用于角點檢測的算法,該算法的原理是取圖像中檢測點,以改點為圓心的周圍鄰域內像素點判斷監測點是否為角點。
OpenCV中的FAST檢測算法是用傳統方法實現的。
實例化fast
fast = cv.FastFeatureDetector_create(threshold, nonmaxSuppression)參數:
- threshold:閥值t,有默認值10
- nonmaxSuppression:是否進行非極大值抑制,默認值True
返回:
- Fast:創建的FastFeatureDetector對象
利用fast.detect檢測關鍵點,沒有對應的關鍵點描述
kp = fast.detect(igrayImg, None)參數:
- gray:進行關鍵點檢測的圖像,注意是灰度圖形
返回:
- kp:關鍵點信息,包括位置,尺度,方向信息
將關鍵點檢測結果繪制在圖像上
cv.drawKeypoints(image, keypoints, outputimage, color, flags)代碼實現
import numpy as np import cv2 as cv from matplotlib import pyplot as plt# 1.讀取圖像 img = cv.imread("./1.jpg")# 2.Fast角點檢測 # 2.1創建一個Fast對象,傳入閥值,注意:可以處理彩色空間圖像 fast = cv.FastFeatureDetector_create(threshold=30)# 2.2檢測圖像上的關鍵點 kp = fast.detect(img, None)# 2.3在圖像上繪制關鍵點 img2 = cv.drawKeypoints(img, kp, None, color=(0, 0, 255))# 2.4輸出默認參數 print("Threshold:{}".format(fast.getThreshold())) print("nonmaxSuppression:{}".format(fast.getNonmaxSuppression())) print("neighborhood:{}".format(fast.getType())) print("Total Keypoints with nonmaxSuppression:{}".format(len(kp)))# 2.5關閉非極大值抑制 fast.setNonmaxSuppression(0) kp = fast.detect(img, None)print("Total Keypoints without nonmaxSuppression:{}".format(len(kp)))# 2.6繪制為進行非極大值抑制效果 img3 = cv.drawKeypoints(img, kp, None, color=(0, 0, 255))# 3.繪制圖像 fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 8), dpi=100) axes[0].imshow(img[:, :, ::-1]) axes[0].set_title("原圖") axes[1].imshow(img2[:, :, ::-1]) axes[1].set_title("加入非極大值抑制") axes[2].imshow(img3[:, :, ::-1]) axes[2].set_title("未加入非極大值抑制") plt.show()
Fast算法:
若一個像素周圍有一定數量的像素與該點像素值不同,則認為其為角點。
Fast算法的缺點:
- 獲取的候選點比較多
- 特征點的選取不是最優的,因為它的效果取決于要解決的問題和角點的分布情況。
- 進行非特征點判別時大量的點被丟棄
- 檢測到的很多特征點都是相鄰的
前 3個問題可以通過機器學習的方法解決,最后一個問題可以使用非最大值抑制的方法解決。
Fast算法比其它角點的檢測算法快,但是在噪聲較高時不夠穩定,這需要設置合適的閥值。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的OpenCV Fast角点检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV SIFT检测关键点
- 下一篇: OpenCV ORB角点检测