[問題] bcb中以fftw3作Fourier transform圖形
開發平台(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)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章