数字图像处理实验四--图像变换

数字图像处理实验四

(图像变换)

实验内容:
  1. 对图像lena、cameraman和face进行傅里叶变换,观察图像能量在频谱图中的分布情况。
  2. 利用Matlab生成下列图像,并对其进行旋转30度、90度和120度,然后对他们分别进行傅里叶变换。数字图像处理实验四--图像变换_第1张图片
  3. 对图像lena、cameraman和face用DCT变换进行图像压缩,舍掉的变换系数分别小于0.01、0.03、0.05,求经压缩、解压后的图像。
实验步骤:
  1. 对给定图像进行傅里叶变换并观察图像能量在频谱图中的分布情况。
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');

效果图:数字图像处理实验四--图像变换_第2张图片
2.matlab生成图像并进行傅里叶旋转变换

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张图片
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('复原图像 ');

效果图:
数字图像处理实验四--图像变换_第4张图片
数字图像处理实验四--图像变换_第5张图片
数字图像处理实验四--图像变换_第6张图片

问题讨论:

图像变换是将图像从空间变换到变换域(或频率域),变换的目的是根据图像在变换域的某些性质对其进行处理。傅里叶变换是使用最广泛地一种变换,可广泛应用于图像特征提取、图像增强等方面,离散余弦变换在图像压缩算法中获得了广泛的应用。

你可能感兴趣的:(数字图像处理,matlab,图像处理,计算机视觉)