基于奇异值分解的图像压缩与除噪
一、本报告所用的一些基本原理
第一,虑噪过程。
巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。在振幅的对数对角频率的波得图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。
本程序通过不断调整通带截止频率、阻带下限截止频率、通带衰减及阻带衰减,力图使滤噪后的图像逼近未加噪图像。
第二,图像压缩思路。
图像信息的数据量非常的大,随着各种成像设备的分辨率不断提高,单幅图像所包含的数据量也越来越大,大数据量的图像信息会给存储器的存储容量、通信信道的带宽以及计算机的处理速度增加极大的压力。为了解决这个问题,必须对图像进行压缩处理
在本次数值分析的图像压缩课程模拟实践当中,原图是一个2000*3000的一个矩阵,这里就是一个10^6的一个很大的数据量,我们就要想办法在保证图像质量的前提下,尽可能的压缩图像,在实践当中分别选择了1/10、1/100、1/1000、1/10000进行练习。
我们小组在压缩实践中主要运用的思路是基于SVD算法的图像压缩,在进行1/10的压缩时,我们对2000*3000的矩阵进行20*30的分块,每一小块为一个100*100的矩阵,进行奇异值分解时,我们只选取了前5个奇异值,这样在传输过程中的数据量仅为K=100*5+5*5+5*100=1025,K/(100*100)近似等于1/10,这样在图像的传输过程中,就只需对U(:,1:5)、S(1:5,1:5)、V(:,1:5)'三个矩阵的数据进行传输,而不必在传输以前的矩阵数据,数据接收方只需对这三个矩阵进行处理,即可得到压缩了1/10后的图像。
在进行1/100的压缩时,对滤波后的图像矩阵整体进行奇异值分解,这一次取前12个奇异值,这样的数据量K=2000*12+12*12+12*3000=60144,K/(2000*3000)近似于1/100。
这样的思路在进行1/1000及更高比例的压缩时遇到了问题,因为要进行1/1000的压缩,只能取1个奇异值左后才能够满足压缩要求,但是这样压缩之后的图像却严重的失真了,原因当然是清楚的,对于2000个奇异值只取最大的1个奇异值,图像的很多东西就被丢弃了,这样图像压缩遇到了瓶颈,不得不停滞下来思考其他方法;经过小组成员之间的讨论和与其他小组的交流中,有了新的思路,先将2000*3000的滤波后矩阵进行200*300的分块,每一小块有100个数据,通过c=mean(CB(:))函数对每一小块的矩阵进行均值化处理,这样一个10*10的矩阵变成了一个均值c,再通过新矩阵赋值CD(i,j)=c,最后一个2000*3000的矩阵通过均值化处理再赋值变成了200*300的矩阵,在保持了图像的基本质量中图像已经压缩了1/100,后面只需对这200*300的矩阵压缩1/10即可达到压缩1/1000的要求,在显示回图像的过程中,因为2000*3000的矩阵变成了200*300的矩阵,因此x、y坐标的长度的缩小十分之一(这个问题一直没有注意到,导致压缩程序老是出现错误,显示不出图像,后再小组成员的讨论中终于寻找出了错误)
最后是进行1/10000的压缩,也就是对上一步中的那个200*300的矩阵压缩1/100,进行奇异值分解,只取前2个奇异值,这样K=200*2+2*2+2*300=1004,K/(200*300)近似于1/60,已和1/100处在同一个数量级,能够满足要求。
二、关于图像噪点过滤、压缩及误差所编写程序
clear all ;
clc
%% 生成2000*3000数据
f = @(x,y) exp(x-2*x.^2-y.^2).*sin(6*(x + y +x.*y.^2));
x =linspace(-1,1,3e3);
y =linspace(-1.2,1.2,2e3); y = y(:) ;
A = f(repmat(x,2e3,1),repmat(y,1,3e3)) ;
AA=A;
r = -0.2 + (0.2+0.2).*rand(2000,3000); %增加噪声项
A=A+r;
%% 原始数据图
figure,mesh(x,y,A); %三维网格图
xlabel('原始加噪点图');
view([-40,80]); %调整视角
%% Butterworth对图像进行滤波
disp('1.Butterworth Filtering');
%低通滤波器技术要求,经上分析,拟定
%通带截止频率为1.5Hz,阻带下限截止频率为4Hz
%通带衰减为0.7dB,阻带衰减为1.3dB
fs=3000;Wp=2*pi*1.5/fs;Ws=2*pi*4/fs;Rp=0.7;Rs=1.3;
Omip=Wp/pi;Omis=Ws/pi; %归一化技术要求
[N,Wn]=buttord(Omip,Omis,Rp,Rs); %确定滤波器的阶数
disp(['The order of Butterworth Filtering is',num2str(N)]);
[b,a]=butter(N,Wn); %确定Butterworth滤波器转移函数系数向量
R=filter(b,a,A);
figure,mesh(x,y,R); %三维网格图,滤波后图像
xlabel('滤波后的图像');
view([-40,80]); %调整视角
VC=AA(:); %将矩阵变成列矢量
VC0=R(:); %将矩阵变成列矢量
RMSE0=sqrt(sum((VC-VC0).^2)/6000000); %求均方根误差
%% 分块奇异值压缩1/10
BB=R;
for i=1:1:20
for j=1:1:30
BC=(BB(((i-1)*100+1):i*100,((j-1)*100+1):j*100));
[U,S,V]=svd(BC); %对每个100*100块做奇异值分解
BD=U(:,1:5)*S(1:5,1:5)*V(:,1:5)'; %取前5个特征值
BK(((i-1)*100+1):i*100,((j-1)*100+1):j*100)=BD;
end
end
%% 分块奇异值分解后的图
figure,mesh(x,y,BK);
xlabel('压缩1/10后的图像');
view([-40,80]);
VC1=BK(:); %将矩阵变成列矢量
RMSE1=sqrt(sum((VC-VC1).^2)/6000000); %求均方根误差
%% 奇异值分解进行压缩1/100
[U,S,V]=svd(R); %奇异值分解出U,S,V三个矩阵
C = U(:,1:12)*S(1:12,1:12)*V(:,1:12)'; %取U的前12列,S的前12个奇异值,V的前12列
U2= U(:,1:12);
S2= S(1:12,1:12);
V2= V(:,1:12)';
%% 奇异值分解后的图
figure,mesh(x,y,C);
xlabel('压缩1/100后的图像');
view([-40,80]);
VC2=C(:); %将矩阵变成列矢量
RMSE2=sqrt(sum((VC-VC2).^2)/6000000); %求均方根误差
%% 分块奇异值10*10均值后压缩1/1000
CA=R;
for i=1:1:200
for j=1:1:300
CB=(CA(((i-1)*10+1):i*10,((j-1)*10+1):j*10));
c=mean(CB(:));%全部平均
CD(i,j)=c;
end
end
%% 分块奇异值压缩1/10
CE=CD;
for i=1:1:2
for j=1:1:3
CF=(CE(((i-1)*100+1):i*100,((j-1)*100+1):j*100));
[U,S,V]=svd(CF); %对每个10*10块做奇异值分解
CG=U(:,1:5)*S(1:5,1:5)*V(:,1:5)'; %取前5个特征值
CH(((i-1)*100+1):i*100,((j-1)*100+1):j*100)=CG;
end
end
%% 分块奇异值压缩后的图
x =linspace(-1,1,3e2);
y =linspace(-1.2,1.2,2e2); y = y(:) ;
figure,mesh(x,y,CH);
xlabel('压缩1/1000后的图像');
view([-40,80]);
%% 压缩后的CD奇异值分解进行压缩1/10000
E=CD;
[U,S,V]=svd(E); %奇异值分解出U,S,V三个矩阵
D = U(:,1:2)*S(1:2,1:2)*V(:,1:2)'; %取U的前2列,S的前2个奇异值,V的前2列
U4= U(:,1:2);
S4= S(1:2,1:2);
V4= V(:,1:2)';
%% 奇异值分解后的图
figure,mesh(x,y,D);
xlabel('压缩1/10000后的图像');
view([-40,80]);
三、程序运行后的结果见附件二
评价:对图像进行压缩,不可避免的要引入失真。我们要做的就是在图像信号的最终用户察觉不出或能够忍受这些是真的前提下,进一步提高压缩比,以换取更高的编码效率,这就需要一些标准来对图像压缩的质量进行评价。在我们的程序中,主要运用的是均方根误差来对图像压缩的质量进行评价。
四、参考文献及资料
【1】ShoichiroNakamura .科学计算引论.电子工业出版社,2002.
【2】低通滤波技术在数字图像处理中的应用以及仿真实现(百度资料).
【3】语音信号的滤波处理(课程设计).
【4】胡乡峰,卫金茂. 基于奇异值分解的图像压缩.东北师范大学学报,2006.
【5】曾超,张卫东.基于奇异值分解的图像压缩及其Matlab实现.高校理科研究,2010.
基于奇异值分解的图像压缩与除噪相关推荐
- 基于奇异值分解的图像压缩和信息隐藏
基于奇异值分解的图像压缩和信息隐藏 将图像进行奇异值分解后,通过对对角矩阵进行一系列操作,可以达到压缩图像以及信息隐藏的目的.不仅如此,随着计算机网络和网络技术的不断发展,数字图像.音频和视频产品越来 ...
- 基于奇异值分解的图像压缩matlab
话不多说上才艺 文章目录 嘛是图像压缩
- 基于MATLAB的图像压缩感知设计(含源文件)
欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 名称 基于MATLAB的图像压缩感知 目录 目录 I 第1章 绪论 3 1.1 ...
- 图像的高频信息和低频信息代表的含义(以奇异值分解实现图像压缩为例附实验说明)
图像高频信息和低频信息区别,博主讲的很好,借用下,后面附上自己的实验说明. 图像的频率:灰度值变化剧烈程度的指标,是灰度在平面空间上的梯度. (1)什么是低频? 低频就是颜色缓慢地变化,也 ...
- 奇异值分解和图像压缩
奇异值分解和图像压缩 from: http://cos.name/2014/02/svd-and-image-compression/ [2.18更新]:楠神写了一个非常gelivable的Shiny ...
- VS2010实现opencv基于DCT的图像压缩
1.基于DCT的图像压缩方法是将一幅图像分割成矩形像素块,再分别对每一独立的像素块DCT变换.量化.编码和传输. 2.打开VS2010,新建Visual C++下Win32控制台应用程序demo,主程 ...
- matlab 基于小波变换的图像压缩,基于Matlab的小波变换在图像压缩中的应用
匿翻 |jf叙≮cc 2..8m (上旬刊) 口 王洪涛 沈有建 李满枝 (海南师范大学数学系 海南 ·海口 571158) 摘 要 小波变换作用在图像上主要体现在两点:图像压缩和图像降噪.本文借用 ...
- 基于奇异值分解的图片压缩
基于奇异值分解的图片压缩 一.目的 在网络空间安全数学基础上,老师给出了一种基于奇异值分解的图片压缩办法.在本篇文章中,对此进行简单的实现. 二.简单的数学原理 step1:我们考虑一个 n * n ...
- 基于PCA的图像压缩实现
基于PCA的图像压缩实现 注:该内容为校内课程实验,仅供参考,请勿抄袭! 源码:PPCA-for-Image-Compession 摘要 随着计算机互联网的发展和数据的日益增长,如何高效的处理和传 ...
最新文章
- 第一篇博客,纪念一下,终于开通啦!
- 2018-2019-1 20165318《信息安全系统设计基础》第八周课上测试
- Java单例模式:饿汉与懒汉区别
- 记录Flex布局的属性
- gradle更换仓库 解决下载速度慢问题
- 算法导论笔记- 二叉查找树问题
- oledb 获取所有表的名字和列名
- TreeMap是按照key的字典顺序来排序
- 卧槽!VS Code 上竟然也能画流程图了???
- Oracle循环语句
- AD20元件重叠绿色报错的解决方法,距离太近绿色报错
- Cocos2d-xUI组件详解
- 给你的应用“一只”智慧的眼睛 —— Barcode常识普及以及识别信息处理
- CodeProject是个好地方
- 遥感图像处理 | 辐射校正
- 系统集成项目管理工程师必考公式
- linux启用日志记录功能,linux开启日志服务器功能
- 人脸识别小区门禁系统_(完整版)小区人脸识别门禁系统
- Layui数据表格监听单元格编辑恢复原值
- cgb2105-day02