合肥学院MATLAB自主学习2_第1页
合肥学院MATLAB自主学习2_第2页
合肥学院MATLAB自主学习2_第3页
合肥学院MATLAB自主学习2_第4页
合肥学院MATLAB自主学习2_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机科学与技术系 自主学习报告专业名称 计算机科学与技术 课程名称 MATLAB数字图像处理 班 级 14计科2班 学 号 1404012005 姓 名 张成宾 一、自主学习内容清单: (列出自主学习的内容清单)1)一维离散的余弦变换2)二维离散的余弦变换3)离散余弦变换的编程实现及应用二、自主学习内容(祥细的撰写学习内容)离散余弦变换(DCT)是从离散福利叶变换(DFT)发展过来的。图像数据一般有较强的相关性,若所选用的正交矢量空间的基矢量与图像本身的主要特征相近,在该正交矢量空间中描述图像数据则会变得更简单.经过正交变换,会把原来分散在原空间的图像数据在新的坐标空间中得到集中。对于大多数

2、图像,大量变换系数很小,只要删除接近于零的系数,并且对较小的系数进行粗量化,而保留包含图像主要信息的系数,以此进行压缩编码。在重建图像进行解码时,所损失的将是一些不重要的信息,几乎不会引起图像的失真。离散余弦变换(DCT)是对实信号定义的一种变换,变换后在频域中得到的也是一个实信号,相比DFT而言,DCT可以减少一半以上的计算。DCT还有一个很重要的性质(能量集中特性):大多书自然信号(声音、图像)的能量都集中在离散余弦变换后的低频部分,因而DCT在(声音、图像)数据压缩中得到了广泛的使用。由于DCT是从DFT推导出来的另一种变换,因此许多DFT的属性在DCT中仍然是保留下来的。1)一维离散的

3、余弦变换1.正变换:对于时间序列分f(x),其中,x=0,1,2.N-1,其一维离散余弦变换为:2.逆变换:一维离散余弦逆变换为:2)二维离散的余弦变换1.正变换2.逆变换3)离散余弦变换的编程实现及应用代码1根据正交变换可分离性编写的二维离散余弦变换的MATLAB实现程序,其核心思想是先对图像矩阵的行进行一次一维余弦变换,再对变换后的矩阵进行一次一维余弦变换。代码1:function y=rdct2(x,n,m) % 功能:实现二维离散余弦变换% 输入:x-待变换的灰度图像% m,n-待变换的区域大小,默认值为m,n=size(x) dimx,dimy = size(x);if nargin

4、<2 n = dimx; m = dimy;endy = zeros(n,m);for ii=1:n y(ii,:) = rdct(x(ii,:),m);endfor ii=1:m y(:,ii) = rdct(y(:,ii),n);endfunction y=rdct(x,n,a,b)% 实现一维离散余弦变换函数fl=size(x,1)=1;if fl x=x(:); endm,k=size(x);if nargin<2 n=m;endif nargin<4 b=1; if nargin<3 a=sqrt(2*n); endendif n>m x=x; zero

5、s(n-m,k);elseif n<m x(n+1:m,:)=;end x=x(1:2:n,:); x(2*fix(n/2):-2:2,:);z=sqrt(2) 2*exp(-0.5i*pi/n)*(1:n-1).'y=real(fft(x).*z(:,ones(1,k)/a;y(1,:)=y(1,:)*b;if fl y=y.' end代码2是实现二维离散余弦变换的程序function y=irdct2(x,n,m)% 功能:实现二维离散逆余弦变换% 输入:x-待变换的图像% m,n-待变换的区域大小,默认值为m,n=size(x) dimx,dimy = size(x

6、);if nargin<2 n = dimx; m = dimy;endy = zeros(n,m);for ii=1:n y(ii,:) = irdct(x(ii,:),m);endfor ii=1:m y(:,ii) = irdct(y(:,ii),n);endfunction x=irdct(y,n,a,b)% 实现一维离散逆余弦变换函数fl=size(y,1)=1;if fl y=y(:); endm,k=size(y);if nargin<4 b=1; if nargin<3 a=sqrt(2*m); if nargin<2 n=m; end endendif

7、 n>m y=y; zeros(n-m,k);elseif n<m y(n+1:m,:)=;endx=zeros(n,k);w=ones(1,k);m=fix(n+1)/2);p=n-m;z=0.5*exp(0.5i*pi/n)*(1:p).'u=(y(2:p+1,:)-1i*y(n:-1:m+1,:).*z(:,w)*a;y=y(1,:)*sqrt(0.5)*a/b; u(1:m-1,:);if m=p z=-0.5i*exp(2i*pi/n)*(0:m-1).' y=(z(:,w)+0.5).*(conj(flipud(u)-y)+y; z=ifft(y,1);

8、 u=real(z); y=imag(z); q=m/2; h=rem(m,2)/2; x(1:4:n,:)=u(1:q+h,:); x(2:4:n,:)=y(m:-1:q+1-h,:); x(3:4:n,:)=y(1:q-h,:); x(4:4:n,:)=u(m:-1:q+1+h,:);else z=real(ifft(y; conj(flipud(u); x(1:2:n,:)=z(1:m,:); x(2:2:n,:)=z(n:-1:m+1,:);endif fl x=x.' end代码1、代码2的运行过程如图1所示,运行结果如图2所示图1 运行过程图2 运行结果代码3是生成离散余弦

9、变换矩阵的MATLAB源程序function P,Q=mydctmtx(I)% 功能:求输入灰度图像的离散余弦变换矩阵% 输入:I-灰度图像% 输出:P-离散余弦矩阵P% Q-离散余弦矩阵Q% 求输入灰度图像的行数和列数M,N=size(I);% 根据公式求解离散余弦矩阵Pfor i=2:M for j=1:M P(i,j)=sqrt(2/M)*cos(i-1)*(2*j-1)*pi)/(2*M); endend P(1,:)=sqrt(1/M);% 根据公式求解离散余弦矩阵Q for i=2:N for j=1:N Q(i,j)=sqrt(2/N)*cos(i-1)*(2*j-1)*pi)/

10、(2*N); endend Q(1,:)=sqrt(1/N);代码4是调用代码3对图像进行离散余弦变换的实例。运行结果如图3所示。% 读入RGB图像,并转换成灰度图像I=imread('C:MATLAB2011lena.png');I=rgb2gray(I);% 求灰度图像的行数和列数M,N=size(I);% 求离散余弦矩阵P=dctmtx(M);Q=dctmtx(N);% 转换数据类型,以便进行矩阵运算I1=double(I);% 进行离散傅里叶变换Idct=P*I1*Q'% 显示原始图像与变换结果subplot(121),imshow(I),title('

11、原始图像');subplot(122),imshow(Idct),title('离散余弦变换后的图像');图3 运行结果代码5使用几种不同矩阵进行图像变换,运行结果如图4所示。代码5% 读入RGB图像,并转换成灰度图像I=imread('C:MATLAB2011lena.png');I=rgb2gray(I);D1=I;% 进行离散余弦变换D2=dct2(D1);% 取余弦变换后矩阵左上角不同尺寸的小区域组成新的矩阵s=size(D1);P=zeros(s);P1=P;P2=P;P3=P;P1(1:40,1:40)=D2(1:40,1:40);P2(1:

12、60,1:60)=D2(1:60,1:60);P3(1:80,1:80)=D2(1:80,1:80);% 将余弦变换后的矩阵和各小区域矩阵进行离散余弦逆变换D3=idct2(D2);E1=idct2(P1);E2=idct2(P2);E3=idct2(P3);% 显示原始图像及变换后的结果subplot(2,3,1),imshow(D1); subplot(2,3,2), imshow(D2); subplot(2,3,3),image(D3);subplot(2,3,4),image(E1); subplot(2,3,5), image(E2); subplot(2,3,6);image(E

13、3)图4c是使用离散余弦变换后系数矩阵D2复原出的图像,图4d是用矩阵P1复原出的图像,图4e是用矩阵P2复原出的图像,图4f是矩阵P3复原出的图像,P1,P2,P3是离散余弦变换矩阵左上角的小区域。图4e和图4f已经十分接近原始图像了,由此可见,对图像进行离散余弦变换后,能量主要集中在系数矩阵的左上角。图4 运行结果基于DCT的图像去噪基于离散余弦变换对图像的噪声抑制原理如下:图像的噪声在离散余弦变换结果中处在其高频部分,而高频部分的幅值一般很小,利用这一性质,就很容易实现图像的噪声抑制。代码6%读取图像X=imread('C:MATLAB2011lena.png'); X=

14、rgb2gray(X);%读取图像尺寸m,n=size(X); %给图像加噪Xnoised=imnoise(X,'speckle',0.01); %输出加噪图像figure(1); imshow(Xnoised);%DCT变换Y=dct2(Xnoised); I=zeros(m,n);%高频屏蔽I(1:m/3,1:n/3)=1; Ydct=Y.*I;%逆DCT变换Y=uint8(idct2(Ydct); %结果输出figure(2); imshow(Y);图5a 添加噪声后的图片 图5b去噪后的图片三、自主学习心德通过此次自主学习我了解到了离散余弦变换是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换,但是只使用实数。离散余弦变换相当

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论