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

影像特徵值讀取

尚未結案
d9146512
一般會員


發表:2
回覆:4
積分:1
註冊:2008-03-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-03-31 12:16:45 IP:163.17.xxx.xxx 訂閱

請問各位大大~
由上圖可以看到有5個不同深淺的灰色區塊~
小弟想把這5個區塊內的資訊讀出來~
並且可以將它顯示出第一塊灰階平均值為...
第二塊灰階平均值為...
請各位大大指導~!!
編輯記錄
d9146512 重新編輯於 2008-03-31 12:17:14, 註解 無‧
d9146512 重新編輯於 2008-03-31 12:19:18, 註解 無‧
d9146512 重新編輯於 2008-03-31 12:40:11, 註解 無‧
d9146512 重新編輯於 2008-03-31 12:40:53, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-03-31 13:34:02 IP:118.169.xxx.xxx 訂閱
可以把你的CODE POST上來讓前輩們看看問題在哪邊 ^_^
d9146512
一般會員


發表:2
回覆:4
積分:1
註冊:2008-03-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-03-31 18:33:11 IP:163.17.xxx.xxx 訂閱
這是我目前參考改寫的標籤化程式~
主要是針對原本二值化影像白色部份做標籤化~
皆下來該怎麼做呢?
請各位大大指導~!!
[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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-04-01 10:14:28 IP:140.114.xxx.xxx 訂閱
METHOD1:
建議採用flooding的概念,每一個區塊有相同的灰階,可以採用堆疊方式取找出相同的灰階區塊,
程式技巧需要參考影像處理,
METHOD2:
一般採用Labeling的技巧是用於二值影像,但若要找出每一個不同的
區塊則再加上灰階的判斷應有機會,不過要看你的題目為何,再判斷採用何種方式較妥。
若每一種區塊顏色可以知道
(1) 搜尋灰階為A的點至另一BUFFER且令為0XFF,則為BUFFER一張二值影像
(2) 搜尋灰階為B的點至另一BUFFER且令為0XFF,則為BUFFER一張二值影像

重覆上述部驟,及可FIND all blocks

結論:
方法是很多,目前不知道你的目的為何,以上請參考!


d9146512
一般會員


發表:2
回覆:4
積分:1
註冊:2008-03-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-04-01 15:56:47 IP:163.17.xxx.xxx 訂閱

===================引 用 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-04-01 16:16:40 IP:140.114.xxx.xxx 訂閱
請問一下你是否可已定義出每一個區塊?
d9146512
一般會員


發表:2
回覆:4
積分:1
註冊:2008-03-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-04-01 16:32:42 IP:163.17.xxx.xxx 訂閱

===================引 用 hym628 文 章===================
請問一下你是否可已定義出每一個區塊?
請問大大定義出每一個區塊的意思為河?

hym628
一般會員


發表:0
回覆:8
積分:1
註冊:2008-04-01

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-04-01 17:40:58 IP:140.114.xxx.xxx 訂閱
一般而言,相同的灰階值連成一片,稱為一個區塊,只要你定義出區塊的圖素,要計算相關資訊是簡單的

灰階影像 區域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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-04-05 21:39:45 IP:163.17.xxx.xxx 訂閱

===================引 用 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-04-06 07:09:51 IP:203.217.xxx.xxx 訂閱
因為兩張影像是一樣大小,因此必需判斷MASK影像的值為0XFF才將灰階影像取出進行計算
以下是虛擬碼

unsigned char* pMaskImage;
unsigned char* pGrayImage;

double sumpixel;

sumpixel = 0.0;
for(i=0; i< iWidth * iHeight; i )
{
if(pMaskImage[i] == 0xFF)
{
}
}
hym628
一般會員


發表:0
回覆:8
積分:1
註冊:2008-04-01

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-04-06 07:23:09 IP:203.217.xxx.xxx 訂閱


因為兩張影像是一樣大小,因此必需判斷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的方法

希望本主題的討論中你有所獲




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