P1 =imread('./face.jpg');
P1=im2double(P1);
P2 =imread('./cameraman.tif');
P2=im2double(P2);
P3 =imread('./lena.jpg');
P3=im2double(P3);
P1f = fft2(P1);
P2f = fft2(P2);
P3f = fft2(P3);
P1f1 =abs(P1f);
P2f1 = abs(P2f);
P3f1 = abs(P3f);
P1f2 = fftshift(P1f1);
P2f2 = fftshift (P2f1);
P3f2 = fftshift(P3f1);
figure;
subplot(3,3,1);
imshow(P1);
xlabel('原图face ');
subplot(3,3,2);
imshow(P2);
xlabel('原图cameraman');
subplot(3,3,3);
imshow(P3);
xlabel('原图lena');
subplot(3,3,4);
imshow(P1f,[5,30]);
xlabel('频谱图face');
subplot(3,3,5);
imshow(P2f,[5,30]);
xlabel('频谱图cameraman');
subplot(3,3,6);
imshow(P3f,[5,30]);
xlabel('频谱图lena');
subplot(3,3,7);
imshow(P1f2,[5,30]);xlabel('中心移到零点face');
subplot(3,3,8);
imshow(P2f2,[5,30]);
xlabel('中心移到零点cameraman');
Picture = zeros(256,256);
Picture(28:228,108:148) = 1;
%旋转
P1=imrotate(Picture,30,'bilinear');
P2=imrotate(Picture,90,'bilinear');
P3=imrotate(Picture,120,'bilinear');
%傅里叶变换
Picturef=fft2(Picture);F=abs(Picturef);
Picturef=fftshift(F);
P1f=fft2(P1);F=abs(P1f);P1f=fftshift(F);
P2f=fft2(P2);F=abs(P2f);P2f=fftshift(F);
P3f=fft2(P3);F=abs(P3f);P3f=fftshift(F);
%显示图像
figure;
subplot(2,4,1);imshow(Picture);xlabel('原图 ');
subplot(2,4,2);imshow(P1);xlabel('旋转30度 ');
subplot(2,4,3);imshow(P2);xlabel('旋转90度');
subplot(2,4,4);imshow(P3);xlabel('旋转120度');
subplot(2,4,5);imshow(Picturef,[5,50]);xlabel('原图的傅里叶频谱');
subplot(2,4,6);imshow(P1f,[5,50]);xlabel('旋转30度');
subplot(2,4,7);imshow(P2f,[5,50]);xlabel('旋转90度');
subplot(2,4,8);imshow(P3f,[5,50]);xlabel('旋转120度');
效果图:
3.对给定的图像按要求进行DCT变换实现图像压缩(三张图代码类似这里给出来一个)
I =imread('./lena.jpg');
[M,N]=size(I);%M=512,N=512
I=im2double(I);
%生成标准DCT变化中的矩阵(8x8)
n=8;
[cc,rr]=meshgrid(0:n-1);
C=sqrt(2/n)*cos(pi*(2*cc+1).*rr/(2*n));
C(1,:)=C(1,:)/sqrt(2);
%光亮度量化表
a=[16 11 10 16 24 40 51 61;
12 12 14 19 26 58 60 55;
14 13 16 24 40 57 69 56;
14 17 22 29 51 87 80 62;
18 22 37 56 68 109 103 77;
24 35 55 64 81 104 113 92;
49 64 78 87 103 121 120 101;
72 92 95 98 112 100 103 99 ];
%分块做DCT变换(8x8) DCT变换公式 正变换Y=CIC'
for i=1:8:M
for j=1:8:N
P=I(i:i+7,j:j+7);
K=C*P*C';
I1(i:i+7,j:j+7)=K;
K=K./a; %量化(按位除)
K(abs(K)<0.01)=0; %舍掉的变换系数分别小于0.01 0.03 0.05
I2(i:i+7,j:j+7)=K;
end
end
%分块做DCT反变换(8x8),逆变换 P=C'YC
for i=1:8:M
for j=1:8:N
P=I2(i:i+7,j:j+7).*a;%反量化
K=C'*P*C;
I3(i:i+7,j:j+7)=K;
end
end
figure(1);
subplot(2,2,1);imshow(I);xlabel('原图 ');
subplot(2,2,2);imshow(I1);xlabel('DCT变换后的频域图像 ');
subplot(2,2,3);imshow(I2);xlabel('量化后的频域图像 ');
subplot(2,2,4);imshow(I3);xlabel('复原图像 ');
图像变换是将图像从空间变换到变换域(或频率域),变换的目的是根据图像在变换域的某些性质对其进行处理。傅里叶变换是使用最广泛地一种变换,可广泛应用于图像特征提取、图像增强等方面,离散余弦变换在图像压缩算法中获得了广泛的应用。