[問題] bcb中以fftw3作Fourier transform圖形

看板C_and_CPP (C/C++)作者 (愛心癤瘤‧刀)時間13年前 (2012/11/15 15:41), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) borland C++ builder 6 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) fftw3.h 、 math.h 問題(Question): 我想將讀入的BMP檔轉換成傅利葉轉換的圖形,在只有30x30大小的黑底白橫桿圖(Fig.1) 轉出來看起來還好(Fig.2),但餵比較大的圖(Fig.3)就會變得繁星點點(Fig.4), 請教該怎麼辦呢? Fig.1 : http://ppt.cc/ejy- Fig.2 : http://ppt.cc/3UUm Fig.3 : http://ppt.cc/l1nw Fig.4 : http://ppt.cc/prfh 餵入的資料(Input): http://ppt.cc/l1nw 預期的正確結果(Expected Output): 我希望大圖至少能轉換成這樣 http://ppt.cc/IN-F 錯誤結果(Wrong Output): http://ppt.cc/prfh 程式碼(Code):(請善用置底文網頁, 記得排版) int Nx=Image1->Picture->Bitmap->Width; int Ny=Image1->Picture->Bitmap->Height; fftw_complex *in, *out; fftw_plan p; in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * Nx * Ny); out= (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * Nx * Ny); for(int i=0;i<Image1->Picture->Bitmap->Height-1;i++) { ptr1=(Byte*)Image1->Picture->Bitmap->ScanLine[i]; ptr2=(Byte*)Image2->Picture->Bitmap->ScanLine[i]; for(int j=0;j<Image1->Picture->Bitmap->Width-1;j++) { gray=(ptr1[j*3]+ptr1[j*3+1]+ptr1[j*3+2])/3; in[(i*Nx)+j][0]=gray*pow(-1,i+j);//取得灰階值及平移至圖中央 in[(i*Nx)+j][1]=0; } } p = fftw_plan_dft_2d(Nx,Ny, in , out , FFTW_FORWARD, FFTW_ESTIMATE); fftw_execute(p); for(int i=0;i<Image1->Picture->Bitmap->Height-1;i++) { ptr1=(Byte*)Image1->Picture->Bitmap->ScanLine[i]; ptr2=(Byte*)Image2->Picture->Bitmap->ScanLine[i]; for(int j=0;j<Image1->Picture->Bitmap->Width-1;j++) { double tem1= out[(i*Nx)+j][0]; //取得轉換後的實數部 double tem2= out[(i*Nx)+j][1]; //取得轉換後的虛數部 double tem3= pow(pow(tem1,2)+pow(tem2,2),0.5); //實數部與虛數部平方和開根號 double sc=pow(pow(out[(Nx/2)+(Ny/2)-1][0],2)+pow(out[(Nx/2)+(Ny/2)-1][1],2),0.5);//取得轉換後圖片的中心點的值 ptr2[j*3]=10*log(1+(tem3/sc)); ptr2[j*3+1]=10*log(1+(tem3/sc)); ptr2[j*3+2]=10*log(1+(tem3/sc)); if((tem3/sc)<0) //去雜點 { ptr2[j*3]=0; ptr2[j*3+1]=0; ptr2[j*3+2]=0; } } } Image2->Repaint(); fftw_destroy_plan(p); fftw_free(in); fftw_free(out); 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.160.229.191 ※ 編輯: knife5566 來自: 1.160.229.191 (11/15 15:45) ※ 編輯: knife5566 來自: 1.160.229.191 (11/15 15:45) ※ 編輯: knife5566 來自: 1.160.229.191 (11/15 15:45)
文章代碼(AID): #1Gf9odWV (C_and_CPP)
文章代碼(AID): #1Gf9odWV (C_and_CPP)