sobel 邊緣偵測的問題 |
|
dicky9055
一般會員 發表:20 回覆:48 積分:18 註冊:2006-08-02 發送簡訊給我 |
Graphics::TBitmap *bmp = new Graphics::TBitmap();
Byte *ptr; int gray; int i,j; int OtsuT; int sx = 0; int sy = 0; int **pic = 0; int thresh; eddlg->ShowModal(); thresh = eddlg->ScrollBar1->Position; bmp->Assign(Image1->Picture->Bitmap); bmp->PixelFormat=pf24bit; pic = new int*[bmp->Height]; for(i = 0; i< bmp->Height; i ) pic[i] = new int[bmp->Width]; bmp->Assign(Image1->Picture->Bitmap); for(j=0; j ptr = (Byte *)bmp->ScanLine[j]; for(i=0; i gray = (ptr[i*3]*28 ptr[i*3 1]*151 ptr[i*3 2]*77)/256; pic[j][i] = ptr[i*3] = ptr[i*3 1] = ptr[i*3 2] = (Byte)gray; } } for(j=1; j ptr = (Byte *)bmp->ScanLine[j]; for(i=1; i sx = -1*pic[j-1][i-1] pic[j 1][i-1] -2*pic[j-1][i] 2*pic[j 1][i] - pic[j-1][i 1] pic[j 1][i 1]; sy = pic[j-1][i-1] 2*pic[j][i-1] pic[j 1][i-1] - 1*pic[j-1][i 1] - 2*pic[j][i 1] - pic[j 1][i 1]; if(sqrt(sx*sx sy*sy)>thresh) ptr[i*3 1]=ptr[i*3] = ptr[i*3 2] = 0; else ptr[i*3] = ptr[i*3 1] = ptr[i*3 2] = 255; } } Image1->Picture->Assign(bmp); for (i=0; i< bmp->Height; i ) delete [] pic[i]; delete [] pic; delete bmp; 這是參考某一大大寫的程式所寫的 在紅色的地方看不太懂為何要這樣做 所以想請大大們幫我解答一下 此外..我有寫一個otsu的函式..要怎麼使用在這個程式呢 是將sx sy的值代入嗎..還是其他的呢? 也請幫我解答一下 謝謝 |
CoffeeX
中階會員 發表:18 回覆:121 積分:72 註冊:2005-02-18 發送簡訊給我 |
|
dicky9055
一般會員 發表:20 回覆:48 積分:18 註冊:2006-08-02 發送簡訊給我 |
|
sew
一般會員 發表:2 回覆:54 積分:21 註冊:2003-08-25 發送簡訊給我 |
第一題, 前面己經提過了..為了動態建立矩陣, 這樣當你的圖的大小不同時, 程式依然可以用, 而不是把圖的大小寫死
第二題, 灰階是, 只要把rgb設為相同值, 就會變成灰階了, 所以那個公式應該只是為了突顯某個色階, 而進行轉換的動作 ===================引 用 文 章=================== 在第一個問題中 為何要這樣設呢 這個目的是為什麼 而第二個問題 這個公式是什麼 我怎麼沒看過這樣的公式呢 麻煩大大解答一下 謝謝 ===================引 用 文 章=================== 第一個問題, 產生二維動態陣列,用來存放值, 第二個問題, 轉灰階
------
加油! |
dicky9055
一般會員 發表:20 回覆:48 積分:18 註冊:2006-08-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |