全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:977
推到 Plurk!
推到 Facebook!

請問一下關於二維影像的DFT

缺席
sd016808
一般會員


發表:1
回覆:2
積分:0
註冊:2011-10-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-10-05 21:42:59 IP:140.118.xxx.xxx 訂閱
請問一下做完DFT轉換之後,是要取大小之後再回傳給像素點?還是只取實部做回傳?

另外關於exp的指數部分,我看課本上的公式,應該是長這樣子a=2*M_PI*(((u*x)/Width) ((v*y)/Height))

但我看網路上的教學,幾乎都是長這個樣子a=2*M_PI*((u*x) (v*y))/Width

我兩種都有去試過,但跑出來的影像都不正確

取前面那種,跑完整張影像會變黑的,取後面那種影像中間會有一白點,周圍都是黑底

請問一下我的程式碼是哪裡寫錯了 問題有點多 很抱歉




[code cpp]
void __fastcall TForm1::Button11Click(TObject *Sender)
{
Graphics::TBitmap *TheBitmap, *TempBitmap;
int Width,Height,x,y,u,v,real_max=0;
float a=0,temp=0;
Byte *ptr1,*ptrt;
std::complex<double> B;
TempBitmap= new Graphics::TBitmap();
TheBitmap=Image1->Picture ->Bitmap;
TheBitmap->PixelFormat=pf8bit;
TempBitmap->Assign(TheBitmap);
TempBitmap->PixelFormat=pf8bit;
Width=TheBitmap->Width;
Height= TheBitmap->Height;
//int aaa[64][64]={0};
for(v=0;v<(Height);v )
{
ptr1=(Byte*) TheBitmap->ScanLine[v];
ptrt=(Byte*) TempBitmap->ScanLine[v];
for(u=0;u<(Width);u )
{
B._M_re=0;
B._M_im=0;
for(x=0;x<(Width);x )
{
for(y=0;y<(Height);y )
{
//a=2*M_PI*(((u*x)/Width) ((v*y)/Height));
temp=powl(-1,x y);
a=2*M_PI*((u*x) (v*y))/Width;
B._M_re =(ptr1[u]*temp*cos(a));
B._M_im =(ptr1[u]*temp*sin(a)); }
}
B._M_re=B._M_re/Width;
B._M_im=B._M_im/Width;
ptrt[u]=(int)sqrt(powl(B._M_re,2) powl(B._M_im,2));
if(ptrt[u]<0)
ptrt[u]=0;
if(ptrt[u]>255)
ptrt[u]=255;
} }
/*for(v=0;v<(Height);v )
{
ptrt=(Byte*) TempBitmap->ScanLine[v];
for(u=0;u<(Width);u )
{
if(aaa[u][v]>real_max)
{
real_max=aaa[u][v];
}
if(aaa[u][v]
{
real_min=aaa[u][v];
}
}
}
for(v=0;v<(Height);v )
{
ptrt=(Byte*) TempBitmap->ScanLine[v];
for(u=0;u<(Width);u )
{
ptrt[u]=aaa[u][v]*255/(real_max-real_min);
}
}*/
TheBitmap->Assign(TempBitmap);
Image1->Refresh();
delete TempBitmap;
}
[/code]

編輯記錄
sd016808 重新編輯於 2011-10-05 07:44:48, 註解 無‧
sd016808 重新編輯於 2011-10-05 07:47:16, 註解 無‧
sd016808 重新編輯於 2011-10-05 07:48:12, 註解 無‧
sd016808 重新編輯於 2011-10-05 07:50:08, 註解 無‧
sd016808 重新編輯於 2011-10-05 07:50:39, 註解 無‧
sd016808 重新編輯於 2011-10-05 07:52:20, 註解 無‧
sd016808
一般會員


發表:1
回覆:2
積分:0
註冊:2011-10-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-10-07 01:11:35 IP:59.121.xxx.xxx 訂閱
 我把scanline 改成用Canvas的方式 圖片就跑出來了 不知道為何不能用Scanline的方式

sd016808
一般會員


發表:1
回覆:2
積分:0
註冊:2011-10-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-10-07 15:56:53 IP:140.118.xxx.xxx 訂閱
我發現是我自己耍笨了 scanline跟canvas都可以用  我scanline 的ptr1部份放錯位置了...
encoref70036
一般會員


發表:29
回覆:47
積分:15
註冊:2011-05-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-11-02 23:27:47 IP:114.26.xxx.xxx 訂閱
sd016808前輩您好
請問您為什麼要做這兩段呢B._M_re=B._M_re/Width;
B._M_im=B._M_im/Width;
公式上好像沒有再除以寬 但是好像要除影像才會正確 請問是為什麼呢?
還有前輩您用這個公式可以做得出來嗎a=2*M_PI*(((u*x)/Width) ((v*y)/Height))
我做的影像出來都不正確~
系統時間:2017-12-15 2:42:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!