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

橢圓樣板比對

答題得分者是:taishyang
yana125
一般會員


發表:16
回覆:17
積分:6
註冊:2006-10-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-26 16:08:17 IP:220.133.xxx.xxx 訂閱
我自己試者寫用橢圓樣板去掃描圖片,想找出人臉 測試的圖片是已經做好Sobel邊緣化的前提下做的 我知道以下這程式有很多錯的地方,所以我想請教一下幾點問題    1.我掃描圖片用的方法要花很多時間,是否可以改成使用ScanLine的方法,會比較快嗎? 2.掃描時,是利用橢圓的圓心去跑的,對不對? 3.要把橢圓圓周上的pixel值加起來/360,在設定ㄧ個門檻值,大概要設多少?(以下是設200亂設的) 4.程式中 紀錄符合條件的圓心座標 好像怪怪的,是不是有問題阿? 5.可能還有一些錯誤是我沒發現的,麻煩前輩指點    <textarea class="cpp" rows="10" cols="60" name="code"> void __fastcall TForm1::Button15Click(TObject *Sender) { Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Byte *ptr,pixel; int a=50,b=60; int x,y,i,j,k,u,v; int value,sum,totle; const float PI=3.14159; Bmp->Assign(Image2->Picture->Bitmap); for(j=0;jWidth;j ) //開始掃描圖片 { for(i=0;iHeight;i ) { for(k=0;k<360;k ) { x=j a*cos(PI*k/180); y=i b*sin(PI*k/180); pixel= GetPixel(Bmp->Canvas->Handle, x,y); //把橢圓圓周上的像素質(x,y)放在pixel value=(Byte)pixel; sum =value; //全部加起來 } totle=sum/360; if(totle>200) //設定ㄧ個門檻值 { u=j; //若有符合就記錄座標 v=i; } } } for(k=0;k<360;k ) //最後用這座標畫出橢圓 { x=u a*cos(PI*k/180); y=v b*sin(PI*k/180); Image1->Canvas->Pixels[x][y]=clRed; Image2->Canvas->Pixels[x][y]=clRed; } }</textarea>
yana125
一般會員


發表:16
回覆:17
積分:6
註冊:2006-10-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-26 18:14:42 IP:59.127.xxx.xxx 訂閱
補充一下:
我畫面是320*240
而且可以先做膚色判斷但是不知怎利用使得
橢圓偵測變快,所以膚色判斷沒加進去
taishyang
站務副站長


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-26 18:31:19 IP:122.124.xxx.xxx 未訂閱
我研究所就是做這個,提供一些想法

1.我掃描圖片用的方法要花很多時間,是否可以改成使用ScanLine的方法,會比較快嗎?
這是當然的,而且快很多

2.掃描時,是利用橢圓的圓心去跑的,對不對?
以圓心為準,判斷圓周上的點是不是要的點

3.要把橢圓圓周上的pixel值加起來/360,在設定ㄧ個門檻值,大概要設多少?(以下是設200亂設的)
不一定,看你要多像橢圓才算是人臉,越高表示越像橢圓(人臉)

4.程式中 紀錄符合條件的圓心座標 好像怪怪的,是不是有問題阿?
你可以TRACE數值看是不是你要的,假如你不知道是不是你要的,表示演算法你還沒看懂

5.可能還有一些錯誤是我沒發現的,麻煩前輩指點
應該是你找出問題點,請前輩們看看問題在哪邊,而不是請大家幫你找問題

我畫面是320*240
而且可以先做膚色判斷但是不知怎利用使得
橢圓偵測變快,所以膚色判斷沒加進去

膚色範圍表示你只要去搜尋這範圍就好了,其餘的範圍不重要(背景)


yana125
一般會員


發表:16
回覆:17
積分:6
註冊:2006-10-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-27 16:22:30 IP:125.229.xxx.xxx 訂閱
奇怪位什麼我totle值不管設多少
出來的橢圓形原心點都在最右下角
也就是最後ㄧ個pixel點
taishyang
站務副站長


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-27 16:38:40 IP:122.124.xxx.xxx 未訂閱
先學會如何Trace和debug source code吧 ^_^
yana125
一般會員


發表:16
回覆:17
積分:6
註冊:2006-10-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-28 14:06:34 IP:59.127.xxx.xxx 訂閱
我試了很久...看不出哪裡有錯耶 把圓周上的pixel點累加起來再/360 我就設個門檻值200,若大於200則把此時的x軸位置(j),與y軸位置(i)  分別紀錄給(u,v),再把這座標拿去化出橢圓紅線 不知道我這個觀念是否正確,還是我寫程式的邏輯錯誤?? <textarea class="cpp" rows="10" cols="60" name="code"> totle=sum/360; if(totle>200) //設定ㄧ個門檻值 { u=j; //若有符合就記錄座標 v=i; } </textarea>
yana125
一般會員


發表:16
回覆:17
積分:6
註冊:2006-10-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-28 19:14:00 IP:59.127.xxx.xxx 訂閱
謝謝 taishyang 前輩的指教 前面的問題已經解決了
目前我可以做很陽春的橢圓比對
但還是有個問題...
在圖片上以x,y軸=(0,0)為原心這點畫一個橢圓形統計圓周上的像素值時
圖片上顯示因該只有1/4的圓弧線,我本以為統計像素值
也是只統計這1/4的地方,但我發現它會連超出框框外的其他3/4圓周
也會去統計到,不知道是我做錯還是正常現象??

taishyang
站務副站長


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-30 09:48:15 IP:122.124.xxx.xxx 未訂閱
很明顯的要避開處理圖片以外的範圍


===================引 用 yana125 文 章===================
謝謝 taishyang 前輩的指教 前面的問題已經解決了
目前我可以做很陽春的橢圓比對
但還是有個問題...
在圖片上以x,y軸=(0,0)為原心這點畫一個橢圓形統計圓周上的像素值時
圖片上顯示因該只有1/4的圓弧線,我本以為統計像素值
也是只統計這1/4的地方,但我發現它會連超出框框外的其他3/4圓周
也會去統計到,不知道是我做錯還是正常現象??

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