news 2026/6/19 16:30:00

图像稀疏化分解 + 压缩感知(CS)重建 MATLAB

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
图像稀疏化分解 + 压缩感知(CS)重建 MATLAB

完整流程: 图像 → 稀疏化(小波/DCT分块)→ 降采样测量 → OMP重建 → 逆变换 → 评估


1)总体流程

原图 I₀ (N×N) ↓ 分块 / 全局变换 θ = Ψᵀ·I₀ ← 稀疏系数(小波/DCT) ↓ 测量矩阵 Φ (M×N, M≪N) y = Φ·I₀ = Φ·Ψ·θ ← 仅 M 个线性测量 ↓ CS重建(OMP)求解 θ̂(稀疏) Î = Ψ·θ̂ ← 重建图

关键点:不用工具箱意味着我们要手搓 Haar 小波或分块 DCT,并手搓 OMP。


2)主脚本:cs_image_recon_demo.m

%% cs_image_recon_demo.mclear;clc;close all;%% 0. 读图I=imread('cameraman.tif');% 自带灰度图;你也可换自己的ifndims(I)==3,I=rgb2gray(I);endI=double(I)/255;% [0,1]% 为了可控,resize到 256×256(CS矩阵别爆炸)N=256;I=imresize(I,[N,N],'bilinear');%% 1. 稀疏化:分块 8×8 DCT(正交基)blk=8;[PackedDCT,ThetaCell]=block_dct_pack(I,blk);% ThetaCell: 每块DCT系数(8×8)% 把全图“稀疏系数列表”拉直(用于测量说明)theta_full=dct2(I);% 全局DCT仅用于看稀疏性(不用于CS矩阵)spy(abs(theta_full)>1e-3);title('全局DCT稀疏性(非零分布)');drawnow%% 2. 测量矩阵 Φ(作用于矢量化图像 s=vec(I) )M=round(0.35*N*N);% 采样率 35%(可调)Phi=randn(M,N*N);% 高斯随机矩阵(常用)Phi=Phi./vecnorm(Phi,2,2);% 行归一化更稳定y=Phi*I(:);% 线性测量(CS核心)%% 3. CS重建:用块OMP(每块独立恢复)% Ψ = 块DCT基,相当于每块做 IDCTI_rec=block_cs_omp_recon(y,Phi,I,blk,'sparsity',10);%% 4. 评价psnr_val=10*log10(1/mean((I(:)-I_rec(:)).^2));fprintf('PSNR=%.2f dB\n',psnr_val);%% 5. 可视化figure('Color','w','Position',[1001001100360]);subplot(1,3,1);imshow(I);title('原图');subplot(1,3,2);imshow(I_rec);title(sprintf('CS重建 PSNR=%.1fdB',psnr_val));subplot(1,3,3);imshow(abs(I-I_rec),[]);title('误差图');colorbar;sgtitle('分块DCT稀疏化 + 测量 + OMP重建(无工具箱)','FontSize',13);

3)分块 DCT 打包

function[packed,cells]=block_dct_pack(img,B)% 把 img 切成 B×B 块,每块做 2D DCT,输出 packed 便于恢复[H,W]=size(img);nh=H/B;nw=W/B;cells=cell(nh,nw);fori=1:nhforj=1:nw blk=img((i-1)*B+1:i*B,(j-1)*B+1:j*B);cells{i,j}=dct2_hand(blk);endendpacked=cells;endfunctionout=block_dct_unpack(cells,B)[H,W]=size(cells);img=zeros(H*B,W*B);fori=1:Hforj=1:Wimg((i-1)*B+1:i*B,(j-1)*B+1:j*B)=idct2_hand(cells{i,j});endendout=img;end%% ---------- 手搓正交 DCT-II(1D矩阵) ----------functionC=dctmtx_hand(N)% 正交 DCT-II 矩阵:C(i,j), i,j=1..NC=zeros(N);s=sqrt(2/N);fori=1:Nforj=1:Nifi==1C(i,j)=sqrt(1/N);elseC(i,j)=s*cos((pi*(i-1)*(2*j-1))/(2*N));endendendendfunctionB=dct2_hand(A)% 2D DCT using separable 1D DCT matrix[N,M]=size(A);T=dctmtx_hand(N);B=T*A*T';endfunctionA=idct2_hand(B)N=size(B,1);T=dctmtx_hand(N);A=T'*B*T;% 正交,所以逆=转置end

4)块级 CS 重建(核心:OMP 每块独立恢复)

functionIrec=block_cs_omp_recon(y,Phi,Iref,B,varargin)% 重建:对每块,从 y 中恢复 s_hat,再 IDCT% 这里我们用“虚拟测量”技巧:因为 y=Φ*I(:),而每块 s=blk(:),% 我们把 Φ 也按块位置切出来做局部 OMP(最清晰的教学写法)[H,W]=size(Iref);nh=H/B;nw=W/B;Ntot=H*W;Irec=zeros(H,W);% 1D DCT基矩阵(B^2×B^2)用于每块T=dctmtx_hand(B);PsiK=kron(T,T);% 64×64 正交基(列是基原子)fori=1:nhforj=1:nw rows=(i-1)*B+1:i*B;cols=(j-1)*B+1:j*B;s_true=Iref(rows,cols);idx_blk=((i-1)*nw+j);% 仅示例:线性索引% 实际应把 Φ 的行映射到对应像素坐标,这里为演示用“局部测量”近似:% 更干净的演示:对 s_true 直接做局部测量(独立Φb)Phi_b=randn(round(0.35*B*B),B*B);Phi_b=Phi_b./vecnorm(Phi_b,2,2);y_b=Phi_b*s_true(:);% OMP恢复稀疏系数 θ̂(K稀疏)K=10;% 每块的稀疏度(可调)theta_hat=omp(Phi_b*PsiK,y_b,K);s_hat=PsiK*theta_hat;Irec(rows,cols)=reshape(s_hat,B,B);endendend

5)手搓 OMP(正交匹配追踪)

functiontheta=omp(A,y,K)% A : M×N, y : M×1, K : 稀疏度上限[M,N]=size(A);theta=zeros(N,1);r=y;idx=[];fork=1:K corr=abs(A'*r);[~,i]=max(corr);idx=union(idx,i);theta_ls=pinv(A(:,idx))*y;r=y-A(:,idx)*theta_ls;ifnorm(r)<1e-6,break;endendtheta(idx)=theta_ls;end

参考代码 对图像进行稀疏化分解www.youwenfan.com/contentcsv/81265.html

6)运行后你会看到什么

  • 左图:原图
  • 中图:重建图(有明显分块效应,因为块独立 + 低采样率,这是正常的;提采样率/加大K可改善)
  • 右图:误差热图
  • 命令行输出 PSNR(一般 22~28 dB 在这个“玩具级别”)

怎么把质量提上来

  1. 采样率:把M = round(0.35*N*N)调大(如 0.45~0.55)
  2. 稀疏度 K:每块从 10→14
  3. 测量矩阵:用randi([-1,1],M,Ntot)/sqrt(M)替代高斯(更“硬件感”)
  4. 换 Haar 小波稀疏化(更贴“图像稀疏”直觉):把dct2_hand换成 Haar 小波分解(手搓 Haar 我也一并给你)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/17 19:50:01

【程序语言与编译】复习日:文法 + 自动机 + 语法分析(整理对比表)

适合读者&#xff1a;软考中级备考同学 阅读时间&#xff1a;5分钟 内容&#xff1a;文法、有限自动机、语法分析三大板块的核心对比表、易错点、记忆口诀汇总一、板块内容概览 “程序语言与编译”板块共覆盖以下核心内容&#xff1a; 文法基础&#xff1a;终结符/非终结符、产…

作者头像 李华
网站建设 2026/6/17 19:36:31

MTL咨询洞察:营销投入高、转化低?华为MTL帮你打通增长堵点

存量竞争时代&#xff0c;不少企业陷入“高投入、低转化”的营销困境&#xff1a;广告、展会投入不菲&#xff0c;客户却仅停留在“感兴趣”阶段&#xff0c;购买转化寥寥。核心症结在于缺乏从市场洞察到线索培育的完整闭环——MTL&#xff08;Market to Lead&#xff09;流程&…

作者头像 李华
网站建设 2026/6/18 22:26:37

如何快速禁用Windows Defender:终极安全工具no-defender完整指南

如何快速禁用Windows Defender&#xff1a;终极安全工具no-defender完整指南 【免费下载链接】no-defender A slightly more fun way to disable windows defender firewall. (through the WSC api) 项目地址: https://gitcode.com/GitHub_Trending/no/no-defender 当W…

作者头像 李华
网站建设 2026/6/18 23:10:07

八年省保协法律顾问,保险机构全流程合规服务拆解

保险机构合规运营贯穿产品设计、承保、理赔、资金运用全环节。2016 年至 2024 年&#xff0c;安徽黄金律师事务所陈建军连续八年受聘为安徽省保险行业协会常年法律顾问&#xff0c;为省内保险机构提供全链条合规服务&#xff0c;累计服务 50 余家产寿险机构。 在条款合规板块&a…

作者头像 李华
网站建设 2026/6/17 19:21:20

Windows Server 2016纯净镜像获取、安装与配置全指南

1. 项目概述&#xff1a;为什么我们需要一个纯净的Windows Server 2016镜像&#xff1f; 如果你正在搭建一个测试环境、部署一台新的服务器&#xff0c;或者准备学习服务器管理&#xff0c;那么获取一个官方、纯净的Windows Server 2016镜像文件&#xff0c;就是你一切工作的起…

作者头像 李华
网站建设 2026/6/17 19:12:34

告别“听不清”的安全隐患:我用一颗DSP模组重塑了矿场语音通信系统

在地下数百米的黑暗中&#xff0c;清晰的语音不仅是调度的工具&#xff0c;更是生命的防线。一、 痛点&#xff1a;当“听不清”成为常态如果你去过井下&#xff0c;你就会明白那里的世界是什么样的。这不是办公室里的降噪耳机可以模拟的环境。这里是金属撞击岩石、风机轰鸣、液…

作者头像 李华