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

如何將640X480影像裡的Pixel統計映射X軸上為直線圖~

 
-->
-->
rabbit78585
一般會員


發表:11
回覆:22
積分:6
註冊:2006-08-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-11-23 10:26:47 IP:163.23.xxx.xxx 訂閱
http://www.wretch.cc/album/show.php?i=rabbit78585&b=1&f=1412425915&p=0 圖片!
請問如何將二值化後影像640X480~.投射到X軸上如圖C
而將A與B做分割~而留下B部分.
找了站內許多文~不之關鍵字對不對~都沒有相關參考文!
謝謝各位大大
CoffeeX
中階會員


發表:18
回覆:121
積分:72
註冊:2005-02-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-11-25 10:39:48 IP:140.125.xxx.xxx 訂閱
 int *ProjectionX;
ProjectionX = new int[Bmp->Width];
for(int i = 0 ; i < Bmp->Width ; i )
{
ProjectionX[i]=0;
}
for (int i = 0; i < Bmp->Height; i ) {
ptr = (Byte*)Bmp->ScanLine[i];
for (int j = 0; j < Bmp->Width; j ) {
if( ptr[j] ==0);
ProjectionX[j] ;
}
}
delete[] ProjectionX;
int MyFunction(int *ProjectionX,Graphics::TBitmap *Bmp,int Low)
{
int Index;
for(int i = 0 ; i < Bmp->Width ; i )
{
if( ProjectionX[i] < Low)
{
Index = i;
}
}
return Index;
}
------
=.=???
rabbit78585
一般會員


發表:11
回覆:22
積分:6
註冊:2006-08-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-11-27 12:59:01 IP:163.23.xxx.xxx 訂閱
謝謝CoffeeX.
參考你程式~也找到相同投影方式的程式!已經把投射X軸寫出來了~那請問投影後..要如何做分割動作!
請再一次指導~謝謝
程式碼:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Image3->Canvas->Brush->Color = clWhite;
Image3->Canvas->FillRect(TRect(0,0,Image3->Width,Image3->Height));
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)
{
{
// 統計水平與垂直方向的投影量
long ProjectV[640] = {0};
long ProjectH[480] = {0};
long Vmax = 0, Hmax = 0;
Byte *ptr;

for(int row = 0; row < 480; row )
{
ptr = (Byte *)Image1->Picture->Bitmap->ScanLine[row];
for(int col = 0; col < 640; col )
{
if(ptr[col*3] == 255) // 白點
{
ProjectV[col] ; // 垂直方向投影的數量 1
if(ProjectV[col] > Vmax) Vmax = ProjectV[col]; // 統計垂直投影最大
}
}
}

// 畫出垂直方向投影
Image3->Canvas->Pen->Color = clBlack;
for(int col = 0; col < 640; col )
{
Image3->Canvas->MoveTo(col, Image3->Height);
Image3->Canvas->LineTo(col, Image3->Height * (1.0 - (double)ProjectV[col] / (double)Vmax));
}
}
} <!--
harrypp
中階會員


發表:7
回覆:124
積分:61
註冊:2006-08-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-11-28 19:12:19 IP:210.202.xxx.xxx 未訂閱


請問CoffeeX若統計後陣列如下,你會怎麼把他分成兩個group {2,5,10,8,3} {5,12,9,20,7}?
ProjectH[17]={0,0,2,5,10,8,3,0,0,5,12,9,20,7,0,0,0}
有辦法的話,你就應該知道如何寫程式了。


ps:給魚吃不如給釣竿,總不能期望標準答案自己掉下來!
<!--
CoffeeX
中階會員


發表:18
回覆:121
積分:72
註冊:2005-02-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-12-12 17:01:28 IP:140.125.xxx.xxx 訂閱
寫一個function 先thresh
for(int i = 0; i < Width ; i )
{
if( project[i] < thresh )
{
project[i] =0;
}
else
{
project[i] =1;
}
}
然後下個部份我用說明的,寫一個丟出起始區塊索引區塊,和結束區塊索引的function
以 vector 作為回傳,
概念上先將 project 複制到一陣列大小為 width 2的動態陣列中,左右兩側補零,
出現 0 1 輸出到起始陣列索引 vector 中,
出現 1 0 輸出到終結陣列索引 vector 中,
這樣就可以完成了

另外要作投影圖可參考使用TChart 蠻方便的
------
=.=???
rabbit78585
一般會員


發表:11
回覆:22
積分:6
註冊:2006-08-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-12-13 10:25:59 IP:163.23.xxx.xxx 訂閱

===================引 用 文 章===================
寫一個function 先thresh
for(int i = 0; i < Width ; i )
{
if( project[i] < thresh )
{
project[i] =0;
}
else
{
project[i] =1;
}
}
然後下個部份我用說明的,寫一個丟出起始區塊索引區塊,和結束區塊索引的function
以 vector 作為回傳,
概念上先將 project 複制到一陣列大小為 width 2的動態陣列中,左右兩側補零,
出現 0 1 輸出到起始陣列索引 vector 中,
出現 1 0 輸出到終結陣列索引 vector 中,
這樣就可以完成了

另外要作投影圖可參考使用TChart 蠻方便的
---------------------------------------------------------------------------------------------------------------
應剛起頭學著寫影像程式~大大是否有範本或範例呢?能讓我參考!
謝謝~
CoffeeX
中階會員


發表:18
回覆:121
積分:72
註冊:2005-02-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-12-13 16:21:53 IP:140.125.xxx.xxx 訂閱
我尚未測試過你可以作個參考:

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
TArray Array;
vector vStartIndex;
vector vEndIndex;
int *TestArray = new int[5];
for(int i = 0;i < 5;i )
{
TestArray[i] = 0;
}
TestArray[0] = 1;
TestArray[1] = 100;
TestArray[2] = 200;
TestArray[4] = 10;

Array.Thresh(5);//TestArray[0] will be 0
vStartIndex = Array.EachEndIndex();
delete[] TestArray;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class TArray
};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
__fastcall TArray::TArray()
{
Count = 0;
}
void __fastcall TArray::Thresh(int ThValue)
{
for(int i = 0;i < Count;i )
{
if(Cells[i] > ThValue)
{
Cells[i] = 0;
}
else
{
Cells[i] = 1;
}
}
}
vector __fastcall TArray::EachEndIndex()
{
vector vIndex;
int *Tmp = new int[Count 2];
for(int i = 1;i < Count 1;i )
{
Tmp[i] = Cells[i-1];
}
Tmp[0] = 0;
Tmp[Count 1] = 0;
for(int i = 1;i < Count 1;i )
{
if((Tmp[i]==1)&(Tmp[i 1]==0))
{
vIndex.push_back(i-1);
}
}
delete[] Tmp;
return vIndex;
}
//---------------------------------------------------------------------------
Vector 部份為 vector < int > 目前網頁顯示似乎有些問題
------
=.=???
johnpage
初階會員


發表:0
回覆:79
積分:40
註冊:2004-08-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-12-13 23:54:10 IP:218.175.xxx.xxx 未訂閱
請用類神經作圖形分類
如果要做影像追蹤 最好別只是取目標物的外框
或許你只是要求物體中心點 但在一般情況下
都會誤判
有興趣可以參考 台科大 電子工程係 黃忠偉老師帶的專題
它可以做基礎的幾何圖形追蹤 滿好玩的

rabbit78585
一般會員


發表:11
回覆:22
積分:6
註冊:2006-08-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2006-12-14 14:24:39 IP:163.23.xxx.xxx 訂閱

===================引 用 文 章===================
請用類神經作圖形分類
如果要做影像追蹤? 最好別只是取目標物的外框
或許你只是要求物體中心點?? 但在一般情況下
都會誤判???
有興趣可以參考? 台科大? 電子工程係?? 黃忠偉老師帶的專題
它可以做基礎的幾何圖形追蹤??? 滿好玩的
//---------------------------------------------------------------------------------------------------
恩~但我圖形都是固定形狀不會改變.做二值化後.投影到X軸上! 因圖形有間隙~想得知間隙在哪個地方
再分割圖形~而把左半部圖形1變0~剩右半部圖形!
請問還有相關程式可參考嗎?~謝謝
系統時間:2024-04-25 17:43:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!