正交匹配追蹤(Orthogonal Matching Pursuit, OMP)的MATLAB實現

壓縮感知(Compressed Sensing, CS)是一種利用稀疏信號的先驗知識,用遠少于奈奎斯特采樣定理要求的樣本數目恢復整個信號的技術。正交匹配追蹤(Orthogonal Matching Pursuit, OMP)是一種常見的貪婪算法(Greedy algorithm),用于解決壓縮感知中的信號重構問題。OMP算法試圖找到一組稀疏基,這些基與測量值之間有最大的相關性,并且用于迭代地重構原始信號。

OMP算法

下面是OMP算法的簡要步驟:

  1. 初始化殘差 ( r_0 = y ),其中 ( y ) 是測量向量,稀疏性基矩陣 ( \Phi ),觀測矩陣 ( \Psi ),支撐集 ( \Lambda = \emptyset )(選擇的基函數的索引集),和迭代計數器 ( k = 0 )。

  2. 找到與當前殘差最相關的列向量(原子) ( \phi_i )
    ( i = \arg\max_{j} | \langle r_k, \phi_j \rangle | )。

  3. 將選中的索引 ( i ) 加到支撐集 ( \Lambda ) 中 ( \Lambda = \Lambda \cup {i} )。

  4. 用最小二乘法從支撐集( \Lambda )上的列構建信號的近似解,即解線性方程 ( \Psi_{\Lambda} x’ = y ),得到( x’{\Lambda} ),在( \Lambda )上的系數,其中 ( \Psi{\Lambda} ) 表示 ( \Psi ) 的列僅包含 ( \Lambda ) 中索引對應的列。

  5. 更新殘差 ( r_{k+1} = y - \Psi_{\Lambda} x’ )。

  6. 檢查結束條件(例如,殘差足夠小,( ||r_{k+1}||_2 < \epsilon ) 或已達到預定的迭代次數)。如果未達到結束條件,( k = k + 1 ) 并返回步驟 2。

  7. 輸出重建信號,將 ( x’ ) 在非 ( \Lambda ) 的位置上填充零。

MATLAB代碼

以下是用MATLAB實現上述過程的代碼示例:

% 定義參數
N = 128;       % 信號長度
M = 32;        % 測量數量
K = 10;        % 稀疏度(信號中非零值數量)% 生成一個 K-稀疏信號(隨機位置上有非零值)
x = zeros(N, 1);
q = randperm(N);
x(q(1:K)) = randn(K, 1);% 創建一個隨機高斯測量矩陣 Phi
Phi = randn(M, N) / sqrt(M);% 生成測量值 y
y = Phi * x;% 調用 OMP 算法
x_hat = OMP(y, Phi, eye(N), K);% 繪制原始信號和恢復信號
figure;
subplot(2, 1, 1);
stem(x, 'b');
title('原始稀疏信號');
subplot(2, 1, 2);
stem(x_hat, 'r');
title('OMP恢復信號');% OMP 函數
function x_hat = OMP(y, Phi, Psi, K)% y - 測量向量% Phi - 傳感矩陣% Psi - 稀疏基矩陣(在這里是單位矩陣)% K - 稀疏度或迭代次數% 初始化r = y;                         % 初始殘差(即測量值)index_set = [];                % 支撐集合x_hat = zeros(size(Psi, 2), 1); % 估計信號初始化for k = 1:K% 計算相關性correlations = abs(Phi'*r);% 選擇具有最大相關性的索引[~, idx] = max(correlations);index_set = union(index_set, idx);% 使用當前支撐集合進行最小二乘求解x_temp = zeros(size(Psi, 2), 1);x_temp(index_set) = pinv(Phi(:, index_set)) * y;% 更新殘差r = y - Phi(:, index_set) * x_temp(index_set);% 檢查停止準則,可以是基于殘差的if norm(r) < 1e-6breakendendx_hat(index_set) = x_temp(index_set);
end

輸出結果

輸出結果如下,上面是原始信號,下面是恢復后的信號。

在這里插入圖片描述

相關博文

理解并實現OpenCV中的圖像平滑技術

OpenCV中的邊緣檢測技術及實現

OpenCV識別人臉案例實戰

入門OpenCV:圖像閾值處理

我的圖書

下面兩本書歡迎大家參考學習。

OpenCV輕松入門

李立宗,OpenCV輕松入門,電子工業出版社,2023
本書基于面向 Python 的 OpenCV(OpenCV for Python),介紹了圖像處理的方方面面。本書以 OpenCV 官方文檔的知識脈絡為主線,并對細節進行補充和說明。書中不僅介紹了 OpenCV 函數的使用方法,還介紹了函數實現的算法原理。

在介紹 OpenCV 函數的使用方法時,提供了大量的程序示例,并以循序漸進的方式展開。首先,直觀地展示函數在易于觀察的小數組上的使用方法、處理過程、運行結果,方便讀者更深入地理解函數的原理、使用方法、運行機制、處理結果。在此基礎上,進一步介紹如何更好地使用函數處理圖像。在介紹具體的算法原理時,本書盡量使用通俗易懂的語言和貼近生活的實例來說明問題,避免使用過多復雜抽象的公式。

本書適合計算機視覺領域的初學者閱讀,包括在校學生、教師、專業技術人員、圖像處理愛好者。
本書第1版出版后,深受廣大讀者朋友的喜愛,被很多高校選為教材,目前已經累計重印9次。為了更好地方便大家學習,對本書進行了修訂。
在這里插入圖片描述

計算機視覺40例

李立宗,計算機視覺40例,電子工業出版社,2022
近年來,我深耕計算機視覺領域的課程研發工作,在該領域尤其是OpenCV-Python方面積累了一點兒經驗。因此,我經常會收到該領域相關知識點的咨詢,內容涵蓋圖像處理的基礎知識、OpenCV工具的使用、深度學習的具體應用等多個方面。為了更好地把所積累的知識以圖文的形式分享給大家,我將該領域內的知識點進行了系統的整理,編寫了本書。希望本書的內容能夠對大家在計算機視覺方向的學習有所幫助。
本書以OpenCV-Python(the Python API for OpenCV)為工具,以案例為載體,系統介紹了計算機視覺從入門到深度學習的相關知識點。
本書從計算機視覺基礎、經典案例、機器學習、深度學習、人臉識別應用等五個方面對計算機視覺的相關知識點做了全面、系統、深入的介紹。書中共介紹了40余個經典的計算機視覺案例,其中既有字符識別、信息加密、指紋識別、車牌識別、次品檢測等計算機視覺的經典案例,也包含圖像分類、目標檢測、語義分割、實例分割、風格遷移、姿勢識別等基于深度學習的計算機視覺案例,還包括表情識別、駕駛員疲勞監測、易容術、識別年齡和性別等針對人臉的應用案例。
在介紹具體的算法原理時,本書盡量使用通俗易懂的語言和貼近生活的示例來說明問題,避免使用復雜抽象的公式來介紹。
本書適合計算機視覺領域的初學者閱讀,適于在校學生、教師、專業技術人員、圖像處理愛好者使用。

在這里插入圖片描述

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

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

相關文章

【CF】團隊訓練賽2 J-Palindrome Reversion 題解

傳送門&#xff1a;Palindrome Reversion 標簽&#xff1a;字符串 題目大意 規定一個操作&#xff1a;選擇字符串中的一段區間[l,r]并使其翻轉。現在給出一個字符串s&#xff0c;你要判斷能否通過一次操作使其變為回文串。 輸入&#xff1a;一個字符串&#xff0c;其長度不超…

在蘋果電腦MAC上安裝Windows10(雙系統安裝的詳細圖文步驟教程)

在蘋果電腦MAC上安裝Windows10&#xff08;雙系統安裝的詳細圖文步驟教程&#xff09; 一、準備工作準備項1&#xff1a;U盤作為系統安裝盤準備項2&#xff1a;您需要安裝的系統鏡像 二、啟動轉換助理步驟1&#xff1a;找到啟動轉換助理步驟2&#xff1a;啟動轉換助理步驟3&…

波奇學Linux:進程通信管道

進程通信 管道&#xff1a;基于文件級別的單向通信 創建父子進程&#xff0c;使得進程的struct file*fd_array[]的文件描述符指向同一個struct file文件&#xff0c;這個文件是內存級文件。 父進程關寫端&#xff0c;子進程再關閉讀端。實現單向通信 子進程寫入&#xff0c;父進…

Java面向對象(三)

一、封裝&#xff1a; 一般意義的封裝&#xff1a;把一段重復代碼抽取成一個函數&#xff0c;稱為代碼的封裝&#xff08;包裝&#xff09;面向對象語言的封裝&#xff1a;將類的某些信息隱藏在類的內部&#xff08;通過使用不同的訪問權限修飾符&#xff09;&#xff0c;不許…

C++ Primer 筆記(總結,摘要,概括)——第3章 字符串、向量和數組

目錄 3.1 命名空間的using聲明 3.2 標準庫類型string 3.2.1 定義和初始化string對象 3.2.2 string對象上的操作 3.2.3 處理string對象中的字符 3.3 標準庫類型vector 3.3.1 定義和初始化vector對象 3.3.2 向vector對象中添加元素 3.3.3 其他vector操作 3.4 迭代器介紹 3.4.…

如何使用rocketmq實現分布式事務?

什么是rocketmq事務消息 事務消息是 Apache RocketMQ 提供的一種高級消息類型&#xff0c;支持在分布式場景下保障消息生產和本地事務的最終一致性。 RocketMQ的分布式事務又稱為“半消息事務”。 事務消息處理流程 RocketMQ是靠半消息機制實現分布式事務 事務消息&#x…

Spring之AOP源碼解析(上)

Aop相關注解 EnableTransactionManagementEnableAspectJAutoProxyEnableAsync... 從注解切入來看看這些注解都干了什么 Import注解作用簡述 注入的類一般繼承ImportSelector或者ImportBeanDefinitionRegistrar接口 繼承ImportSelector接口&#xff1a;selectImports方法返回…

pandas/geopandas 筆記:判斷地點在不在路網上 不在路網的點和路網的距離

0 導入庫 import osimport pandas as pd pd.set_option(display.max_rows,5)import osmnx as oximport geopandas as gpd from shapely.geometry import Point 1 讀取數據 假設我們有 如下的數據&#xff1a; 1.1 新加坡室外基站位置數據 cell_stationpd.read_csv(outdoor…

TSINGSEE青犀AI智能分析網關V4初始配置與算法相關配置介紹

TSINGSEE青犀AI智能分析網關V4內置了近40種AI算法模型&#xff0c;支持對接入的視頻圖像進行人、車、物、行為等實時檢測分析&#xff0c;上報識別結果&#xff0c;并能進行語音告警播放。硬件管理平臺支持RTSP、GB28181協議、以及廠家私有協議接入&#xff0c;可兼容市面上常見…

通過例子學習golang的Goroutine

Go 語言中的 Goroutine 是一種輕量級的并發執行單位。它可以與其他 Goroutine 并發地執行&#xff0c;而不需要顯式地管理線程的創建和銷毀。Goroutine 是 Go 語言并發模型的核心組成部分&#xff0c;它使得編寫并發程序變得更加簡單和高效。 例一 創建兩個function&#xff0…

linux下ffmpeg調用GPU硬件解碼(VDPAU/VAAPI)保存文件

本文講解在linux下面&#xff0c;如何通過ffmpeg調用GPU硬件解碼&#xff0c;并保存解碼完的yuv文件。 其實&#xff0c;ffmpeg自帶的例子hw_decode.c這個文件&#xff0c;就已經能滿足要求了&#xff0c;因此&#xff0c;本文就嘗試講解以下hw_decode這個例子。hw_decode.c可以…

watchpoint

前言 內存被踩&#xff0c;通過 watchpoint 找到真兇 實例 以 smsc911x 網卡驅動為基體&#xff0c;進行實驗&#xff0c;和網卡本身功能無關&#xff0c; 每執行一次 ifconfig eth0 up&#xff0c;就會調用一次 smsc911x_open()&#xff0c;我在這里設計了一段代碼&#xf…

數學知識(四)(容斥原理、博弈論)

一、容斥原理 容斥原理公式 一共加或者減的式子個數 &#xff08;一&#xff09;利用容斥原理解決求能被質數整除的數的個數 890計算能被整除的數的個數 因為一共有2^n-1種選法&#xff0c;可以用位運算的方式枚舉&#xff0c;對于得到的每一種選法&#xff0c;根據存在的數…

六、回歸與聚類算法 - 邏輯回歸與二分類

線性回歸欠擬合與過擬合線性回歸的改進 - 嶺回歸分類算法&#xff1a;邏輯回歸模型保存與加載無監督學習&#xff1a;K-means算法 1、應用場景 2、原理 2.1 輸入 2.2 激活函數 3、損失以及優化 3.1 損失 3.2 優化 4、邏輯回歸API 5、分類的評估方法 5.1 精確率和召回率 5.2…

找出作弊的人

文章目錄 題目描述輸入描述輸出描述樣例1解釋:樣例2代碼 題目描述 公司組織了一次考試,現在考試結果出來了&#xff0c;想看一下有沒人存在作弊行為,但是員工太多了,需要先對員工進行一次過濾,再進一步確定是否存在作弊行為。 過濾的規則為:找到分差最小的員工ID對(p1,p2)列表…

【Spring】IoC容器 控制反轉 與 DI依賴注入 配置類實現版本 第四期

文章目錄 基于 配置類 方式管理 Bean一、 配置類和掃描注解二、Bean定義組件三、高級特性&#xff1a;Bean注解細節四、高級特性&#xff1a;Import擴展五、基于注解配置類方式整合三層架構組件總結 基于 配置類 方式管理 Bean Spring 完全注解配置&#xff08;Fully Annotatio…

Kotlin學習 6

1.接口 interface Movable {var maxSpeed: Intvar wheels: Intfun move(movable: Movable): String}class Car(var name: String, override var wheels: Int 4, _maxSpeed: Int) : Movable {override var maxSpeed: Int _maxSpeedget() fieldset(value) {field value}overr…

C語言讀取 ini 配置文件,修改/添加鍵值對

C語言讀取 ini 配置文件&#xff0c;修改/添加鍵值對 C語言讀取 ini 配置文件&#xff0c;對section中的鍵值對進行修改/添加&#xff0c;如果section不存在&#xff0c;則在末尾將新的section/key/value 添加進去。 一、了解什么是INI文件&#xff1f; ini 文件是Initializ…

【大數據】Flink 之部署篇

Flink 之部署篇 1.概述和參考架構2.可重復的資源清理3.部署模式3.1 Application 模式3.2 Per-Job 模式&#xff08;已廢棄&#xff09;3.3 Session 模式 Flink 是一個多用途框架&#xff0c;支持多種不同的混合部署方案。下面&#xff0c;我們將簡要介紹 Flink 集群的構建模塊、…

流動資金貸款管理辦法

流動資金貸款管理辦法 (2024年1月30日國家金融監督管理總局令2024年第2號公布 自2024年7月1日起施行) 第一章 總 則 第一條 為規范銀行業金融機構流動資金貸款業務經營行為&#xff0c;加強流動資金貸款審慎經營管理&#xff0c;促進流動資金貸款業務健康發展&#xff0c;依…