数字图像处理四:图像变换

(1)选择一幅图像,进行离散傅里叶变换,再对其进行X轴与Y轴上的平移,得其离散傅里叶变换,观察原图的傅里叶变换和平移后的傅里叶频谱的对应关系。

%% (1)
clc;clear;close all;
I = imread('实验图片素材/1.bmp');
subplot(321);imshow(I);title('原图像');
I = I(:,:,3);   %取前两维+第三维下表为3的全部数据
fftI = fft2(I);   %对原始图像进行二维离散傅里叶变换
sfftI = fftshift(fftI);  %将坐标原点移到频谱图的中央位置
RRfdp1 = real(sfftI);   %取实部
IIfdp1 = imag(sfftI);   %取虚部
a = sqrt(RRfdp1.^2 + IIfdp1.^2);  %取模值
a = (a-min(min(a))) / (max(max(a)) - min(min(a))) * 255;  
%将图像灰度限制到0~255区间
subplot(322);imshow(a);title('原图像的F变换');

se = translate(strel(1),[0,150]);   %进行y轴上的平移
%strel创建形态学结构元素strel(1)时图像不变
%translate偏移结构元素,在原结构元素上进行y和x方向的偏移
I = imdilate(I,se);  %对灰度图像进行膨胀运算
%即给边界添加像素,使区域从四周向外扩大
subplot(323);imshow(I);title('平移图像1');
fftI = fft2(I);   %离散傅里叶变换
sfftI = fftshift(fftI);  
RRfdp1 = real(sfftI);   
IIfdp1 = imag(sfftI);   
a = sqrt(RRfdp1.^2 + IIfdp1.^2);  
a = (a-min(min(a))) / (max(max(a)) - min(min(a))) * 255;  
subplot(324);imshow(real(a));title('平移图像1的F变换');

se = translate(strel(1),[150,0]);   %进行x轴上的平移
I = imdilate(I,se); 
subplot(325);imshow(I);title('平移图像2');
fftI = fft2(I);   %离散傅里叶变换
sfftI = fftshift(fftI);  
RRfdp1 = real(sfftI);   
IIfdp1 = imag(sfftI);   
a = sqrt(RRfdp1.^2 + IIfdp1.^2);  
a = (a-min(min(a))) / (max(max(a)) - min(min(a))) * 255;  
subplot(326);imshow(real(a));title('平移图像2的F变换');

数字图像处理四:图像变换_第1张图片

(2)选择一幅图像,进行离散傅里叶变换,再对其进行一定角度的旋转,进行离散傅里叶变换。

%%2)
clc;clear;close all;
I = imread('实验图片素材/2.bmp');
subplot(221);imshow(I);title('原图')
%求原始图像的傅里叶频谱
I = I(:,:,3);   %取前两维+第三维下表为3的全部数据
J=fft2(I);
J1=fftshift(J);
J1=abs(J1);
J1=(J1-min(min(J1)))/(max(max(J1))-min(min(J1)))*255;
subplot(222);imshow(J1);title('FFT1');
 
%对原始图像进行旋转
J=imrotate(I,45,'bilinear','crop');
%'bilinear': 双线性插值
%'crop':通过对旋转后的图像B进行裁剪,保持旋转后输出
%图像B的尺寸和输入图像A的尺寸一样。
subplot(223);imshow(J);title('旋转图像');
 
%求旋转后的图像的傅里叶频谱
J1=fft2(J);
J2=fftshift(J1);
F=abs(J2);
F=(F-min(min(F)))/(max(max(F))-min(min(F)))*255;
subplot(224);imshow(F);title('FFT2');

数字图像处理四:图像变换_第2张图片

(3)选择一幅图像,进行离散余弦变换,并对其进行离散余弦反变换,观察其结果。

%%3)
clc;clear;close all;
%matlab中可以直接读入cameraman.tif这个图像,
%在matlab的image toolbox中搜索到cameraman.tif

%对cameraman.tif文件计算
RGB=imread('cameraman.tif');
subplot(131);imshow(RGB);title('原图像');
%二维离散余弦正变换(DCT)
J=dct2(RGB);
subplot(132);imshow(log(abs(J)),[]);title('DCT正变换');
%反变换
K=idct2(J);
subplot(1,3,3);imshow(K,[]);title('DCT反变换');

数字图像处理四:图像变换_第3张图片

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