圖像特征檢測算法SIFT

SIFT(Scale - Invariant Feature Transform,尺度不變特征變換)是一種計算機視覺領域的特征提取算法,具有重要的地位和廣泛的應用。

算法原理

  • 構建高斯金字塔

為了實現多尺度檢測,SIFT 算法會構建高斯金字塔。首先將原始圖像進行高斯模糊,然后依次對模糊后的圖像進行降采樣,每次降采樣后圖像尺寸減半,從而得到一系列不同尺度的圖像,構成一個八度。通常會構建多個八度,每個八度包含若干層,以覆蓋不同的尺度范圍。

  • 差分高斯金字塔與關鍵點檢測

基于高斯金字塔構建差分高斯金字塔,即將同一八度中相鄰兩層高斯圖像相減得到。關鍵點檢測就是在這個差分高斯金字塔中,通過尋找每個樣本點在周圍鄰域中的極值點來確定。具體來說,對于每個圖像點,會將其與同層相鄰的 8 個點以及上下層相鄰的 9 個點(共 26 個點)進行比較,如果該點的差分高斯響應值是這 26 個點中的最大值或最小值,則認為該點是一個極值點,即候選關鍵點。

  • 關鍵點定位與篩選

為了提高關鍵點的定位精度,并去除一些低對比度的關鍵點和不穩定的邊緣響應點,需要對初步檢測到的關鍵點進行定位和篩選。通過擬合三維二次函數到鄰域像素來對關鍵點的位置和尺度進行迭代精修,確定其精確位置和對應的尺度。同時,計算關鍵點的對比度,去除對比度過低的點,以確保關鍵點的穩定性。

  • 關鍵點方向賦值

為了使關鍵點具有旋轉不變性,需要為每個關鍵點分配一個方向。在關鍵點的鄰域內,利用高斯加權函數計算圖像梯度的方向直方圖。直方圖的峰值方向即為該關鍵點的主方向,關鍵點的方向由其鄰域內梯度的方向分布情況來確定,從而使得關鍵點描述子具有旋轉不變性。

  • 關鍵點描述子生成

在關鍵點周圍選取一個鄰域,將該鄰域分成多個子區域,例如將 16×16 的鄰域分成 16 個 4×4 的子區域。在每個子區域內計算梯度的方向直方圖,通常使用 8 個方向作為直方圖的柱,從而得到每個子區域的 8 維向量。將所有子區域的向量連接起來,就形成了一個 128 維的向量作為該關鍵點的描述子。

特點

  • 尺度不變性 :能夠在不同尺度的圖像中檢測到相同的特征點,對圖像的縮放具有很強的魯棒性。

  • 旋轉不變性 :通過為關鍵點賦予方向,使得描述子與關鍵點的方向相關,從而在圖像旋轉時仍能保持匹配的準確性。

  • 局部性與鮮明性 :提取的特征是圖像中的局部特征,具有鮮明的局部信息,能夠很好地抵抗遮擋、光照變化等問題,且在圖像中具有較高的獨特性,便于區分不同的物體或場景。

  • 可重復性與穩定性 :對于同一場景或物體的不同圖像,能夠穩定地提取出相似的關鍵點,減少了特征點的丟失和誤檢,具有較高的可重復性。

應用

  • 圖像匹配 :在全景圖拼接、圖像搜索、目標識別等需要對兩幅或多幅圖像進行匹配的場景中,SIFT 算法被廣泛應用。通過提取并匹配兩幅圖像中的 SIFT 特征,可以確定圖像之間的對應關系,進而實現圖像的拼接、查詢或識別。

  • 目標識別與定位 :在機器人導航、自動駕駛、工業自動化等領域,SIFT 特征可用于識別和定位目標物體。例如,在自動駕駛中,通過對道路標志或車輛的 SIFT 特征進行匹配和識別,幫助車輛實現自主導航和目標檢測。

  • 三維重建 :在基于圖像的三維重建中,SIFT 特征用于確定多幅圖像之間的特征對應關系,從而計算出相機的內外參數以及場景的三維結構信息。

優點與缺點

  • 優點 :能夠自動檢測出大量的特征點,且具有良好的重復性和穩定性,對尺度、旋轉、光照變化以及一定程度的仿射變換具有魯棒性,特征的區分能力較強,適合于大規模的圖像匹配和目標識別任務。

  • 缺點 :計算復雜度較高,尤其是在處理高分辨率圖像或多幅圖像進行匹配時,計算速度可能會較慢。此外,SIFT 算法在面對視角變化較大、特征重復性較高或者存在大量相似特征的場景時,可能會出現一定的匹配錯誤或特征點匹配不足的問題。

環境準備

  • Python :確保已安裝 Python 環境,推薦 3.6 及以上版本。

  • OpenCV :通過 pip install opencv-python 命令安裝 OpenCV 庫,它提供了豐富的計算機視覺功能,包括 SIFT 算法。

使用示例代碼

import cv2
import numpy as np# 讀取圖像
img1 = cv2.imread('image1.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)# 初始化 SIFT 檢測器
sift = cv2.SIFT_create()# 檢測關鍵點和計算描述符
keypoints1, descriptors1 = sift.detectAndCompute(img1, None)
keypoints2, descriptors2 = sift.detectAndCompute(img2, None)# 使用 FLANN 進行特征匹配
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(descriptors1, descriptors2, k=2)# 應用比率測試篩選匹配項
good_matches = []
for m, n in matches:if m.distance < 0.7 * n.distance:good_matches.append(m)# 獲取匹配點的坐標
src_pts = np.float32([keypoints1[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2)
dst_pts = np.float32([keypoints2[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2)# 計算單應性矩陣
if len(good_matches) > 4:M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)matches_mask = mask.ravel().tolist()
else:matches_mask = None# 繪制匹配結果
draw_params = dict(matchColor=(0, 255, 0),singlePointColor=None,matchesMask=matches_mask,flags=2)result_img = cv2.drawMatches(img1, keypoints1, img2, keypoints2, good_matches, None, **draw_params)
  • 關鍵點檢測與描述符計算sift.detectAndCompute() 函數用于檢測圖像中的關鍵點并計算對應的描述符。

  • 特征匹配 :使用 FLANN(快速最近鄰搜索)匹配算法進行特征匹配,knnMatch() 方法返回每個特征點的兩個最近鄰匹配。

  • 比率測試 :通過比較兩個最近鄰匹配的距離,篩選出高質量的匹配項,以減少誤匹配。

  • 單應性計算 :如果匹配項數量足夠(大于 4 個),使用 RANSAC 算法計算單應性矩陣,用于確定圖像之間的幾何變換關系。

  • 結果繪制cv2.drawMatches() 函數用于繪制匹配結果,顯示在圖像上。

注意事項

  • 專利問題 :SIFT 是專利算法,雖專利已過期,但商業使用時仍需考慮許可問題。

  • 計算復雜度 :SIFT 算法計算復雜度較高,處理大圖像時可能耗時較長。

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

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

相關文章

光纖通道收發器:市場洞察、技術演進與未來機遇

一、引言 在數字化浪潮席卷全球的當下&#xff0c;數據存儲與傳輸的需求呈爆發式增長。光纖通道收發器作為高速、可靠數據存儲網絡&#xff08;如存儲區域網絡 SAN&#xff09;中的關鍵組件&#xff0c;發揮著至關重要的作用。它通過光纖實現服務器、存儲設備和交換機之間的數…

candence17.4如何設置兩個焊盤之間在TOP與BOTTOM可以存在兩根線

為什么要走兩根線&#xff1f; 為了過大電流&#xff0c;有時候就需要我們在TOP、BOTTOM兩個面走線&#xff0c;同時開窗&#xff0c;然后通過加錫的方式增加過流能力&#xff1b; 當然由于兩面都有導線&#xff0c;必然會存在過孔&#xff0c;而過孔的過流能力不僅與過孔孔徑…

Dify:參數調節,讓LLM從能用到好用的機制

前言 隨著大語言模型(LLM)在文本生成、智能對話、技術問答等前沿領域的深度滲透&#xff0c;參數精細化調節已成為開發者駕馭 AI 能力的核心必修課。 本文將系統的解釋溫度(Temperature)、核采樣(Top - P)、截斷采樣(Top - K)等關鍵參數的底層作用機制&#xff0c;結合多種場景…

防抖不同的實現

防抖&#xff08;Debounce&#xff09;&#xff1a;在事件被觸發后&#xff0c;延遲一段時間再執行函數。如果在延遲期間事件再次被觸發&#xff0c;則重新計時。常用于搜索框輸入、窗口大小調整等場景。 1.不安裝任何依賴和庫&#xff0c;編寫一個防抖的函數 在utils里面增加…

MySQL 數據庫索引詳解

一、索引是什么&#xff1f;能干嘛&#xff1f; 類比理解&#xff1a;索引就像書的目錄。比如你想查《哈利波特》中 “伏地魔” 出現的頁數&#xff0c;不用逐頁翻書&#xff0c;直接看目錄找關鍵詞就行。數據庫里的索引就是幫你快速找到數據的 “目錄”。 核心作用&#xff…

【620公司工作記錄】

已有數據匯總 好的,完全同意。在編寫新代碼之前,清晰地盤點我們手中已有的“彈藥”是至關重要的一步。 根據您提供的 test/20250610_88_100mm_frame_000.csv 文件頭,我來為您完整地解析一下我們當前擁有的全部數據字段。我們的數據是以“行”為單位組織的,每一行都代表一…

SpringBoot 集成Caffeine實現一級緩存

SpeingBoot 集成Caffeine實現一級緩存使我們經常遇到的場景。今天我們具體分享一下&#xff1a; 首先 Caffeine 作為一級緩存&#xff0c;它是 Spring 5.x 默認的本地緩存實現&#xff0c;性能優于 Guava Cache&#xff0c;且支持過期時間設置。緩存執行的流程圖如下&#xff…

中科米堆3D自動掃描檢測系統三維數字化智能解決方案

3D自動掃描檢測系統基于先進的光學、激光或結構光等測量技術&#xff0c;能夠快速、準確地獲取工件的三維幾何數據。在檢測過程中&#xff0c;系統通過向被測工件投射特定的光模式&#xff0c;利用高分辨率相機捕捉工件表面的反射光信息&#xff0c;再經過復雜的算法處理&#…

Unity3d中使用Mirror進行自定義消息通信

一、服務端&#xff1a; 1.創建服務端腳本MyServer.cs 繼承自NetworkManager類 using Mirror; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class MyServer : NetworkManager {[Header(&quo…

Odoo 18 固定資產管理自動化指南

如何在Odoo 18中實現資產管理自動化 1. 創建資產模型實現資產管理自動化 使用 Odoo 18 的會計模塊&#xff0c;資產的創建和確認可輕松實現自動化。這將使資產管理變得更加簡單高效。使用資產自動化功能&#xff0c;一旦驗證相關產品的供應商賬單&#xff0c;Odoo將自動生成并…

如何輕松地將音樂從 iPhone 傳輸到 Mac?

想把音樂從 iPhone 傳輸到 Mac 嗎&#xff1f;這很常見&#xff0c;無論你是想更換設備、備份收藏&#xff0c;還是只想在更大的屏幕上欣賞喜愛的歌曲。幸運的是&#xff0c;有 6 種有效的方法可以完成這項工作&#xff0c;具體取決于你喜歡使用的工具。讓我們開始吧。 第 1 部…

人工智能——解讀AI智慧課堂系統解決方案【附全文閱讀】

該文檔是 AI 智慧課堂系統解決方案,聚焦教育信息化需求,通過 AI 技術與教學深度融合,解決傳統課堂考勤效率低、資源管理難、分析不精準等問題。 方案以課堂為核心,構建 “背景分析 - 方案設計 - 優勢價值” 框架,技術架構涵蓋教師攝像機、學生抓拍機、智能錄播主機等設備,…

使用Nginx的RTMP模塊進行直播流轉HLS時,處理和預防`.ts`文件過多

當使用Nginx的RTMP模塊進行直播流轉HLS時,如果長時間運行或處理大量流媒體內容,可能會遇到.ts文件累積過多的問題。這不僅會占用大量的磁盤空間,還可能影響系統性能。以下是一些處理和預防.ts文件過多的方法: 1. 配置HLS清理 Nginx RTMP模塊允許配置HLS片段的過期時間,這…

結構體解決冒泡排序

設計英雄的結構體 //1、設計結構體 struct Hero {string name;//姓名int age;//年齡string sex;//性別 };創建英雄的數組 //2、創建數組存放英雄 struct Hero Array[5] {{"劉備", 34 ,"男"},{"關羽", 45 ,"男"},{"張飛",…

spring-webmvc @RequestParam 典型用法

典型用法 基本使用 HTTP請求參數綁定到方法參數 GetMapping("/users") public String getUsers(RequestParam String name) {return "Hello, " name; }請求&#xff1a;/users?nameJohn 輸出&#xff1a;Hello, John-----GetMapping("/filter&qu…

AntDesignPro前后端權限按鈕系統實現

目錄 Ant Design Pro 后端接口權限按鈕系統 系統架構圖 前端實現 權限按鈕組件 (AuthButton.tsx) 權限鉤子 (useAccess.ts) 權限服務 (permission.ts) 產品列表頁面 (ProductList.tsx) 后端接口設計 (Node.js Express 示例) 權限接口控制器 (permissionController.js…

RAG工程落地:處理文檔中表格數據

在 RAG&#xff08;Retrieval-Augmented Generation&#xff09;工程落地過程中&#xff0c;處理文檔中的表格數據 是一個非常重要但復雜的問題&#xff0c;特別是針對技術文檔、報告、論文等結構化強的資料。比如PDF文檔里的表格數據&#xff0c;如下&#xff1a; RAG處理表格…

大模型在肺癌預測及個性化診療方案中的應用研究

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與創新點 1.3 國內外研究現狀 二、大模型預測肺癌的原理與方法 2.1 大模型概述 2.2 數據收集與預處理 2.3 特征工程 2.4 模型訓練與優化 三、術前預測與方案制定 3.1 病情評估 3.1.1 腫瘤大小、位置及分期預測 3.1.…

如何高效分享WordPress博客文章

在當今信息過載的時代&#xff0c;寫好一篇優秀的 WordPress 博客文章只是起點&#xff0c;如何有效地分享給更多讀者才是成功的關鍵所在。對于新手用戶而言&#xff0c;選擇合適的工具和平臺尤為重要。現在許多服務器提供商支持一鍵安裝WordPress功能&#xff0c;比如 Hosteas…

以孝治家有機農業生態文明考察組赴邯鄲心田農場考察學習

按照2025年中共中央、國務院印發了關于《鄉村全面振興規劃&#xff08;2024—2027年&#xff09;》的戰略部署。根據《鄉村全面振興規劃》提出的“堅持人與自然和諧共生。牢固樹立和踐行綠水青山就是金山銀山的理念&#xff0c;落實節約優先、保護優先、自然恢復為主的方針&…