四連通問題 |
尚未結案
|
jiaching
一般會員 發表:21 回覆:21 積分:8 註冊:2003-07-05 發送簡訊給我 |
請問一下~~~
假設我有一張圖(二值化後)
1.我想要label all 4-connected component 假設這樣稱為一個block
2.並且找出每一個block的中心 而且可以把座標存起來用 該怎麼下手
新手上路 如果表達的不清楚 請多多指教
我的程式碼大概如下 :
Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Byte *ptr; int i,j; Bmp->Assign(img1->Picture->Bitmap); for(j=1;j其中四連通裡面的 水平部分應該是對的 可是垂直部分 不知道怎麼用 還有把每一個block中心座標存起來 是用TPoint嗎?還是Tcolor? 謝謝~~~~ |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: 請問一下~~~ 假設我有一張圖(二值化後) 1.我想要label all 4-connected component 假設這樣稱為一個block 2.並且找出每一個block的中心 而且可以把座標存起來用 該怎麼下手 新手上路 如果表達的不清楚 請多多指教 我的程式碼大概如下 :Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Byte *ptr; int i,j; Bmp->Assign(img1->Picture->Bitmap); for(j=1;j其中四連通裡面的 水平部分應該是對的 可是垂直部分 不知道怎麼用 還有把每一個block中心座標存起來 是用TPoint嗎?還是Tcolor? 謝謝~~~~ >>< face="Verdana, Arial, Helvetica"> 你好: 有些名詞請你先解釋一下,這樣比較好了解你的問題。 1.)label all 4-connected component 是什麼意思?在做什麼的? 2.)那段程式跟四連通又有什麼關聯,麻煩一下囉^^ |
jiaching
一般會員 發表:21 回覆:21 積分:8 註冊:2003-07-05 發送簡訊給我 |
JerryKuo版主你好~~~ 我是看人臉辨識論文來的 裡面有提到label all 4-connected
應該就是在一張二值化的影像裡找到所有四連通的東西 在膚色部分以白色顯示 非膚色部分以黑色顯示(如眼睛鼻子嘴巴)
就是(x,y)那點是黑色 且在(x-1,y) (x 1,y) (x,y-1) (x,y 1)也是黑色
就存起來(應該是存(x,y)這一點) 這樣叫做一個block 然後存起來的這些點 會有一些幾何上的關係 比方說眼睛跟嘴巴(等腰三角形)
我還是初學者 所以程式還在練習當中 所以可能寫錯也不一定 請指點指點~~~
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: JerryKuo版主你好~~~ 我是看人臉辨識論文來的 裡面有提到label all 4-connected 應該就是在一張二值化的影像裡找到所有四連通的東西 在膚色部分以白色顯示 非膚色部分以黑色顯示(如眼睛鼻子嘴巴) 就是(x,y)那點是黑色 且在(x-1,y) (x 1,y) (x,y-1) (x,y 1)也是黑色 就存起來(應該是存(x,y)這一點) 這樣叫做一個block 然後存起來的這些點 會有一些幾何上的關係 比方說眼睛跟嘴巴(等腰三角形) 我還是初學者 所以程式還在練習當中 所以可能寫錯也不一定 請指點指點~~~你好: 怎麼實作全憑各人感覺和技巧,如果一定要用scanline去讀取資料的話,為了要 做垂直方向的搜尋,每做一個block,用scanline讀取y-1,y,y 1三行資料,從y-1, y和y 1得到你要的像素值,搭配水平方向同時進行比對,這樣的讀取方式,受限於 scanline的特性,不管你要讀取幾個像素,只要不同一個y軸,像素在哪一列,那一 列就要全部讀取,這樣的程式複雜度得到5個像素值,算算這樣很划不來。如果可 以的話建議你考慮將圖片資料用一維陣列或二維陣列存放,這樣你就不用去考慮 垂直方向的scanline 障礙,直接讀取陣列就方便多了... 至於怎麼存放每個block,我能想到的就是用index,每個block給一個標籤,相連 的block 就給同一種標籤,這樣要取出判斷是什麼形狀時,比較方便。 |
yslin
一般會員 發表:5 回覆:17 積分:4 註冊:2003-11-03 發送簡訊給我 |
你好: 建議你看paper時也要看一些影像處理的書,這樣background才夠。
對於你的第一個問題,我建議你看一下儒林出版的數位影像處理,作者:連國珍。page 8-3,有你所要的問題定義和解答。c source code可參考書後的附錄。
你的第二個問題,我想記錄座標和Tpoint等沒較大的關係,而是看你想要知道記錄的是每個block的位置在你form裡的那個絕對或相對位置來記錄吧...
你可以把你的ptr陣列換算成二維的陣列,不就知道這個影像在bitmap的那個座標了嗎?
|
auslk
初階會員 發表:35 回覆:77 積分:32 註冊:2003-02-17 發送簡訊給我 |
您好! 其實我也是想粉久,第一次寫影像處理程式 這程式目的在儲存相關位置的陣列 若有不妥之處,請各位多多協助小弟! 以下~ 注意事項: 請先拉出Image1 &Image2
Image2 必須先load 一張相同尺寸的空白影像 建議使用副程式 1.Image 輸入 轉陣列儲存
2.將陣列輸出到Image
// 主程式 void __fastcall TForm1::GRAY1Click(TObject * Sender) { int x =Image1->Width; int y =Image1->Height; int *f = new int[3 * x * y]; int *g = new int[3 * x * y]; image_to_array(Image1, f); // 讀取圖片至陣列 color_to_gray(x, y, f, g); //轉灰階 array_to_image(g, Image2); //輸出到圖片 Image2->Invalidate(); // 更新圖片 delete g; delete f; } //副程式 void image_to_array(TImage * Image1, int *f) { int x, y; int h = Image1->Picture->Height; int w = Image1->Picture->Width; Byte *ptr; for(y = 0; y < h; y ) { ptr = (Byte *) Image1->Picture->Bitmap->ScanLine[y]; // 取得圖片第 y // 軸的起始位置 for(x = 0; x < w * 3; x = x 3) { f[x 3 * w * y] = (int)ptr[x]; // 將圖片的pixel依序填入 陣列 f[x 1 3 * w * y] = (int)ptr[x 1]; f[x 2 3 * w * y] = (int)ptr[x 2]; } } } void array_to_image(int *g, TImage * Image2) { int x, y; Byte *ptr; int h = Image2->Picture->Height; int w = Image2->Picture->Width; /* Graphics::TBitmap * bmp = new Graphics::TBitmap(); bmp->Assign(Image1->Picture->Bitmap); bmp->PixelFormat = pf24bit; */ for(y = 0; y < h; y ) { ptr = (Byte *) Image2->Picture->Bitmap->ScanLine[y]; // 取得圖片第 y // 軸的起始位置 for(x = 0; x < w * 3; x = x 3) { ptr[x 2] = (Byte) g[x 3 * w * y]; // 將陣列的pixel依序填入圖片 ptr[x 1] = (Byte) g[(x 1) 3 * w * y]; ptr[x] = (Byte) g[(x 2) 3 * w * y]; } } }< >< > |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
auslk
初階會員 發表:35 回覆:77 積分:32 註冊:2003-02-17 發送簡訊給我 |
多謝您的協助! 小弟是想分享轉成矩陣處理比較方便
轉成矩陣後
我們可以用以下處理
320*240 舉例: 定義第一塊區塊:
for(j=0;j<160;j )
for(i=0;i<120;i ) 定義第二塊區塊:
for(j=160;j<=320;j )
for(i=0;i<120;i ) 定義第三塊區塊:
for(j=0;j<160;j )
for(i=120;i<240;i ) 定義第四塊區塊:
for(j=160;j<320;j )
for(i=120;i<240;i )
引言: auslk您好: 謝謝您的分享,但似乎跟四連通似乎沒有關係< > > 順心< > <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |