《計算機視覺》——角點檢測和特征提取sift

角點檢測

角點的定義

從直觀上理解,角點是圖像中兩條或多條邊緣的交點,在圖像中表現為局部區域內的灰度變化較為劇烈的點。在數學和計算機視覺中,角點可以被定義為在兩個或多個方向上具有顯著變化的點。比如在一幅建筑物的圖像中,建筑物的頂點就是典型的角點;在一張棋盤格的圖像中,棋盤格的交點也屬于角點。
在這里插入圖片描述

角點檢測的作用
  • 特征提取:角點是圖像的重要特征之一,由于其具有獨特的位置和局部特征,可用于圖像的特征描述,便于后續的圖像匹配、目標識別等操作。例如,在物體識別中,通過檢測物體圖像中的角點并與數據庫中物體的角點特征進行匹配,從而識別出物體。
  • 圖像配準:在將不同時間、不同視角或不同傳感器獲取的圖像進行融合時,角點可以作為圖像之間的對應點,幫助實現圖像的精確配準。例如,在衛星圖像拼接中,通過檢測不同衛星圖像中的角點并進行匹配,可以將多幅圖像拼接成一幅完整的圖像。
  • 運動跟蹤:在視頻序列中,通過跟蹤角點的運動軌跡,可以分析物體的運動狀態。比如在運動分析中,跟蹤運動員身體上的角點,可以得到運動員的動作軌跡和運動參數。
常見的角點檢測算法
  • Harris 角點檢測算法:由 Chris Harris 和 Mike Stephens 在 1988 年提出。該算法基于圖像局部的自相關函數,通過計算圖像在各個方向上的灰度變化,得到一個角點響應函數 R。如果 R 的值超過一定的閾值,則認為該點是角點。Harris 角點檢測算法具有旋轉不變性,但對尺度變化比較敏感。
    Shi-Tomasi 角點檢測算法:是對 Harris 角點檢測算法的改進。該算法通過計算圖像塊的最小特征值來判斷角點,相比于 Harris 算法,Shi-Tomasi 算法在角點檢測的準確性上有了一定的提高,并且在目標跟蹤等應用中表現更優。
  • SIFT(尺度不變特征變換)算法:不僅可以檢測角點,還具有尺度不變性、旋轉不變性和光照不變性等優點。SIFT 算法通過在不同尺度空間上檢測極值點,并對這些極值點進行精確定位和描述,生成 128 維的特征向量,用于后續的特征匹配等操作。不過,SIFT 算法計算復雜度較高,運行速度較慢。
  • SURF(加速穩健特征)算法:是 SIFT 算法的加速版本,采用了積分圖像和 Haar 小波特征,大大提高了算法的運行速度,同時也具有較好的尺度不變性和旋轉不變性。在實際應用中,SURF 算法在處理速度和特征描述能力上取得了較好的平衡。
  • ORB(Oriented FAST and Rotated BRIEF)算法:結合了 FAST(Features from Accelerated Segment Test)角點檢測算法和 BRIEF(Binary Robust Independent Elementary Features)特征描述子。FAST 算法用于快速檢測角點,BRIEF 算法用于生成二進制特征描述子。ORB 算法具有計算速度快、內存占用小等優點,在實時性要求較高的應用中得到了廣泛應用。

角點檢測實例

對黃鶴樓的圖片進行角點檢測:
在這里插入圖片描述

'''角點檢測'''
import cv2
import numpy as np#角點指圖像中局部區域與周圍區域有較大灰度變化的點或像素。
# cornerHarris(img,blockSize,ksize,k[,dst[,borderType]])-> dst
# img:輸入圖像。
#blockSize:角點檢測中要考慮的領域大小。
# ksize:Sobel求導中使用的日大小。
# k: Harris角點檢測方程中的自由參數,取值參數為[0.04,0.06]。
# dst:返回numpy.ndarray對象,大小和src相同,值越大,對應像素點是角的概率越高img = cv2.imread('huanghelou.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst = cv2.cornerHarris(gray,4,3,0.04)
# 標記檢測到的角點
img[dst>0.01*dst.max()]=[0,0,255]
# 這里通過對角點響應進行閩值處理,標記出檢測到的角點。
# 0.05 * dst.max()是一個值,大于這個值的像素點會被標記為紅色。
cv2.imshow('img',img)
cv2.waitKey(0)

結果:
在這里插入圖片描述
可以看出圖片中部分角點已經被標記出來,可用通過更改閾值大小進行角點標記的范圍更改。

特征提取sift

SIFT(Scale-Invariant Feature Transform,尺度不變特征變換)是一種非常經典且強大的計算機視覺算法,用于圖像的特征提取和描述,以下是對它的詳細介紹:

SIFT 算法的特點
  • 尺度不變性:能夠在不同尺度下檢測到相同的特征點,無論物體在圖像中是大是小,SIFT 算法都能準確地找到對應的特征。
  • 旋轉不變性:通過計算特征點的主方向,使描述子具有旋轉不變性,即使物體在圖像中發生了旋轉,也能正確匹配特征。
  • 光照不變性:SIFT 特征對光照變化具有一定的魯棒性,在不同的光照條件下,仍然可以提取到穩定的特征。
  • 獨特性:SIFT 特征描述子具有較高的獨特性,能夠很好地區分不同的物體和場景,降低誤匹配的概率。
SIFT 算法的主要步驟
  • 尺度空間極值檢測:使用不同尺度的高斯濾波器對圖像進行卷積,生成高斯金字塔。然后通過相鄰尺度間的差分(DoG,Difference of Gaussians)運算,得到 DoG 金字塔。在 DoG 金字塔中,檢測每個點在其鄰域內(包括同層和上下層)的極值點,這些極值點就是可能的特征點。
  • 關鍵點定位:對檢測到的極值點進行精確定位,通過擬合三維二次函數來確定關鍵點的精確位置和尺度。同時,去除低對比度的關鍵點和位于邊緣上的關鍵點,以提高特征點的穩定性和可靠性。
  • 方向分配:計算每個關鍵點鄰域內的梯度方向直方圖,根據直方圖的峰值確定關鍵點的主方向。為每個關鍵點分配一個或多個方向,使特征描述子具有旋轉不變性。
  • 關鍵點描述:以關鍵點為中心,取一個大小固定的鄰域窗口,并將其旋轉到關鍵點的主方向。將該窗口劃分為若干個子區域,計算每個子區域內的梯度方向直方圖。將所有子區域的直方圖連接起來,形成一個 128 維的特征向量,即 SIFT 特征描述子。
SIFT 算法的應用場景
  • 目標識別:通過提取目標物體的 SIFT 特征,并與數據庫中已知物體的特征進行匹配,可以實現對目標物體的識別。例如,在安防監控中,識別特定的人員或物體。
  • 圖像拼接:在全景圖像拼接中,利用 SIFT 特征匹配不同圖像之間的重疊區域,從而實現圖像的準確拼接。
  • 三維重建:從多幅圖像中提取 SIFT 特征,通過特征匹配計算圖像之間的相對位置和姿態,進而構建物體或場景的三維模型。
  • 圖像檢索:根據圖像的 SIFT 特征,在圖像數據庫中快速檢索到與查詢圖像相似的圖像,用于圖像管理和檢索系統。
SIFT 算法的局限性
  • 計算復雜度高:SIFT 算法的計算量較大,尤其是在處理高分辨率圖像時,運算時間較長,對硬件要求較高。
  • 專利問題:SIFT 算法受專利保護,在商業應用中需要獲得相應的授權,這在一定程度上限制了它的廣泛應用。

sift算法實例

對一張男人的圖片進行特征提取:
在這里插入圖片描述

'''-----------特征提取sift---------------------'''
# # 檢測圖像中的關鍵點
# # cv2.SIFT_create()
# #cv2.xfeatures2d.SIFT_create()#創建一個sift特征的提取對象#
# sift.detect(img)在圖像中查找關鍵點phone = cv2.imread('man.png')
phone_gray = cv2.cvtColor(phone,cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create() # sift對象
kp = sift.detect(phone_gray)
# kp.pt:關鍵點的(x,y)
# 坐標。
# kp.size:關鍵點的大小(尺度):
# kp.angle:關鍵點的方向。
# kp.response:關鍵點的響應值。
# kp.octave:關鍵點所在的金字塔層級。
#查找關鍵點
# drawKeypoints(image,keypoints,outImage, color=None, flags=None)# image:原始圖片
# keypoints:從原圖中獲得的關鍵點,這也是畫圖時所用到的數據
# outputimage:輸出圖像,可以是原始圖片,也可以是None
# color:顏色設置,通過修改(b,g,r)的值,更改畫筆的顏色,b=藍色,g=綠色,r=紅色。繪制富有信息的關鍵點。# flags:繪圖功能的標識設置
phone_sift = cv2.drawKeypoints(phone,kp, None,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('phone_sift',phone_sift)
cv2.waitKey(0)
# # 使用sift.compute()計算關鍵點描述符,方便后期的特征匹配
kp,des = sift.compute(phone,kp)
print(np.array(kp).shape,des.shape)
# 輸出關鍵點的形狀和描述符的形狀。
# np.array(kp).shape 表示關鍵點的數量和屬性。
# des.shape 表示描述符的數量和屬性。

結果:
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70165.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70165.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70165.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WWW 2025 | 中南、微軟提出端到端雙重動態推薦模型,釋放LLM在序列推薦中的潛力...

©PaperWeekly 原創 作者 | 殷珺 單位 | 中南大學碩士研究生 研究方向 | 大語言模型、推薦系統 論文題目: Unleash LLMs Potential for Sequential Recommendation by Coordinating Dual Dynamic Index Mechanism 論文鏈接: https://openreview.net…

c# 2025/2/17 周一

16. 《表達式,語句詳解4》 20 未完。。 表達式,語句詳解_4_嗶哩嗶哩_bilibili

數據結構與算法面試專題——堆排序

完全二叉樹 完全二叉樹中如果每棵子樹的最大值都在頂部就是大根堆 完全二叉樹中如果每棵子樹的最小值都在頂部就是小根堆 設計目標:完全二叉樹的設計目標是高效地利用存儲空間,同時便于進行層次遍歷和數組存儲。它的結構使得每個節點的子節點都可以通過簡…

iOS開發書籍推薦 - 《高性能 iOS應用開發》(附帶鏈接)

引言 在 iOS 開發的過程中,隨著應用功能的增加和用戶需求的提升,性能優化成為了不可忽視的一環。尤其是面對復雜的界面、龐大的數據處理以及不斷增加的后臺操作,如何確保應用的流暢性和響應速度,成為開發者的一大挑戰。《高性能 …

微信小程序的制作

制作微信小程序的過程大致可以分為幾個步驟:從環境搭建、項目創建,到開發、調試和發布。下面我會為你簡要介紹每個步驟。 1. 準備工作 在開始開發微信小程序之前,你需要確保你已經完成了以下幾個步驟: 注冊微信小程序賬號&…

LabVIEW 中dde.llbDDE 通信功能

在 LabVIEW 功能體系中,位于 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform\dde.llb 的 dde.llb 庫占據著重要的地位。作為一個與動態數據交換(DDE)緊密相關的庫文件,它為 LabVIEW 用戶提供了與其他…

gitte遠程倉庫修改后,本地沒有更新,本地與遠程倉庫不一致

問題 :gitte遠程倉庫修改后,本地沒有更新,本地與遠程倉庫不一致 現象: [cxqiZwz9fjj2ssnshikw14avaZ rpc]$ git push Username for https://gitee.com: beihangya Password for https://beihangyagitee.com: To https://gitee.c…

組合模式詳解(Java)

一、組合模式基本概念 1.1 定義與類型 組合模式是一種結構型設計模式,它通過將對象組織成樹形結構,來表示“部分-整體”的層次關系。這種模式使得客戶端可以一致地對待單個對象和組合對象,從而簡化了客戶端代碼的復雜性。組合模式的核心在于定義了一個抽象組件角色,這個角…

LabVIEW危化品倉庫的安全監測系統

本案例展示了基于LabVIEW平臺設計的危化品倉庫安全監測系統,結合ZigBee無線通信技術、485串口通訊技術和傳感器技術,實現了對危化品倉庫的實時無線監測。該系統不僅能提高安全性,還能大幅提升工作效率,確保危化品倉庫的安全運營。…

【私人筆記】Web前端

Vue專題 vue3 vue3 頁面路徑前面添加目錄 - 路由base設置 - vite設置base https://mbd.baidu.com/ma/s/XdDrePju 修改vite.config.js export default defineConfig({base: /your-directory/,// 其他配置... }); vue2 uniapp 【持續更新】uni-app學習筆記_uniapp快速復制一…

數倉搭建:DWB層(基礎數據層)

維度退化: 通過減少表的數量和提高數據的冗余來優化查詢性能。 在維度退化中,相關的維度數據被合并到一個寬表中,減少了查詢時需要進行的表連接操作。例如,在銷售數據倉庫中,客戶信息、產品信息和時間信息等維度可能會被合并到一…

【Linux】進程間通信——進程池

文章目錄 進程池什么進程池進程池的作用 用代碼模擬進程池管道信息任務類InitProcesspool()DisPatchTasks()任務的執行邏輯(Work)CleanProcessPool() 封裝main.ccChannel.hppProcessPool.hppTask.hppMakefile 總結總結 進程池 什么進程池 進程池&#…

13-跳躍游戲 II

給定一個長度為 n 的 0 索引整數數組 nums。初始位置為 nums[0]。 每個元素 nums[i] 表示從索引 i 向后跳轉的最大長度。換句話說&#xff0c;如果你在 nums[i] 處&#xff0c;你可以跳轉到任意 nums[i j] 處: 0 < j < nums[i] i j < n 返回到達 nums[n - 1] 的最…

Qt的QToolBox的使用

QToolBox 是 Qt 框架中的一個控件&#xff0c;用于創建一個可折疊的“工具箱”界面&#xff08;類似 Windows 資源管理器的側邊欄&#xff09;。每個子項可以展開或折疊&#xff0c;適合用于分組顯示多個功能模塊。以下是其基本用法和示例&#xff1a; 1. 基本用法 創建并添加…

《DeepSeek 一站式工作生活 AI 助手》

最近國產AI工具DeepSeek在全球火出圈&#xff0c;登頂多個國家應用商店&#xff0c;下載量一路飆升。這匹AI “黑馬” 到底憑什么征服全球用戶&#xff1f;讓我們全方位解鎖DeepSeek——從基礎入門到高階玩法&#xff0c;從實用技巧到隱藏功能。 DeepSeek是一款功能強大的國產A…

Java中CompletableFuture異步工具類

參考&#xff1a;CompletableFuture 詳解 | JavaGuide 實際項目中&#xff0c;一個接口可能需要同時獲取多種不同的數據&#xff0c;然后再匯總返回&#xff0c;舉個例子&#xff1a;用戶請求獲取訂單信息&#xff0c;可能需要同時獲取用戶信息、商品詳情、物流信息、等數據。…

Oracle Rac 多路徑鏈路不穩定引發IO降速-光弱

一、背景 今天突然被異地的同事拉來開遠程會議&#xff0c;會議內容是開發反饋每天9點左右有個sqlldr 命令的腳本調用突然執行很慢&#xff0c;以前幾秒的導入操作現在需要30-60s左右&#xff0c;而且數據量基本相同。 二、分析 1&#xff09;、查看ASH報告 從報告上確認是數…

哈希表-兩個數的交集

代碼隨想錄-刷題筆記 349. 兩個數組的交集 - 力扣&#xff08;LeetCode&#xff09; 內容: 集合的使用 , 重復的數剔除掉&#xff0c;剩下的即為交集&#xff0c;最后加入數組即可。 class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer…

[JVM篇]分代垃圾回收

分代垃圾回收 分代收集法是目前大部分 JVM 所采用的方法&#xff0c;其核心思想是根據對象存活的不同生命周期將內存劃分為不同的域&#xff0c;一般情況下將 GC 堆劃分為老生代(Tenured/Old Generation)和新生代(Young Generation)。老生代的特點是每次垃圾回收時只有少量對象…

漢諾塔問題詳解:遞歸與分治的經典案例

嘿&#xff0c;小伙伴們&#xff01;今天我可算撞見了個超有意思的東西&#xff0c;就是那大名鼎鼎的漢諾塔問題&#xff01;我這好奇心一下子就被勾起來了&#xff0c;迫不及待地想深挖一下&#xff0c;然后把那些好玩的、燒腦的、讓人拍案叫絕的解題思路和奇妙故事都分享給大…