1.课程设计目的
1、 提高分析问题、解决问题的能力,进一步巩固数字图像处理系统中的基本原理与方
法。
2、 熟悉掌握一门计算机语言,可以进行数字图像的应用处理的开发设计。
2.课程设计内容及实现
2.1、二维快速傅立叶变换:
本项目的重点是:
这个项目的目的是开发一个2-D FFT程序“包”,将用于在其他几个项目。您的实现必须有能力:
(a) 乘以(-1),x + y的中心变换输入图像进行滤波。
(b) 一个真正的函数相乘所得到的(复杂的)的阵列(在这个意义上的实系数乘以变换的实部和虚部)。回想一下,对相应的元件上完成两幅图像的乘法。
(c) 计算傅立叶逆变换。
(d) 结果乘以(-1)x + y的实部。
(e) 计算频谱。
基本上,这个项目实现了图。4.5。如果您正在使用MATLAB ,那么您的傅立叶变换程序将不会受到限制,其大小是2的整数次幂的图像。如果要实现自己的计划,那么您所使用的FFT 例程可能被限制到2的整数次幂。在这种情况下,你可能需要放大或缩小图像到适当的大小,使用你的程序开发项目02-04
逼近:为了简化这个和以下的工程(除项目04-05),您可以忽略图像填充(4.6.3节)。虽然你的结果不会完全正确,将获得显着的简化,不仅在图像的大小,而且在需要裁剪的最终结果。由这种近似的原则将不会受到影响
结果如下:
主要代码
f=imread('Fig4.04(a).jpg');
H=imread('Fig4.04(a).jpg');
subplot(3,2,1);
imshow(f);
title('(a)原图像');
[M1,N1]=size(f);
f=im2double(f);
[M2,N2]=size(H);
H=im2double(H); %把灰度图像I1的数据类型转换成转换成双精度浮点类型 for x=1:M1
for y=1:N1
f(x,y)=(-1)^(x+y)*f(x,y); %用(-1)^(x+y)乘以输入图像, 来实现中心化变换
end
end
F=fft2(f); %使用函数fft2可计算傅立叶变换
subplot(3,2,3);
imshow(F);
title('(b)傅立叶变换的图像');
if(M2==1)&&(N2==1)
G=F(x,y)*H(x,y);
elseif((M1==M2)&&(N1==N2))
for x=1:M1
for y=1:N1
G(x,y)=F(x,y)*H(x,y);
end
end
else
error('输入图像有误','ERROR');
end %通过两个图像的乘法程序,实现对相应元素的相乘
g=ifft2(G);
subplot(3,2,4);
imshow(g);
title('(c)傅立叶逆变换的图像');
for x=1:M1
for y=1:N1
g(x,y)=(-1)^(x+y)*g(x,y);
end
end
g=real(g);
S=log(1+abs(F)); %计算傅立叶幅度谱并做对数变换
subplot(3,2,5);
plot(S); %二维图像显示幅度谱
title('(d)二维图像显示幅度谱');
Q=angle(F); %计算傅立叶变换相位谱
subplot(3,2,6);
plot(Q);
title('(e)二维图像显示相位谱'); %二维图像显示相位谱
结果截图
图1 傅里叶变换及频谱图
结果分析:
图1中(a )是原始灰度图像,对原图进行傅里叶变换,用(-1)^(x+y)乘以输入图像, 来实现中心化变换得到(b ),(c )为傅里叶变换的逆变换得到的图像。对应(d )、(e )分别为计算的幅度谱和相位谱。
2.2、傅立叶频谱和平均值
本项目的重点是:
(a) 下载图。 4.18(a )和计算(居中)傅立叶频谱。
(b) 显示频谱。
(c) 使用(a )中计算图像的平均值的结果
结果如下:
主要代码
%abs-取绝对值和复数幅度
%fft2-求二维离散傅立叶变换
I = imread('Fig4.11(a).jpg');
I1 = fft2(I);
X = fftshift(abs(I1)); %直流分量移到频谱中心
[m,n] = size(X);
Average_value = X(m/2+1,n/2+1)/(m*n) %平均值计算
I1 = abs(I1)*256/max(max(abs(I1))); %傅立叶谱图像
X = X*256/max(max(X)); %中心化的傅立叶谱图像'
subplot(1,3,1);
imshow(I);
title('(a)原图像');
subplot(1,3,2);
imshow(I1);
title('(b)傅立叶谱图像');
subplot(1,3,3);
imshow(X);
title ('(c)中心化的傅立叶谱图像');
结果截图
图 1 计算图像的频谱图并中心化
图3 平均值
结果分析:
图2中(a )为原始图像,先对图像进行傅里叶变换得到(b ),然后移至频谱中心得到(c ),图3为图像的平均值的结果,此结果是在matlab 窗口中实现的。
2.3、低通滤波
本项目的重点是:
(a) 实现高斯低通滤波器式。 (4.3-7)。你必须能够指定大小,M×N 的,由此产
生的2D 功能。此外,你必须能够指定二维高斯函数的中心位置
(b) 下载图。4.11(一)[这个形象是同图。 4.18(a )〕和低通滤波器中取得图。
4.18(三)
结果如下:
主要代码
I=imread('Fig4.11(a).jpg')
subplot(1,2,1);
imshow(I);
title('(a)原始图像');
s=fftshift(fft2(I));
[M,N]=size(s); %分别返回s 的行数到M 中,列数到N 中 n=2; %对n 赋初值
%高斯低通滤波,这里以标准差d0=30来分析图像
d0=30; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j )到傅立叶变换中心的距离 h=1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数
s(i,j)=h*s(i,j); %GLPF滤波后的频域表示
end
end
s=ifftshift(s); %对s 进行反FFT 移动
%对s 进行二维反离散的Fourier 变换后,取复数的实部转化为无符号8位整数
s=uint8(real(ifft2(s)));
%创建图形图像对象
subplot(1,2,2);
imshow(s); %显示高斯低通滤波处理后的图像 title('(b)高斯低通滤波(d0=30)');
结果截图
图 2 高斯低通实现的图像
结果分析:
图4中(a )为原始图像,将原始图像经过高斯低通滤波,得到(b ),这里以标准差d0=15来分析图像。
2.4、使用一个低通图像高通滤波
本项目的重点是:
(a) 从原来的04-03项目减去你的形象得到锐化后的图像,如式。 (4.4-14)。你
会注意到,生成的图像并不像高斯高通图。 4.26。解释为什么会是这样
(b) 调整的方差高斯低通滤波器,直到图像相减得到的结果看起来类似于 图。
4.26(三)。解释你的结果
结果如下:
主要代码
I=imread('Fig4.11(a).jpg')
s=fftshift(fft2(I));
[M,N]=size(s); %分别返回s 的行数到M 中,列数到N 中 n=2; %对n 赋初值
%高斯低通滤波,这里以标准差d0=30来分析图像
d0=30; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j )到傅立叶变换中心的距离 h=1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数
s(i,j)=h*s(i,j); %GLPF滤波后的频域表示
end
end
s=ifftshift(s); %对s 进行反FFT 移动
%对s 进行二维反离散的Fourier 变换后,取复数的实部转化为无符号8位整数
s=uint8(real(ifft2(s)));
%创建图形图像对象
subplot(1,2,1);
imshow(s); %显示高斯低通滤波处理后的图像 title('(a)高斯低通滤波实现的图片');
s=fftshift(fft2(I));
[M,N]=size(s); %分别返回s 的行数到M 中,列数到N 中 n=2; %对n 赋初值
%高斯高通滤波,这里以标准差d0=30来分析图像
d0=30; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j )到傅立叶变换中心的距离 h=1-1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数
s(i,j)=h*s(i,j); %GLPF滤波后的频域表示
end
end
s=ifftshift(s); %对s 进行反FFT 移动
%对s 进行二维反离散的Fourier 变换后,取复数的实部转化为无符号8位整数
s=uint8(real(ifft2(s)));
%创建图形图像对象
subplot(1,2,2);
imshow(s); %显示高斯高通滤波处理后的图像 title('(b) 高斯高通滤波实现的图片');
结果截图
图 3 高通实现的图像
结果分析:
图5中(a )为经过高斯低通处理的图像,将此图像经过高斯高通处理得到(b )。
2.5、在频域的相关性
本项目的重点是:
下载图。 4.41(a )及(b )和重复例4.11获得图。 4.41(E )。给(的x ,y )的二维相关函数中的最大值的位置的坐标。有没有必要在图中绘制的档案中。 4.41(F )
结果如下:
主要代码
clear;clc;
fa=imread('fig4.41(a).jpg');
fb=imread('fig4.41(b).jpg');
subplot(2,2,1);
imshow(fa);
title('(a)原始图像');
subplot(2,2,2);
imshow(fb);
title('(b)模板');
[A B]=size(fa);
[C D]=size(fb);
expfa=zeros(A+C-1,B+D-1);
expfb=zeros(A+C-1,B+D-1);
expfa(1:A,1:B)=fa;
expfb(1:C,1:D)=fb;
subplot(2,2,3);
imshow(expfa);
title('(c)图像延拓');
subplot(2,2,4);
imshow(expfb);
title('(d)图像延拓');
H=real(ifft2(fft2(expfa).*fft2(rot90(expfb,2),293,297)));%求相关性
figure;
imshow(H,[])
title('(e)两图像延拓之后的相关函数');
max(H(:)) %求取最大的相关值——因为是利用模板做的相关运算,值最大的地方最相关
thresh=21417100;%设置一个略低于最大相关值的阈值
figure;
imshow(H > thresh)%显示定位.
title('(f) 图像定位');
结果截图
图 4 两原始图像的延拓
图7 延拓之后图像
图8 图像定位
图 9 结果
结果分析:
图6中(a )是图像,(b )是模板。延拓后的图像如图6中的(c )、(d )所示。两延拓图像的空间域相关以图像形式显示与图7中的(e ), 图8中的(f )显示的是图像的定位图。
3.课程设计总结与体会
本次实验,通过使用MATLAB 中的图像处理工具箱中的函数,对每个图像处理函数的功能都有了深入了认识。了解了日常看到的图片为什么会有各种模糊问题,也知道了该如何解决一些基本的图像问题。希望下次能知道更多使用MA TLAB 来解决新的问题。
1.课程设计目的
1、 提高分析问题、解决问题的能力,进一步巩固数字图像处理系统中的基本原理与方
法。
2、 熟悉掌握一门计算机语言,可以进行数字图像的应用处理的开发设计。
2.课程设计内容及实现
2.1、二维快速傅立叶变换:
本项目的重点是:
这个项目的目的是开发一个2-D FFT程序“包”,将用于在其他几个项目。您的实现必须有能力:
(a) 乘以(-1),x + y的中心变换输入图像进行滤波。
(b) 一个真正的函数相乘所得到的(复杂的)的阵列(在这个意义上的实系数乘以变换的实部和虚部)。回想一下,对相应的元件上完成两幅图像的乘法。
(c) 计算傅立叶逆变换。
(d) 结果乘以(-1)x + y的实部。
(e) 计算频谱。
基本上,这个项目实现了图。4.5。如果您正在使用MATLAB ,那么您的傅立叶变换程序将不会受到限制,其大小是2的整数次幂的图像。如果要实现自己的计划,那么您所使用的FFT 例程可能被限制到2的整数次幂。在这种情况下,你可能需要放大或缩小图像到适当的大小,使用你的程序开发项目02-04
逼近:为了简化这个和以下的工程(除项目04-05),您可以忽略图像填充(4.6.3节)。虽然你的结果不会完全正确,将获得显着的简化,不仅在图像的大小,而且在需要裁剪的最终结果。由这种近似的原则将不会受到影响
结果如下:
主要代码
f=imread('Fig4.04(a).jpg');
H=imread('Fig4.04(a).jpg');
subplot(3,2,1);
imshow(f);
title('(a)原图像');
[M1,N1]=size(f);
f=im2double(f);
[M2,N2]=size(H);
H=im2double(H); %把灰度图像I1的数据类型转换成转换成双精度浮点类型 for x=1:M1
for y=1:N1
f(x,y)=(-1)^(x+y)*f(x,y); %用(-1)^(x+y)乘以输入图像, 来实现中心化变换
end
end
F=fft2(f); %使用函数fft2可计算傅立叶变换
subplot(3,2,3);
imshow(F);
title('(b)傅立叶变换的图像');
if(M2==1)&&(N2==1)
G=F(x,y)*H(x,y);
elseif((M1==M2)&&(N1==N2))
for x=1:M1
for y=1:N1
G(x,y)=F(x,y)*H(x,y);
end
end
else
error('输入图像有误','ERROR');
end %通过两个图像的乘法程序,实现对相应元素的相乘
g=ifft2(G);
subplot(3,2,4);
imshow(g);
title('(c)傅立叶逆变换的图像');
for x=1:M1
for y=1:N1
g(x,y)=(-1)^(x+y)*g(x,y);
end
end
g=real(g);
S=log(1+abs(F)); %计算傅立叶幅度谱并做对数变换
subplot(3,2,5);
plot(S); %二维图像显示幅度谱
title('(d)二维图像显示幅度谱');
Q=angle(F); %计算傅立叶变换相位谱
subplot(3,2,6);
plot(Q);
title('(e)二维图像显示相位谱'); %二维图像显示相位谱
结果截图
图1 傅里叶变换及频谱图
结果分析:
图1中(a )是原始灰度图像,对原图进行傅里叶变换,用(-1)^(x+y)乘以输入图像, 来实现中心化变换得到(b ),(c )为傅里叶变换的逆变换得到的图像。对应(d )、(e )分别为计算的幅度谱和相位谱。
2.2、傅立叶频谱和平均值
本项目的重点是:
(a) 下载图。 4.18(a )和计算(居中)傅立叶频谱。
(b) 显示频谱。
(c) 使用(a )中计算图像的平均值的结果
结果如下:
主要代码
%abs-取绝对值和复数幅度
%fft2-求二维离散傅立叶变换
I = imread('Fig4.11(a).jpg');
I1 = fft2(I);
X = fftshift(abs(I1)); %直流分量移到频谱中心
[m,n] = size(X);
Average_value = X(m/2+1,n/2+1)/(m*n) %平均值计算
I1 = abs(I1)*256/max(max(abs(I1))); %傅立叶谱图像
X = X*256/max(max(X)); %中心化的傅立叶谱图像'
subplot(1,3,1);
imshow(I);
title('(a)原图像');
subplot(1,3,2);
imshow(I1);
title('(b)傅立叶谱图像');
subplot(1,3,3);
imshow(X);
title ('(c)中心化的傅立叶谱图像');
结果截图
图 1 计算图像的频谱图并中心化
图3 平均值
结果分析:
图2中(a )为原始图像,先对图像进行傅里叶变换得到(b ),然后移至频谱中心得到(c ),图3为图像的平均值的结果,此结果是在matlab 窗口中实现的。
2.3、低通滤波
本项目的重点是:
(a) 实现高斯低通滤波器式。 (4.3-7)。你必须能够指定大小,M×N 的,由此产
生的2D 功能。此外,你必须能够指定二维高斯函数的中心位置
(b) 下载图。4.11(一)[这个形象是同图。 4.18(a )〕和低通滤波器中取得图。
4.18(三)
结果如下:
主要代码
I=imread('Fig4.11(a).jpg')
subplot(1,2,1);
imshow(I);
title('(a)原始图像');
s=fftshift(fft2(I));
[M,N]=size(s); %分别返回s 的行数到M 中,列数到N 中 n=2; %对n 赋初值
%高斯低通滤波,这里以标准差d0=30来分析图像
d0=30; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j )到傅立叶变换中心的距离 h=1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数
s(i,j)=h*s(i,j); %GLPF滤波后的频域表示
end
end
s=ifftshift(s); %对s 进行反FFT 移动
%对s 进行二维反离散的Fourier 变换后,取复数的实部转化为无符号8位整数
s=uint8(real(ifft2(s)));
%创建图形图像对象
subplot(1,2,2);
imshow(s); %显示高斯低通滤波处理后的图像 title('(b)高斯低通滤波(d0=30)');
结果截图
图 2 高斯低通实现的图像
结果分析:
图4中(a )为原始图像,将原始图像经过高斯低通滤波,得到(b ),这里以标准差d0=15来分析图像。
2.4、使用一个低通图像高通滤波
本项目的重点是:
(a) 从原来的04-03项目减去你的形象得到锐化后的图像,如式。 (4.4-14)。你
会注意到,生成的图像并不像高斯高通图。 4.26。解释为什么会是这样
(b) 调整的方差高斯低通滤波器,直到图像相减得到的结果看起来类似于 图。
4.26(三)。解释你的结果
结果如下:
主要代码
I=imread('Fig4.11(a).jpg')
s=fftshift(fft2(I));
[M,N]=size(s); %分别返回s 的行数到M 中,列数到N 中 n=2; %对n 赋初值
%高斯低通滤波,这里以标准差d0=30来分析图像
d0=30; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j )到傅立叶变换中心的距离 h=1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数
s(i,j)=h*s(i,j); %GLPF滤波后的频域表示
end
end
s=ifftshift(s); %对s 进行反FFT 移动
%对s 进行二维反离散的Fourier 变换后,取复数的实部转化为无符号8位整数
s=uint8(real(ifft2(s)));
%创建图形图像对象
subplot(1,2,1);
imshow(s); %显示高斯低通滤波处理后的图像 title('(a)高斯低通滤波实现的图片');
s=fftshift(fft2(I));
[M,N]=size(s); %分别返回s 的行数到M 中,列数到N 中 n=2; %对n 赋初值
%高斯高通滤波,这里以标准差d0=30来分析图像
d0=30; %初始化d0
n1=floor(M/2); %对M/2进行取整
n2=floor(N/2); %对N/2进行取整
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j )到傅立叶变换中心的距离 h=1-1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数
s(i,j)=h*s(i,j); %GLPF滤波后的频域表示
end
end
s=ifftshift(s); %对s 进行反FFT 移动
%对s 进行二维反离散的Fourier 变换后,取复数的实部转化为无符号8位整数
s=uint8(real(ifft2(s)));
%创建图形图像对象
subplot(1,2,2);
imshow(s); %显示高斯高通滤波处理后的图像 title('(b) 高斯高通滤波实现的图片');
结果截图
图 3 高通实现的图像
结果分析:
图5中(a )为经过高斯低通处理的图像,将此图像经过高斯高通处理得到(b )。
2.5、在频域的相关性
本项目的重点是:
下载图。 4.41(a )及(b )和重复例4.11获得图。 4.41(E )。给(的x ,y )的二维相关函数中的最大值的位置的坐标。有没有必要在图中绘制的档案中。 4.41(F )
结果如下:
主要代码
clear;clc;
fa=imread('fig4.41(a).jpg');
fb=imread('fig4.41(b).jpg');
subplot(2,2,1);
imshow(fa);
title('(a)原始图像');
subplot(2,2,2);
imshow(fb);
title('(b)模板');
[A B]=size(fa);
[C D]=size(fb);
expfa=zeros(A+C-1,B+D-1);
expfb=zeros(A+C-1,B+D-1);
expfa(1:A,1:B)=fa;
expfb(1:C,1:D)=fb;
subplot(2,2,3);
imshow(expfa);
title('(c)图像延拓');
subplot(2,2,4);
imshow(expfb);
title('(d)图像延拓');
H=real(ifft2(fft2(expfa).*fft2(rot90(expfb,2),293,297)));%求相关性
figure;
imshow(H,[])
title('(e)两图像延拓之后的相关函数');
max(H(:)) %求取最大的相关值——因为是利用模板做的相关运算,值最大的地方最相关
thresh=21417100;%设置一个略低于最大相关值的阈值
figure;
imshow(H > thresh)%显示定位.
title('(f) 图像定位');
结果截图
图 4 两原始图像的延拓
图7 延拓之后图像
图8 图像定位
图 9 结果
结果分析:
图6中(a )是图像,(b )是模板。延拓后的图像如图6中的(c )、(d )所示。两延拓图像的空间域相关以图像形式显示与图7中的(e ), 图8中的(f )显示的是图像的定位图。
3.课程设计总结与体会
本次实验,通过使用MATLAB 中的图像处理工具箱中的函数,对每个图像处理函数的功能都有了深入了认识。了解了日常看到的图片为什么会有各种模糊问题,也知道了该如何解决一些基本的图像问题。希望下次能知道更多使用MA TLAB 来解决新的问题。