BCB 8bit灰階影像中值濾波的問題 |
尚未結案
|
Marcise
一般會員 發表:4 回覆:5 積分:1 註冊:2006-10-25 發送簡訊給我 |
程式目的是要將 8bit灰階影像做中值濾波,但結果不是顏色亂掉就是有許多怪異的雜點
Graphics::TBitmap *bemd,*afmd; // GRAY為8bit灰階影像 Byte *ptr,*bptr,*uptr,*dptr; bemd=GRAY; int up,down,left,right,temp,x; afmd=new Graphics::TBitmap(); afmd->Height=bemd->Height; afmd->Width=bemd->Width; afmd->PixelFormat=pf8bit; afmd->Palette = bemd->Palette; for(int i=0;i { up=i-1; if(up<0) up=bemd->Height-1; down=i 1; if(down==bemd->Height) down=0; ptr=(Byte*)bemd->ScanLine[i]; uptr=(Byte*)bemd->ScanLine[up]; dptr=(Byte*)bemd->ScanLine[down]; bptr=(Byte*)afmd->ScanLine[i]; x=0; for(int j=0;j { left=j-1; if(left<0) left=bemd->Width-1; right=j 1; if(right==bemd->Width) right=0; int med[9]={0,0,0,0,0,0,0,0,0} ; med[0]=(int)uptr[left]; med[1]=(int)uptr[i]; med[2]=(int)uptr[right]; med[3]=(int)ptr[left]; med[4]=(int)ptr[i]; med[5]=(int)ptr[right]; med[6]=(int)dptr[left]; med[7]=(int)dptr[i]; med[8]=(int)dptr[right]; for(int m=0;m<8;m ) { for(int n=0;n<8;n ) { if(med[n]>med[n 1]) { temp=med[n]; med[n]=med[n 1]; med[n 1]=temp; } } } bptr[x]=(Byte)med[4]; //有大片污點產生 x =1; } } Image1->Picture->Bitmap=GRAY; Repaint(); Image2->Picture->Bitmap=afmd; Repaint(); //--------------------------------------------------------- 執行後的結果 為什麼會產生這麼多顏色錯誤的點呢 有試著不要用ScanLine的方式寫 把 bptr[x]=(Byte)med[4]; 改成 afmd->Canvas->Pixels[j][i]=RGB(med[4],med[4],med[4]); 但錯的更離譜,結果如下 問題出在哪邊呢? 麻煩各位幫忙解惑一下 |
Marcise
一般會員 發表:4 回覆:5 積分:1 註冊:2006-10-25 發送簡訊給我 |
|
justdo
高階會員 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |