傅里叶变换在图像处理中的应用研究

loading 分享 2026-8-25 下载文档

燕 山 大 学 课 程 设 计

等格式。

3.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 ”); }

;------------------------------------------------------------------------------------------------------------

do_2D_IDFT( )

{int imin , imax , jmax , fg=1; char c;

outtextxy(100, 430, “filter? (Y/N) : ”); c= getch( ); delline( ); if( c = = ?y? | | c = = ?Y?) {

while(fg) { gotoxy (60,21);

7

燕 山 大 学 课 程 设 计 printf ( “0< = = > % d:”, ( size > > 1) ); gotoxy (60,22);

printf(“input imin:”); scanf(“%d”,& imin ); gotoxy (60,23);

printf(“input imax:”); scanf(“%d”,& imax); gotoxy (60,24);

printf(“input jmin:”); scanf(“%d”,& jmin ); gotoxy (60,25);

printf(“input jmax:”); 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:- < = = > - \\ n”, imin , imax ); gotoxy(56,13);

printf( “j : % 2d < = = > % 2d \\ n ”, jmin , jmax); } }

;------------------------------------------------------------------------------------------------------ fft 2( xx, yy, flag )

float xx [SIZE] [SIZE],yy [SIZE] [SIZE]; int flag ;

{ float x [SIZE],y [SIZE]; Int i, j;

for(i= 0;i < size; i+ + )

8

燕 山 大 学 课 程 设 计

{ for ( j=o; j < size; i+ + )

{x [ j ] = xx[ j ] [ i ]; y[ j ]= yy[ j ] [ i ];} fft 1 (x, y, flag); for ( j= 0; j< size; j+ + )

{xx[ j ] [ i ] = x[ j ];yy [ j ] [ i ] = y [ j ]; } }

for(i = 0; j < size; i + + ) { for(j=0 ; j< size; j+ +)

{ x[ j ] = xx[ i ] [ j ]; y[ j ] = yy[ i ] [ j ]; } fft 1( x, y, flag ); for( j= 0; j< size; j+ + );

{xx[ i ][ j ] = x[ j ]; yy[ i ] [ j ] = y [ j ];} } }

;-------------------------------------------------------------------------------------------------------- fft ( xx, yy, flag ) float xx [ ], yy [ ]; int flag; {

int dn, pow , m , j1 , i , j , k , ndv2 , arg , w; float c , s , t1 , t2 ; mk_table( );

dn = size; w = 1; pow = ketasuu( size ); for( i = 0;i < pow; i + + ) {

m = dn; dn = dn/2; arg = 0; for( j= o; j< dn; j+ + ) {

c= _cos[ arg ]; s= - flag* _sin[ arg ];

arg= arg+ w; k= m;

9

燕 山 大 学 课 程 设 计 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= siza/ 2; for( i= 0; i< siza – 1; i+ + ) { if ( i< j )

{ 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< size;j + + ) { xx[ j ] = xx [ j ]/ size;

10


傅里叶变换在图像处理中的应用研究.doc 将本文的Word文档下载到电脑
搜索更多关于: 傅里叶变换在图像处理中的应用研究 的文档
相关推荐
相关阅读