【图像压缩】基于奇异值分解SVD+分块奇异值分解SVD+小波变换结合奇异值分解SVD图像压缩压缩比与信噪比附Matlab代码

 ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab完整代码及仿真定制内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

🔥 内容介绍

图像压缩在图像处理和传输中至关重要,它可以减少图像文件的大小,同时保持视觉上可接受的质量。本文将探讨基于奇异值分解(SVD)、分块奇异值分解(SVD)和小波变换结合奇异值分解(SVD)的三种图像压缩方法,并分析它们的压缩比和信噪比(SNR)。

奇异值分解(SVD)

奇异值分解(SVD)是一种矩阵分解技术,可以将一个矩阵分解为三个矩阵的乘积:

 

A = UΣV^T

其中,U和V是正交矩阵,Σ是对角矩阵,其对角线元素称为奇异值。

基于奇异值分解(SVD)的图像压缩

基于奇异值分解(SVD)的图像压缩方法利用了图像中数据的相关性。通过对图像进行SVD分解,可以将图像表示为奇异值和奇异向量的线性组合。然后,可以通过截断较小的奇异值来降低图像的秩,从而实现压缩。

分块奇异值分解(SVD)

分块奇异值分解(SVD)是一种改进的SVD方法,它将图像划分为较小的块,然后对每个块进行SVD分解。这种方法可以更好地捕捉图像中的局部特征,从而提高压缩效率。

小波变换结合奇异值分解(SVD)

小波变换是一种时频分析技术,可以将图像分解为不同尺度的子带。通过将小波变换与SVD相结合,可以进一步提高图像压缩效率。小波变换可以捕获图像中的边缘和纹理等高频成分,而SVD可以捕获低频成分。

压缩比和信噪比

图像压缩的两个重要指标是压缩比和信噪比(SNR)。压缩比衡量压缩后图像文件的大小与原始图像文件大小之比,而SNR衡量压缩后图像的质量。

📣 部分代码

function [ err ] = mmwrite(filename,A,comment,field,precision)%% Function: mmwrite(filename,A,comment,field,precision)%%    Writes the sparse or dense matrix A to a Matrix Market (MM) %    formatted file.%% Required arguments: %%                 filename  -  destination file%%                 A         -  sparse or full matrix%% Optional arguments: %%                 comment   -  matrix of comments to prepend to%                              the MM file.  To build a comment matrix,%                              use str2mat. For example:%%                              comment = str2mat(' Comment 1' ,...%                                                ' Comment 2',...%                                                ' and so on.',...%                                                ' to attach a date:',...%                                                [' ',date]);%                              If ommitted, a single line date stamp comment%                              will be included.%%                 field     -  'real'%                              'complex'%                              'integer'%                              'pattern'%                              If ommitted, data will determine type.%%                 precision -  number of digits to display for real %                              or complex values%                              If ommitted, full working precision is used.%if ( nargin == 5)   precision = 16;elseif ( nargin == 4)   precision = 16;elseif ( nargin == 3)   mattype = 'real'; % placeholder, will check after FIND-ing A  precision = 16;elseif ( nargin == 2)   comment = '';  % Check whether there is an imaginary part:  mattype = 'real'; % placeholder, will check after FIND-ing A  precision = 16;endmmfile = fopen([filename],'w');if ( mmfile == -1 ) error('Cannot open file for output');end;[M,N] = size(A);%%%%%%%%%%%%%       This part for sparse matrices     %%%%%%%%%%%%%%%%if ( issparse(A) )  [I,J,V] = find(A);  if ( sum(abs(imag(nonzeros(V)))) > 0 )    Vreal = 0;   else     Vreal = 1;   end  if ( ~ strcmp(mattype,'pattern') & Vreal )    mattype = 'real';   elseif ( ~ strcmp(mattype,'pattern') )    mattype = 'complex';  end%% Determine symmetry:%  if ( M ~= N )    symm = 'general';    issymm = 0;    NZ = length(V);  else    issymm = 1;    NZ = length(V);    for i=1:NZ      if ( A(J(i),I(i)) ~= V(i) )        issymm = 0;        break;      end    end    if ( issymm )      symm = 'symmetric';      ATEMP = tril(A);      [I,J,V] = find(ATEMP);      NZ = nnz(ATEMP);    else      isskew = 1;      for i=1:NZ        if ( A(J(i),I(i)) ~= - V(i) )          isskew = 0;          break;        end      end      if ( isskew )        symm = 'skew-symmetric';        ATEMP = tril(A);        [I,J,V] = find(ATEMP);        NZ = nnz(ATEMP);      elseif ( strcmp(mattype,'complex') )        isherm = 1;        for i=1:NZ          if ( A(J(i),I(i)) ~= conj(V(i)) )            isherm = 0;            break;          end        end        if ( isherm )          symm = 'hermitian';          ATEMP = tril(A);          [I,J,V] = find(ATEMP);          NZ = nnz(ATEMP);        else           symm = 'general';          NZ = nnz(A);        end      else        symm = 'general';        NZ = nnz(A);      end    end  end% Sparse coordinate format:  rep = 'coordinate';  fprintf(mmfile,'%%%%MatrixMarket matrix %s %s %s\n',rep,mattype,symm);  [MC,NC] = size(comment);  if ( MC == 0 )    fprintf(mmfile,'%% Generated %s\n',[date]);  else    for i=1:MC,      fprintf(mmfile,'%%%s\n',comment(i,:));    end  end  fprintf(mmfile,'%d %d %d\n',M,N,NZ);  cplxformat = sprintf('%%d %%d %% .%dg %% .%dg\n',precision,precision);  realformat = sprintf('%%d %%d %% .%dg\n',precision);  if ( strcmp(mattype,'real') )     for i=1:NZ        fprintf(mmfile,realformat,I(i),J(i),V(i));     end;  elseif ( strcmp(mattype,'complex') )  for i=1:NZ     fprintf(mmfile,cplxformat,I(i),J(i),real(V(i)),imag(V(i)));  end;  elseif ( strcmp(mattype,'pattern') )     for i=1:NZ        fprintf(mmfile,'%d %d\n',I(i),J(i));     end;  else       err = -1;     disp('Unsupported mattype:')     mattype  end;%%%%%%%%%%%%%       This part for dense matrices      %%%%%%%%%%%%%%%%else  if ( sum(abs(imag(nonzeros(A)))) > 0 )    Areal = 0;   else     Areal = 1;   end  if ( ~strcmp(mattype,'pattern') & Areal )    mattype = 'real';  elseif ( ~strcmp(mattype,'pattern')  )    mattype = 'complex';  end%% Determine symmetry:%  if ( M ~= N )    issymm = 0;    symm = 'general';  else    issymm = 1;    for j=1:N       for i=j+1:N        if (A(i,j) ~= A(j,i) )          issymm = 0;             break;         end      end      if ( ~ issymm ) break; end        end    if ( issymm )      symm = 'symmetric';    else      isskew = 1;      for j=1:N         for i=j+1:N          if (A(i,j) ~= - A(j,i) )            isskew = 0;               break;           end        end        if ( ~ isskew ) break; end      end      if ( isskew )        symm = 'skew-symmetric';      elseif ( strcmp(mattype,'complex') )        isherm = 1;        for j=1:N           for i=j+1:N            if (A(i,j) ~= conj(A(j,i)) )              isherm = 0;                 break;             end          end          if ( ~ isherm ) break; end        end        if ( isherm )          symm = 'hermitian';        else           symm = 'general';        end      else        symm = 'general';      end    end  end% Dense array format:  rep = 'array';  [MC,NC] = size(comment);  fprintf(mmfile,'%%%%MatrixMarket mtx %s %s %s\n',rep,mattype,symm);  for i=1:MC,    fprintf(mmfile,'%%%s\n',comment(i,:));  end;  fprintf(mmfile,'%d %d\n',M,N);  cplxformat = sprintf('%% .%dg %% .%dg\n', precision,precision);  realformat = sprintf('%% .%dg\n', precision);  if ( ~ strcmp(symm,'general') )     rowloop = 'j';  else      rowloop = '1';  end  if ( strcmp(mattype,'real') )     for j=1:N       for i=eval(rowloop):M          fprintf(mmfile,realformat,A(i,j));       end     end  elseif ( strcmp(mattype,'complex') )     for j=1:N       for i=eval(rowloop):M          fprintf(mmfile,cplxformat,real(A(i,j)),imag(A(i,j)));       end     end  elseif ( strcmp(mattype,'pattern') )     err = -2     disp('Pattern type inconsistant with dense matrix')  else     err = -2     disp('Unknown matrix type:')     mattype  endendfclose(mmfile);

⛳️ 运行结果


结论

基于SVD、分块SVD和小波变换结合SVD的图像压缩方法都具有较高的压缩比和信噪比。其中,小波变换结合SVD方法的压缩效率最高,信噪比也最高。因此,小波变换结合SVD方法是一种适用于图像压缩的高效技术。

🔗 参考文献

[1] 许海霞,周维,陈维.基于SVD分解的数字图像盲水印[J].计算机系统应用, 2007, 16(010):106-109.DOI:10.3969/j.issn.1003-3254.2007.10.027.

[2] 刘汉强.基于奇异值分解(SVD)和小波变换的图像压缩算法[J].福建电脑, 2008(1):2.DOI:10.3969/j.issn.1673-2782.2008.01.040.

🎈 部分理论引用网络文献,若有侵权联系博主删除
🎁  关注我领取海量matlab电子书和数学建模资料

👇  私信完整代码和数据获取及论文数模仿真定制

1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱船配载优化、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化
2 机器学习和深度学习方面

2.1 bp时序、回归预测和分类

2.2 ENS声神经网络时序、回归预测和分类

2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类

2.4 CNN/TCN卷积神经网络系列时序、回归预测和分类

2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类

2.7 ELMAN递归神经网络时序、回归\预测和分类

2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类

2.9 RBF径向基神经网络时序、回归预测和分类

2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
2.图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
3 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻
4 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划
5 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化
6 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化
7 电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电
8 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
9 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值