傅里叶变换在数字图像.docx

上传人:b****7 文档编号:25661919 上传时间:2023-06-11 格式:DOCX 页数:9 大小:443.63KB
下载 相关 举报
傅里叶变换在数字图像.docx_第1页
第1页 / 共9页
傅里叶变换在数字图像.docx_第2页
第2页 / 共9页
傅里叶变换在数字图像.docx_第3页
第3页 / 共9页
傅里叶变换在数字图像.docx_第4页
第4页 / 共9页
傅里叶变换在数字图像.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

傅里叶变换在数字图像.docx

《傅里叶变换在数字图像.docx》由会员分享,可在线阅读,更多相关《傅里叶变换在数字图像.docx(9页珍藏版)》请在冰豆网上搜索。

傅里叶变换在数字图像.docx

傅里叶变换在数字图像

数学文化课程报告

傅里叶变换在数字图像处理中的应用

 

成绩:

 

傅里叶变换在数字图像处理中的应用

朱德辉

中国石油大学华东地球科学与技术学院山东青岛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;j

xx[i][size-j-1]=0.0;yy[i][size-j-1]=0.0;

}

}

}

for(j=0;j

{for(i=imin;i

xx[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;i

if(i

sdat[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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1