熟悉及掌握图像的傅里叶变换、离散余弦变化原理及性质,实现图像的频率域变换。
1. 读入一幅图像,分别为图像添加叠加密度为0.04的椒盐噪声,均值为0方差为0.02的高斯噪声,做FFT变换。将原始图像、原始图像频谱图、添加噪声后的图像,以及噪声图像的频谱图同时显示出来。
%读入图像
I=imread('gou.jpg');
%FFT 原始图像其频谱图
F=fft2(im2double(I)); %FFT频谱平移
F=fftshift(F);
F=real(F);%频谱对数变换
T1=log(F+1);
%模拟叠加密度为0.04的椒盐噪声
S=imnoise(I,'salt & pepper', 0.04);
%FFT 椒盐噪声频谱图
K=fft2(im2double(S));
K=fftshift(K); %FFT频谱平移
K=real(K);
T2=log(K+1); %频谱对数变换
%模拟均值为0方差为0.02的高斯噪声,
G=imnoise(I,'gaussian',0,0.02);
%FFT 高斯噪声频谱图
H=fft2(im2double(G));
H=fftshift(H); %FFT频谱平移
H=real(H);
T3=log(H+1); %频谱对数变换
subplot(3,2,1),subimage(I);
title('原始图像');
subplot(3,2,2),imshow(T1,[]);
title('原始图像其频谱图');
subplot(3,2,3),subimage(S);
title('添加椒盐噪声后的图像');
subplot(3,2,4),imshow(T2,[]);
title('椒盐噪声频谱图');
subplot(3,2,5),subimage(G);
title('添加高斯噪声后的图像');
subplot(3,2,6),imshow(T3,[]);
title('高斯噪声频谱图');
运行结果:
2. 对一幅图像进行适当平移后,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。
%读入原图像
s=imread('gou.jpg');
i=rgb2gray(s);
i=double(i);
j=fft2(i); %傅里叶变换
m=fftshift(j); %直流分量移到频谱中心
RR=real(m); %取傅里叶变换的实部
II=imag(m); %取傅里叶变换的虚部
A=sqrt(RR.^2+II.^2); %计算频谱府幅值
A=(A-min(min(A)))./(max(max(A)))*255; % 归一化
I=translate(strel(1), [100 100]);%对图像矩阵im中的数据进行移位操作
a= imdilate(s,I);
b=rgb2gray(a);
b=double(a);
c=fft2(b); %傅里叶变换
f=fftshift(c); %直流分量移到频谱中心
WW=real(f); %取傅里叶变换的实部B
ZZ=imag(f); %取傅里叶变换的虚部
B=sqrt(WW.^2+ZZ.^2); %计算频谱府幅值
B=(B-min(min(B)))./(max(max(B)))*255; % 归一化
subplot(2,2,1),subimage(s);
title('原图像')
subplot(2,2,2),imshow(A);
title('离散傅里叶频谱');
subplot(2,2,3),subimage(a);
title('平移图像')
subplot(2,2,4),imshow(B);
title('平移图像离散傅里叶频谱')
运行结果:
3. 对一幅图像进行逆时针90度旋转,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的对应关系。
%读入原图像
s=imread('gou.jpg');
i=rgb2gray(s);
i=double(i);
j=fft2(i); %傅里叶变换
m=fftshift(j); %直流分量移到频谱中心
RR=real(m); %取傅里叶变换的实部
II=imag(m); %取傅里叶变换的虚部
A=sqrt(RR.^2+II.^2); %计算频谱府幅值
A=(A-min(min(A)))./(max(max(A)))*255; % 归一化
a=imrotate(s, -90); %对图像矩阵im中的数据进行旋转操作
b=double(a);
c=fft2(b); %傅里叶变换
f=fftshift(c); %直流分量移到频谱中心
WW=real(f); %取傅里叶变换的实部B
ZZ=imag(f); %取傅里叶变换的虚部
B=sqrt(WW.^2+ZZ.^2); %计算频谱府幅值
B=(B-min(min(B)))./(max(max(B)))*255; % 归一化
subplot(2,2,1),subimage(s);
title('原图像')
subplot(2,2,2),imshow(A);
title('离散傅里叶频谱');
subplot(2,2,3),subimage(a);
title('旋转图像')
subplot(2,2,4),imshow(B);
title('旋转图像离散傅里叶频谱')
运行结果:
4. 对一副图像进行离散余弦变换,并删除无用信息后进行反变换,显示变换后的结果。
%二维离散余弦变换
I = imread('gouc.tif');
I = rgb2gray(I);
I = im2double(I);
%二维离散余弦反变换
J = dct2(I);
J(abs(J) < 0.1) = 0;
K = idct2(J);
figure;
subplot(1,3,1), imshow(I);
title('原图')
subplot(1,3,2), imshow(J);
title('二维离散余弦变换结果')
subplot(1,3,3), imshow(K);
title('二维离散余弦反变换结果')
5. 对一副图像添加均值为0,方差为0.003的高斯噪声后,使用小波变换去噪。
这个学姐也没写出来 会的同学可以写在评论区 可以一起学习!
在这个实验中会看出傅里叶变换的正负性质
离散余弦变换是以一组不同频率和幅值的余弦西数和来近似一幅图像,实际上是傅立叶变换的实数部分。离散余弦变换(Discrete Cosine Transform,DCT)有一个重要的性质,即对于一幅图像,其大部分可视化信息都集中在少数的变换系数上。因此,离散余弦变换经常用于图像压缩。
在MATLAB软件中,采用函数dct( )进行一维离散余弦变换,采用函数idct()进行一维离散余弦反变换,通过函数dct2( )进行二维离散余弦变换。
DCT适合处理细节丰富的图像实验,DCT变化后的数据仍然比较集中(变换后DCT系数能量主要集中在左上角,其余大部分系数接近于零)。如果同样从频率谱恢复原始图像,那么选用DCT更合理,因为DCT只需要存储更少的数据点。正是这个原因,是的DCT广泛地应用于图像压缩。将变换后的DCT系数进行门限操作,将小于一定值得系数归零,这就是图像压缩中的量化过程,然后进行逆DCT运算,得到压缩后的图像。
有什么错误的或者有什么建议可以私聊我,也可评论,一起学习,一起进步,加油!!!