傅里叶变换在数字图像.docx
《傅里叶变换在数字图像.docx》由会员分享,可在线阅读,更多相关《傅里叶变换在数字图像.docx(9页珍藏版)》请在冰豆网上搜索。
傅里叶变换在数字图像
数学文化课程报告
傅里叶变换在数字图像处理中的应用
成绩:
傅里叶变换在数字图像处理中的应用
朱德辉
中国石油大学华东地球科学与技术学院山东青岛266580
摘要:
文章将“傅里叶变换”这种计算工具与图像分析有机结合起来,将“傅里叶变换”应用
到空间频谱处理当中,并将结果以最直观的方式—图形表示出来;文章意在说明
用一种实用的方法对数字图像进行处理。
关键词:
傅里叶变换数字图像处理图像滤波图像压缩图像恢复
ApplicationofFourierTransforminDigitalImageProcess
ZhuDehui
ChinaUniversityofPetroleumGlobalScientificandTechnological
ShanDongQingdao266580
Abstract:
ThisarticlestatestheorganiccombinationoftheformulanamedFouriertransformandtheanalysisofimage.TheFouriertransformcanbeusedindealingwiththe3-dimen-tion-spacefrequencycurvechart;meanwhile,itcanalsoshowusdirectlybyimage.Thearticleismeanttoseekapracticalwaybeingusedindigitalimageprocess.
Keywords:
Fouriertransform,digitalimageprocessing,imagefilter,imagecompression,imagerestoration
引言
近年来,随着电子技术、图像处理方法和信号理论的迅猛发展,数字图像处理技术得到飞速发展,它广泛应用于几乎所有与成像有关的领域。
传统的光学系统在信号处理时,存有它自身很难克服的不足:
第一,它对空间频谱平面的处理很难,尤其在低频和甚低频时,即使可通过大量仪器来实现,但代价往往很高;第二,光学处理由于采样孔径(即传感单元)太窄而不能起到抗混叠作用,不能除去高频信息。
而傅里叶变换和线性移不变系统有紧密联系,它有一个很好的理论背景来指导它在图像处理中的作用,可以方便有效地克服上述不足,使其在数字图像处理中占有一席之地。
方法与原理
本文以计算机为工具,以C语言编程为手段,通过快速离散傅里叶变换与C语言
利用傅里叶变换对空间频谱平面进行处理。
在本文中,我们所用到的有关公式和原理有:
二维离散傅里叶正变换为:
二维离散傅里叶逆变换:
其中,h(k1,k2)是一个定义在二维网格0≤k1≤N1-1,0≤k2≤N2-1上的复函数(就像用等间距的矩形网格对一个二维连续函数采样所得的数组),H(n1,n2)是二维离散傅里叶变换后的复函数
N1、N2为数组的有效界长。
本程序用基-2频域抽取法蝶形运算,有关此运算详细资料请参阅《数字信号处理》一书中“离散傅里叶变换”一章。
程序中所用主要子程序简介:
①init():
将图形驱动软件装入内存,使屏幕适配器设置为图形方式,即图形初始化;
②make_original_data():
置数程序,以取得有关二维数组,进行傅里叶变换;
③do_2D_DFT():
完成二维离散傅里叶正变换,通过绘图程序将运算结果显示在屏幕上;
④do_2D_IDFT():
完成二维离散傅里叶逆变换,通过绘图程序将运算结果显示在屏幕上,使其与原图形相比较,以检验变换的恢复情况;
⑤filter():
在这个子程中,我们可以通过选择有效对空间频谱进行滤波,滤去不需要谱线,保留有效谱线,突出重要部分,削弱次要因素,达到对空间频谱处理目的。
程序设计
图一程序流程图
主要子程序:
do_2D_DFT()
{getch();
fft2(xx,yy,1);disp_fft(200,360,6,0.03);
gotoxy(30,25);printf(”2D-FFT”);
}
{intimin,imax,jmin,jmax,fg=1;charc;
outtextxy(100,430,”filter?
(Y/N):
”);c=getch();delline();
if(c=='y'c=='Y')
{
while(fg){gotoxy(60,21);
printf(”0<==>%d:
”,(size>>1));gotoxy(60,22);
printf(”inputimin:
”);scanf(”%d”,&imin);gotoxy(60,23);
printf(”inputimax:
”);scanf(”%d”,&imax);gotoxy(60,24);
printf(”inputjmin:
”);scanf(”%d”,&jmin);gotoxy(60,25);
printf(”inputjmax:
”);scanf(”%d”,&jmax);fg=filter(imin,imax,jmin,jmax);
}
setfillstyle(EMPTY_FILL,0);bar3d(0,220,639,420,0,0);
disp_fft(160,380,6,0.03);
}
fft2(xx,yy,-1);disp_data(325,164,2,0.5);
gotoxy(42,13);printf(”2D-IFFT”);if(c=='y'c=='Y')
{gotoxy(56,12);printf(”i:
%2d<==>%2dn”,imin,imax);
gotoxy(56,13);
printf(”j:
%2d<==>%2dn”,jmin,jmax);
}
}
;------------------------
fft2(xx,yy,flag)
floatxx[SIZE][SIZE],yy[SIZE][SIZE];intflag;
{floatx[SIZE],y[SIZE];inti,j;
for(i=0;i{x[j]=xx[j][i];y[j]=yy[j][i];}fft1(x,y,flag);
for(j=0;j{xx[j][i]=x[j];yy[j][i]=y[j];}}
for(i=0;i{for(j=0;j{x[j]=xx[i][j];y[j]=yy[i][j];}fft1(x,y,flag);
for(j=0;j{xx[i][j]=x[j];yy[i][j]=y[j];}}}
;--------------------------
fft1(xx,yy,flag)
floatxx[],yy[];
intflag;
{
intdn,pow,m,j1,j2,i,j,k,ndv2,arg,w;floatc,s,t1,t2;
mk_table();
dn=size;w=1;pow=ketasuu(size);for(i=0;i{
m=dn;dn=dn/2;arg=0;for(j=0;j{
c=_cos[arg];s=-flag*_sin[arg];
arg=arg+w;k=m;do{
j1=k-m+j;j2=j1+dn;t1=xx[j1]-xx[j2];
t2=yy[j1]-yy[j2];
xx[j1]=xx[j1]+xx[j2];yy[j1]=yy[j1]+yy[j2];
xx[j2]=(c*t1+s*t2);yy[j2]=(c*t2-s*t1);
k=k+m;}while(k<=size);
}
w=w*2;}
j=0;ndv2=size/2;for(i=0;i{
if(i{t1=xx[j];t2=yy[j];xx[j]=xx[i];yy[j]=yy[i];xx[i]=t1;yy[i]=t2;}
k=ndv2;while(k<=j)
{j=j-k;
k=k/2;}
j=j+k;}
if(flag==-1)for(j=0;j{xx[j]=xx[j]/size;yy[j]=yy[j]/size;
}
}
;--------------------------
filter(imin,imax,jmin,jmax)intimin,imax,jmin,jmax;
{
inti,j,n,r,h,fg=1;n=size>>1;
n=n+2;
if(imin>=0&&jmin>=0&&imax{fg=0;
for(i=0;i{for(j=jmin;jxx[i][size-j-1]=0.0;yy[i][size-j-1]=0.0;
}
}
}
for(j=0;j{for(i=imin;ixx[size-i-1][j]=0.0;yy[size-i-1][j]=0.0;
}
}
}
return(fg);
}
;--------------------------
disp_fft(sx,sy,col,ratio)intsx,sy,col;doubleratio;
{inti,j,n;n=size/2;
for(i=0;iif(isdat[i][j]=sqrt(xx[i][j]*xx[i][j]+yy[i][j]*yy[i][j]);elsesdat[i][j]=0;
draw_graph(sx,sy,col,2,ratio);
}
图形效果:
图2、图3中,红色图形为原数据图形,橙色为进行傅里叶正变换后的图形,绿色为进行傅里叶正变换,再进行傅里叶逆变换所得图形。
图2a、图2b为同一数组生成的图形,图2a未进行滤波,图2b进行i轴3~10范围、j轴6~8范围内滤波。
图3a、图3b为同一数组生成的图形,图3a未进行滤波,图3b进行i轴2~8范围、j轴5~9范围内滤波。
傅里叶变换在数字图像处理中的作用
我们通过上述程序,以很方便的形式达到了对空间频谱进行滤波的目的,傅里叶变换的作用不止于此,主要表现在以下几个方面:
图像保存:
从上述图像变换可以看出,傅里叶正变换将图像分解为一组越来越小的正交归一图像,具有很高的压缩比仍能够将原始数据完全恢复而不引入任何失真。
当我们希望将一幅图像以一种更紧凑的数据格式进行编码,同时保持数据不丢失时,傅里叶变换是一个很好的工具。
图像滤波:
在进行傅里叶变换后,若在反变换之前对变换域进行选择,可对图像进行滤波处理。
图形增强:
正变换将一幅图像分解为大小、位置和方向都不同的分量,在逆变换之前改变域中某些系数的幅度,有选择提升感兴趣的分量,而忽略不需要的东西;或根据实际需要,缔造一个传递函数,在变换域将频谱乘以传递函数,再进行傅里叶逆变换来实现。
当然,这个实现过程需要很好地设计传递函数。
图像复原:
目标是对退化的图像进行处理,使它复原成没有退化的理想图像。
成像过程的每一个环节(透镜、感光片、数字化)都能引起退化,我们可视具体应用的不同,将损失掉的图像部分恢复过来,以起到很重要的作用。
例如,图像上的污点,我们可以利用信息的相关性,通过傅里叶卷积来达到隐去污点之目的;对于天文现象像太空研究中月球或行星图像的获取,摄取特定信息,利用谱线的相关性,通过频谱分析,再现物体之原貌。
结束语
近年来,人们对一些新的变换技术产生了相当浓厚的兴趣,这些新的变换技术是专门面向图像压缩、边缘和特征检测以及纹理分析的。
傅里叶变换很好的理论背景,使其在空间滤波、光学信息处理中发挥着重要作用。
随着图像处理所用的计算机设备不断降价,随着支持傅里叶变换的硬件的出现,傅里叶变换在数字图像处理领域将得到进一步发展。
参考文献
[1]数字图像处理/(美)卡斯尔曼(Castleman,k.R)著;朱志刚等译。
-北京:
电子工业出版社,2002.2
[2]计算机图形学/孙家广等主编。
-3版。
-北京:
清华大学出版社1998.9
[3]快速傅里叶变换:
算法与应用(美)(K.R.Rao)著2013.3