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

BCB 影像濾波處理

尚未結案
tylin0807
一般會員


發表:1
回覆:3
積分:0
註冊:2006-07-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-10-03 12:11:35 IP:220.130.xxx.xxx 未訂閱
各位好:
最近在研究如何在 BCB 寫影像處理,但是為何以下的程式碼執行
-1 -1 -1
-1 9 -1
-1 -1 -1
的處理,但是畫面總是出現雜點而非所要的應有影像. 請問是哪裏出錯了呢?
謝謝您的指導.
BYTE *PIXEL1[3],
*PIXEL,
PixelVal;
int ScanX,
ScanY;
myBITMAP->PixelFormat = pf24bit;
// ------------------------------------------------------------
for(ScanY = 1; ScanY < myBITMAP->Height - 1; ScanY )
{
PIXEL1[0] = (BYTE *)myBITMAP->ScanLine[ScanY - 1];
PIXEL1[1] = (BYTE *)myBITMAP->ScanLine[ScanY];
PIXEL1[2] = (BYTE *)myBITMAP->ScanLine[ScanY 1];
// --------------------------------------------
PIXEL = (BYTE *)myBITMAP->ScanLine[ScanY];
// --------------------------------------------
for(ScanX = 1; ScanX < myBITMAP->Width - 1; ScanX )
{
PixelVal = (*PIXEL1 0)[ScanX * 3 - 3] * -1
(*PIXEL1 0)[ScanX * 3 ] * -1
(*PIXEL1 0)[ScanX * 3 3] * -1
(*PIXEL1 1)[ScanX * 3 - 3] * -1
(*PIXEL1 1)[ScanX * 3 ] * 9
(*PIXEL1 1)[ScanX * 3 3] * -1
(*PIXEL1 2)[ScanX * 3 - 3] * -1
(*PIXEL1 2)[ScanX * 3 ] * -1
(*PIXEL1 2)[ScanX * 3 3] * -1;
// --------------------------------------------
PIXEL[ScanX * 3 2] = PixelVal;
PIXEL[ScanX * 3 1] = PixelVal;
PIXEL[ScanX * 3] = PixelVal;
}
}
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-10-03 16:37:40 IP:220.128.xxx.xxx 未訂閱

三個地方出錯了...

1.24bit的coding是RGB,PIXEL的計算不是直接相加

2.Filter要normalize

3.上Filter不可inplace作,要配置另一個memory,上完filter再copy 回去

tylin0807
一般會員


發表:1
回覆:3
積分:0
註冊:2006-07-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-10-04 15:12:10 IP:220.130.xxx.xxx 未訂閱

謝謝您的回答. 不過針對您的答覆,可否依您回答的順序,我另有對應的問題想請教.

1. 我也是這麼想,只是若不是相加,請問要如何處理?

2.Filter 不是operator嗎? 要如何 normalize?

3.嗯.這個我處理掉了.

另外可否有一小段範例程式讓我參考,不需要很長,只要重點即可.

===================引 用 文 章===================

三個地方出錯了...

1.24bit的coding是RGB,PIXEL的計算不是直接相加

2.Filter要normalize

3.上Filter不可inplace作,要配置另一個memory,上完filter再copy 回去

pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-10-05 18:23:42 IP:220.128.xxx.xxx 未訂閱

1.我所提不能相加的原因是我看錯了你的code...抱歉

2.要normalize的原因在byte的值域在0~255,你的code在大多數狀況下
一乘以9,馬上就overflow了。必需要把filter的結果,normalize到0~255之間

3.另外,Byte的定義是unsigned...乘以一個-1是undefined的

brian741022
一般會員


發表:7
回覆:9
積分:3
註冊:2006-07-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-10-11 13:22:53 IP:140.128.xxx.xxx 未訂閱
我建議另外宣告整數陣列,將bitmap的數值copy到陣列上,再進行濾波,原本會因為*9而overflow,這樣就不會了。你做的是銳化濾波<因為還會相減,所以最後還是會運算回0~255之間。

===================引 用 文 章===================

1.我所提不能相加的原因是我看錯了你的code...抱歉
2.要normalize的原因在byte的值域在0~255,你的code在大多數狀況下
一乘以9,馬上就overflow了。必需要把filter的結果,normalize到0~255之間
3.另外,Byte的定義是unsigned...乘以一個-1是undefined的
tylin0807
一般會員


發表:1
回覆:3
積分:0
註冊:2006-07-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-10-21 10:53:10 IP:125.231.xxx.xxx 未訂閱
謝謝各位先進的回應.
目前我已經顯示較正常的影像,但是另一個問題是,我使用 matlab 進行濾波後所取得的影像與我用程式所產生的效果不一樣.
用 matlab 是很漂亮的影像,而用程式濾的結果變化不是很大.
程是如上面所列,只是依先進所提的部份進行整數調後而已.

以下是用 matlab 所產生的

下圖是用 程式產生的


系統時間:2024-05-03 11:50:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!