影像特徵值讀取 |
尚未結案
|
d9146512
一般會員 發表:2 回覆:4 積分:1 註冊:2008-03-31 發送簡訊給我 |
請問各位大大~ 由上圖可以看到有5個不同深淺的灰色區塊~ 小弟想把這5個區塊內的資訊讀出來~ 並且可以將它顯示出第一塊灰階平均值為... 第二塊灰階平均值為... 請各位大大指導~!! |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
d9146512
一般會員 發表:2 回覆:4 積分:1 註冊:2008-03-31 發送簡訊給我 |
這是我目前參考改寫的標籤化程式~
主要是針對原本二值化影像白色部份做標籤化~ 皆下來該怎麼做呢? 請各位大大指導~!! [code cpp] int count=0; int Connect(Graphics::TBitmap * BMP, int x, int y) { count ; BMP->Canvas->Pixels[x][y] = clBlack; // 判斷 (x 1,y) if(BMP->Canvas->Pixels[x 1][y] == clWhite) { Connect(BMP, x 1, y); } // 判斷(x 1, y - 1) if(BMP->Canvas->Pixels[x 1][y - 1] == clWhite) { Connect(BMP, x 1, y - 1); } // 判斷 (x,y-1) if(BMP->Canvas->Pixels[x][y - 1] == clWhite) { Connect(BMP, x , y - 1); } // 判斷 (x-1,y-1) if(BMP->Canvas->Pixels[x-1][y - 1] == clWhite) { Connect(BMP, x-1, y - 1); } // 判斷 (x-1,y) if(BMP->Canvas->Pixels[x-1][y] == clWhite) { Connect(BMP, x-1, y); } // 判斷 (x-1,y 1) if(BMP->Canvas->Pixels[x - 1][y 1] == clWhite) { Connect(BMP, x - 1, y 1); } // 判斷 (x,y 1) if(BMP->Canvas->Pixels[x][y 1] == clWhite) { Connect(BMP, x, y 1); } // 判斷 (x 1,y 1) if(BMP->Canvas->Pixels[x 1][y 1] == clWhite) { Connect(BMP, x 1, y 1); } return (count); }[/code] void __fastcall TMain::Button6Click(TObject *Sender) { Memo1->Clear(); int c = 0; Graphics::TBitmap *BMP = new Graphics::TBitmap(); Byte *ptr=NULL; BMP->Assign(Image3->Picture->Bitmap); for(int y = 0; y < BMP->Height; y ) { ptr = (Byte *) BMP->ScanLine[y]; for(int x = 0; x < BMP->Width; x ) { if(ptr[x * 3] == 255) { int cx= Connect(BMP, x, y); //Memo1->Lines->Add(cx); //顯示每次計算的結果(物件所佔的像素數) count=0; //歸0用 if (cx>2) // 像素>2才計算 { c =1; //計算物件各數 (可用像素數cx來限制是否累計) Memo1->Lines->Add("第 " (String)c " 個區域 , 共有 " (String)cx " Pixel"); //顯示每次計算的結果(物件所佔的像素數) //break; Image3->Canvas->TextOut(x-20,y-8,c); Image4->Canvas->TextOut(x-20,y-8,c); } } } } //ShowMessage(AnsiString("共有") c AnsiString("區域!")); delete BMP; } |
hym628
一般會員 發表:0 回覆:8 積分:1 註冊:2008-04-01 發送簡訊給我 |
METHOD1:
建議採用flooding的概念,每一個區塊有相同的灰階,可以採用堆疊方式取找出相同的灰階區塊, 程式技巧需要參考影像處理, METHOD2: 一般採用Labeling的技巧是用於二值影像,但若要找出每一個不同的 區塊則再加上灰階的判斷應有機會,不過要看你的題目為何,再判斷採用何種方式較妥。 若每一種區塊顏色可以知道 (1) 搜尋灰階為A的點至另一BUFFER且令為0XFF,則為BUFFER一張二值影像 (2) 搜尋灰階為B的點至另一BUFFER且令為0XFF,則為BUFFER一張二值影像 重覆上述部驟,及可FIND all blocks 結論: 方法是很多,目前不知道你的目的為何,以上請參考! |
d9146512
一般會員 發表:2 回覆:4 積分:1 註冊:2008-03-31 發送簡訊給我 |
===================引 用 hym628 文 章=================== METHOD1: 建議採用flooding的概念,每一個區塊有相同的灰階,可以採用堆疊方式取找出相同的灰階區塊, 程式技巧需要參考影像處理, METHOD2: 一般採用Labeling的技巧是用於二值影像,但若要找出每一個不同的 區塊則再加上灰階的判斷應有機會,不過要看你的題目為何,再判斷採用何種方式較妥。 若每一種區塊顏色可以知道 (1) 搜尋灰階為A的點至另一BUFFER且令為0XFF,則為BUFFER一張二值影像 (2) 搜尋灰階為B的點至另一BUFFER且令為0XFF,則為BUFFER一張二值影像 重覆上述部驟,及可FIND all blocks 結論: 方法是很多,目前不知道你的目的為何,以上請參考! ---------------------------------------------------------------------------------------------------------------------------- 這位大大您好: 小弟這個最主要的目的是要算出每個不同區塊內的影像特徵值~ 例如~灰階平均值~ 而目前主要遇到的瓶頸是~不知如何把每個區塊內灰階的資訊取出來運算~ 目前程式只完成可以判斷有幾個區塊~ 皆下來的程式不知如何撰寫~ 請大大指導~!! |
hym628
一般會員 發表:0 回覆:8 積分:1 註冊:2008-04-01 發送簡訊給我 |
|
d9146512
一般會員 發表:2 回覆:4 積分:1 註冊:2008-03-31 發送簡訊給我 |
|
hym628
一般會員 發表:0 回覆:8 積分:1 註冊:2008-04-01 發送簡訊給我 |
一般而言,相同的灰階值連成一片,稱為一個區塊,只要你定義出區塊的圖素,要計算相關資訊是簡單的
灰階影像 區域1的MASK(BINARY IMAGE)-->可求區域1的相關訊 灰階影像 區域2的MASK-->可求區域2的相關訊 灰階影像 區域3的MASK-->可求區域3的相關訊 : : 以上請參考 基本影影處理 灰階影像 (Bitwise AND) Mask Image = ? 請思考(suggest use the MATLAB to define run this case, You can find something...) |
d9146512
一般會員 發表:2 回覆:4 積分:1 註冊:2008-03-31 發送簡訊給我 |
===================引 用 hym628 文 章=================== 一般而言,相同的灰階值連成一片,稱為一個區塊,只要你定義出區塊的圖素,要計算相關資訊是簡單的 灰階影像 區域1的MASK(BINARY IMAGE)-->可求區域1的相關訊 灰階影像 區域2的MASK-->可求區域2的相關訊 灰階影像 區域3的MASK-->可求區域3的相關訊 : : 以上請參考 基本影影處理 灰階影像 (Bitwise AND) Mask Image = ? 請思考(suggest use the MATLAB to define run this case, You can find something...) 這位大大~ 是否可以請你說一下程式大概要怎麼寫~ 目前我的程式已經可以利用如你所說~ 一張二值化影像外加一張灰階影像~ 利用影像相加原理將灰階值取待原先二值化白色部份~ 接著下一步如何進行呢~! 請大大您敎敎我吧~感激不近~!! |
hym628
一般會員 發表:0 回覆:8 積分:1 註冊:2008-04-01 發送簡訊給我 |
|
hym628
一般會員 發表:0 回覆:8 積分:1 註冊:2008-04-01 發送簡訊給我 |
因為兩張影像是一樣大小,因此必需判斷MASK影像的值為0XFF才將灰階影像取出進行計算 以下是虛擬碼 unsigned char* pMaskImage; //必須指向Mask MaskImage 的image buffer, 不同的image buffer取法不同,所以此處請自己思考 unsigned char* pGrayImage; //必須指向Gray MaskImage 的image buffer int iTotalCount; double sumpixel; sumpixel = 0.0; iTotalCount = 0; for(i=0; i< iWidth * iHeight; i ) { if(pMaskImage[i] == 0xFF) { sumpixel = pGrayImage[i]; iTotalCount ; } } if(iTotalCount != 0) sumpixel = sumpixel / iTotalcount; else sumpixel = 0.0; 以上是求其中一個灰區塊的平均灰階值,標準差就請自己coding,一般我的開發環境是BCB MIL32 我想若能Coding出來,則Mask Image視為Segmentation的第一步, 一般我們做Machine Vision or Image Processing的第一步大多會想辦法尋找segmentation的方法 希望本主題的討論中你有所獲 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |