function [] = Untitled2()
I1=imread('I1.jpg');
I2=imread('I2.jpg');
I3=imread('I3.jpg');
I1=rgb2gray(I1);
I2=rgb2gray(I2);
I3=rgb2gray(I3);
%对图像2,3进行fft变换,然后交换二者相位值求逆fft变换
i2=my_fft2(I2);
i3=my_fft2(I3);
i2_amp=abs(i2);
i3_amp=abs(i3);
i2_phase=angle(i2);
i3_phase=angle(i3);
I_2=my_ifft2(i2_amp.*exp(i*i3_phase));
I_3=my_ifft2(i3_amp.*exp(i*i2_phase));
%对图像1进行dct变换,并分别求DCT系数保留前五个,前十个和前二十时其逆dct变换的结果
I_dct_inital=my_dct2(I1);
[I_dct_5,I_dct_10,I_dct_20]=deal(zeros(size(I1)));
I_dct_5=dct_filter(I_dct_inital,3);
I_dct_10=dct_filter(I_dct_inital,4);
I_dct_20=dct_filter(I_dct_inital,6);
I_inital=my_idct2(I_dct_inital)./255;
I_5=my_idct2(I_dct_5)./255;
I_10=my_idct2(I_dct_10)./255;
I_20=my_idct2(I_dct_20)./255;
X=dct2(I1);
x=idct2(X)./255;
imwrite(I_inital,'I_inital.jpg');
imwrite(I_5,'I_5.jpg');
imwrite(I_10,'I_10.jpg');
imwrite(I_20,'I_20.jpg');
%交换2和3的相位后恢复出的图像
figure(1);
subplot(2,2,1);imshow(I2);title('人像');
subplot(2,2,2);imshow(I3);title('飞机');
subplot(2,2,3);colormap(gray);imagesc(abs(I_2));title('交换相位后人像');
subplot(2,2,4);colormap(gray);imagesc(abs(I_3));title('交换相位后飞机');
%对比自定义fft2函数所得频谱和matlab内置fft2函数所得频谱
figure(2);
i1=my_fft2(I1); %自定义fft2
sfftI1=fftshift(i1); %直流分量移到频谱中心
A1=abs(sfftI1);
A1=(A1-min(min(A1)))/(max(max(A1))-min(min(A1)))*225;%归一化
i1_matlab=fft2(I1); %MATLAB内置fft2
s_matlab=fftshift(i1_matlab);
A1_matlab=abs(s_matlab);
A1_matlab=(A1_matlab-min(min(A1_matlab)))/(max(max(A1_matlab))-min(min(A1_matlab)))*225;%归一化
subplot(1,2,1);imshow(A1);title('自定义fft所得频谱');
subplot(1,2,2);imshow(A1_matlab);title('内置fft所得频谱');
%自定义dct和内置dct恢复图像对比
figure(3);
subplot(1,2,1);imshow(I_inital);title('自定义dct和idct');
subplot(1,2,2);imshow(x);title('内置dct和idct');
%保留不同比例的dct系数后恢复出的图像
figure(4);
subplot(2,2,1);imshow(I1);title('原图');
subplot(2,2,2);imshow(I_5);title('保留前5个dct系数');
subplot(2,2,3);imshow(I_10);title('保留前10个dct系数');
subplot(2,2,4);imshow(I_20);title('保留前20个dct系数');
%计算峰值信噪比
MES5=sum(sum((double(I1)-double(I_5)).^2))/(512*512)
PSNR5=20*log10(255/sqrt(MES5))
MES10=sum(sum((double(I1)-double(I_10)).^2))/(512*512)
PSNR10=20*log10(255/sqrt(MES10))
MES20=sum(sum((double(I1)-double(I_20)).^2))/(512*512)
PSNR20=20*log10(255/sqrt(MES20))
end
function I_fft=my_fft2(I) %2d-fft
sizex=size(I);
row=sizex(1);col=sizex(2);
[U,V]=deal(zeros(row,col));
for p=0:row-1
for q=0:row-1
U(p+1,q+1)=exp(-2*i*pi*p*q/row);
end
end
for p=0:col-1
for q=0:col-1
V(p+1,q+1)=exp(-2*i*pi*p*q/col);
end
end
I=double(I);
I_fft=U'*I*V;
end
function I_ifft=my_ifft2(I) %2d-ifft
sizex=size(I);
row=sizex(1);col=sizex(2);
[U,V]=deal(zeros(row,col));
for p=0:row-1
for q=0:row-1
U(p+1,q+1)=exp(-2*i*pi*p*q/row);
end
end
for p=0:col-1
for q=0:col-1
V(p+1,q+1)=exp(-2*i*pi*p*q/col);
end
end
I=double(I);
I_ifft=inv(U')*I*inv(V);
end
function I_dct=my_dct2(I) %2d-dct
sizex=size(I);
row=sizex(1);col=sizex(2);
nr=row/8;nc=col/8;
I_dct=zeros(row,col);
for r=1:nr
for c=1:nc
I_dct(8*r-7:8*r,8*c-7:8*c)=my_dct8x8(I(8*r-7:8*r,8*c-7:8*c));
end
end
end
function I_dct=my_dct8x8(I) %8x8块大小的2d-dct
C=zeros(8,8);
for p=0:7
for q=0:7
if p==0
a=sqrt(1/8);
else
a=sqrt(1/4);
end
C(p+1,q+1)=a*cos(pi*(q+0.5)*p/8);
end
end
I=double(I);
I_dct=C*I*C';
end
function I_idct=my_idct2(I) %2d-idct
sizex=size(I);
row=sizex(1);col=sizex(2);
nr=row/8;nc=col/8;
I_idct=zeros(row,col);
for r=1:nr
for c=1:nc
I_idct(8*r-7:8*r,8*c-7:8*c)=my_idct8x8(I(8*r-7:8*r,8*c-7:8*c));
end
end
end
function I_idct=my_idct8x8(I) %8x8块大小的2d-idct
C=zeros(8,8);
for p=0:7
for q=0:7
if p==0
a=sqrt(1/8);
else
a=sqrt(1/4);
end
C(p+1,q+1)=a*cos(pi*(q+0.5)*p/8);
end
end
I=double(I);
I_idct=C'*I*C;
end
function I_x=dct_filter(I,number)
Isize=size(I);
I_x=zeros(Isize);
tmp=zeros(8,8);
for i=1:number-1
for j=1:number-1
if j+i<=number
tmp(i,j)=1;
end
end
end
for r=0:Isize(1)/8-1
for c=0:Isize(2)/8-1
I_x(8*r+1:8*r+8,8*c+1:8*c+8)=I(8*r+1:8*r+8,8*c+1:8*c+8).*tmp;
end
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
hw1.zip_dct_dct idct_iff
共1个文件
m:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 188 浏览量
2022-09-19
22:29:07
上传
评论
收藏 2KB ZIP 举报
温馨提示
标题中的"hw1.zip_dct_dct_idct_iff"表明这是一个与数字信号处理相关的作业或项目,主要涉及离散余弦变换(DCT)、逆离散余弦变换(IDCT)以及快速傅里叶变换(FFT)和其逆变换(IFFT)。这个压缩包包含了名为"hw1.m"的MATLAB代码文件,很可能是实现这些算法的脚本或函数。 在数字信号处理领域,DCT是一种常用的信号变换方法,它能够将信号从时域转换到频域,常用于音频和图像的压缩,如JPEG和MP3编码。DCT有多种类型,最常见的为DCT-II,也就是我们在JPEG中见到的那种。DCT-II将连续的信号转换为正交的频率系数,其中低频部分包含了大部分的能量,这对于数据压缩非常有用。 IDCT是DCT的逆操作,用于将频域信息转换回时域,使我们能够重建原始信号。在解压缩过程中,IDCT是必不可少的步骤。 FFT是一种高效计算离散傅里叶变换(DFT)的方法,对于处理大量数据尤其有用。它将一个序列的DFT分解成一系列更小的DFT,大大减少了计算复杂度。IFFT则是FFT的逆变换,它将频域的信号转换回时域。 "hw1.m"文件可能包含以下内容:定义了DCT、IDCT、FFT和IFFT的MATLAB函数,这些函数可能采用了不同的算法实现,如分治法或蝶形运算。此外,文件可能还包括示例数据和测试用例,用于验证所编写的函数正确性。用户可以加载数据,调用这些函数进行变换,并查看结果。 学习和理解这些变换对于理解和开发信号处理算法至关重要,它们是数字通信、音频处理、图像处理和许多其他领域的基础。通过编写自己的实现,学生可以更好地理解这些算法的工作原理,而不仅仅是使用现成的库函数。这也有助于培养编程和问题解决的能力。
资源推荐
资源详情
资源评论
收起资源包目录
hw1.zip (1个子文件)
hw1.m 4KB
共 1 条
- 1
资源评论
我虽横行却不霸道
- 粉丝: 91
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python MIDI 库.zip
- Python for DevOps repo 包含有用的 Python 脚本,可供您学习并在日常 DevOps 自动化任务中实施 .zip
- Python API 包装器和库列表.zip
- Python - 与我的 YouTube 频道相关的脚本存储在这里,可以用任何版本的 Python 编写.zip
- PyClass 课程计划.zip
- Puppet 模块用于安装和管理 Python、pip、virtualenvs 和 Gunicorn 虚拟主机 .zip
- jieshao123456
- Java 将本地mp4推流rtsp
- 第7章 聚类算法 - 作业 - 副本.ipynb
- Gartner发布2024年中国网络安全发展趋势
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功