如何運用template與影像做比對 |
尚未結案
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
newken您好:
先撇開程式內容不談,您知道自己的程式在做什麼嗎??
為什麼我會這樣說,因為您要對一張20*10大小的影像做人臉追蹤???
a與b設為多少??
sum是掃完一個橢圓所累積的值,total是做正規化的動作...
p.s:在您上一篇未結案的問題當中
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30964
4. 貼程式碼時,請選擇格式中的[#]將您的程式碼包起來會比較方便閱讀< >
順心< > ~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 - taishyang 於 2003/05/29 18:46:45
|
newken
一般會員 ![]() ![]() 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
newken您好:
引言: 可能你誤會我的意思了,或者我沒講清楚。 我很清楚這一段程式在幹什麼,我是把搜尋範圍設成x=110->130,y=75->85,因為我自己拍了一張人頭在這範圍的影像,然後再試著匹對看看,而且a,b值也是依此設定。 只是我debug的時候,發現為什麼total的值一直累加超過了不正常,我不知原因,才會問你的。對不起,我誤會您了,因為正常來說,不會只搜尋那麼小的影像而已 可是您給我information不是很足夠,例如a與b設多少.... 光從您的程式我看不出來問題會出在哪裡(我寫的與您的有很多差異) 您追蹤的效果呢?? 您也沒說您的不正常的值是多少... so... 順心 |
newken
一般會員 ![]() ![]() 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
newken
一般會員 ![]() ![]() 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
newken
一般會員 ![]() ![]() 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
JerryKuo
版主 ![]() ![]() ![]() ![]() ![]() 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: taishyang你好: 我想應該不會,我的image是320*240,且橢圓的大小與搜尋的範圍並不會超出, 我想的是,total的值不是應該介於0~255,可是每經過一點total的值就越來越大,到最後掃描的一點(130,85)值就最大,橢圓就畫在那邊,我也不值為何? 我在想辦法吧 謝謝你......麻煩了............< >< >因為你設total>120,就修改座標,而你的sum和total一直累加,迴圈做沒幾次 total愈來愈大,變成每個座標的total都一定大於120,所以當然你只畫最後 一個地方。你是要做尋找"最像"人臉的地方,那是不是要取出一個total最大 的地方.而不是選擇大於120的就可以,依你這樣寫,最後一個修改座標的,就是 最像人臉的地方,你覺得這樣對嗎? 下次有bug,請先確認一下你的程式在做什麼,仔細的確認,因為程式是你寫的 整個流程你自己最清楚,像你這個問題,你都知道會愈加愈大,而你的本意是做一 次模板比對之後,就"重新計算"total值,那你是不是要歸零,不然一定是愈來 愈大,還是你的本意就是想愈來愈大,得到什麼值你不管,你只覺得結果會是你 想要的,完全不考慮你做的對不對。只要想開頭和結果,中間部分丟到討論區 ,自然有好心人替你填上去? 我這個在旁邊看的,都已經將人臉追蹤寫出來了。 |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
ptj
一般會員 ![]() ![]() 發表:14 回覆:19 積分:11 註冊:2003-01-21 發送簡訊給我 |
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
ufstep
一般會員 ![]() ![]() 發表:8 回覆:11 積分:3 註冊:2002-04-14 發送簡訊給我 |
引言: newken您好:引言:(1)你說紀錄橢圓的中心點,不統計模板的像素質,怎麼又說統計模板上的像素值,不懂 (2)請問怎麼用模板對整張影像作shift,你能不能給我個例子,譬如說幾行程式碼作說明,因為我就是卡在程式上不曉的怎麼implement不然就不會問你了,我並不是要你把所有的程式show給我知,我只是不曉的shift模板這段程式怎麼下手.............(1)假如不統計模板的像素質,那要統計什麼呢??(您誤會我的意思了) (2)for (x=0; x < source的寬; x ) { for (y=0; y < source的高; y ) { Search();// 之前給您的code Total=sum/360; //就是normalized sum of gradient magnitude // 並設一臨界值,超過則紀錄每一次的橢圓中心點與Total,統計完後找 //Maximize the normalized sum of gradient magnitude的那一個位置, //就是與臉最match的地方 } }順心 |
JerryKuo
版主 ![]() ![]() ![]() ![]() ![]() 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: 想請教一下: 我照這麼做在此用了3個for迴圈for (x=0; x < source的寬; x ) { for (y=0; y < source的高; y ) { for(int i=1; i<=360; i ) //..................橢圓模板搜尋變超慢的...畫面都會Delay...why? so我嘗試改成Scanlinefor (y =71; y情況改善了一些,but 還是不盡理想 除非我將y 與x 改成 y=y 5 與 x=x 5 每隔五個點搜尋才有較好的改善 但是模板的x與y最小至少要移動5個pixel... 我這麼做有錯嗎?... 可是我看其他FaceDetect的程式的模板好像可微動偵測到1Pixel而不會嚴重的Delay. 2.而且若再加上橢圓板模大小的變化a與b(也就是人臉前後移動的話) 則: |
newken
一般會員 ![]() ![]() 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
|
JerryKuo
版主 ![]() ![]() ![]() ![]() ![]() 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言:請問jerrykuo: 怎麼使用二維陣列去搜尋影像中的人臉阿 謝謝newken你好: 小弟的原始程式找不到,下面是臨時寫的,或許有些錯,請自行訂正。 //製作橢圓模板 bool **pattern; int centerx,centery; pattern = new bool*[h]; for(int j=0 ; j < h ; j ) { pattern[j] = new bool[w]; for(int i=0 ; i < w ; i ) { pattern[j][i] = false; } } centerx = (int)w/2; //橢圓模板的長寬一定要是單數 centery = (int)y/2; //長寬是雙數時,會沒有中心點, //且程式會出錯。 for(k=1; k<=360; k ) { x1=x w*cos(3.1415967*k/180); y1=y h*sin(3.1415967*k/180); pattern[y1 centery][x1 centerx] = true; } //製作橢圓模板結束 //搜尋人臉,此時人臉影像是已做過灰階->sobel->二值化後的二維陣列 int sum[Image_Height - h][Image_Width - w]; int i,j; for (y = 0 ; y < Image_Height - h ; y= ) //圖Y; { for (x = 0 ; x < Image_Width - w ; x= ) //圖X; { sum[y][x] = 0; // 歸零; for(i = 0; i統計結果,最大的sum[y][x],就是橢圓模板人臉追蹤法求得的人臉位置, (x centerx , y centery) 為人臉的中心點。 |
ufstep
一般會員 ![]() ![]() 發表:8 回覆:11 積分:3 註冊:2002-04-14 發送簡訊給我 |
引言: 請問jerrykuo: 怎麼使用二維陣列去搜尋影像中的人臉阿 謝謝 前面恕刪 centerx = (int)w/2; //橢圓模板的長寬一定要是單數 centery = (int)y/2; //長寬是雙數時,會沒有中心點, //且程式會出錯。 for(k=1; k<=360; k ) { x1=x w*cos(3.1415967*k/180); y1=y h*sin(3.1415967*k/180); pattern[y1 centery][x1 centerx] = true; <--應該是這理會出錯吧?...因為好像模板會大於陣列...小弟想請教一下: 若我的w設為50, h為1.2倍的w 那centerx應為25,centery應為30 他就在pattern[j][i]的陣列中間(中心點),為何會出錯呢? 若再將 centerx加上w/2 與 centery加上h/2 來求360度的橢圓模板 照理論來說也應該可行,所以我不太懂為何長與寬要為單數ㄝ 煩請Jerry兄教導一下,謝謝囉 |
JerryKuo
版主 ![]() ![]() ![]() ![]() ![]() 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: 小弟想請教一下: 若我的w設為50, h為1.2倍的w 那centerx應為25,centery應為30 他就在pattern[j][i]的陣列中間(中心點),為何會出錯呢? 若再將 centerx加上w/2 與 centery加上h/2 來求360度的橢圓模板 照理論來說也應該可行,所以我不太懂為何長與寬要為單數ㄝ你好: 抱歉沒注意到,再改一下喔 for(k=1; k<=360; k ) { x1 = ((int)(w/2))*cos(3.1415967*k/180); y1 = ((int)(h/2))*sin(3.1415967*k/180); pattern[y1 centery][x1 centerx] = true; }而為什麼要是單數,可以自己在一個4x4的方格畫一個橢圓看看,會發現 橢圓沒有實質的中心點。而單數5x5 就有實質的中心點。 ○●●○ ○●●●○ ●○○● ●○○○● ●○○● ●○◎○● ○●●○ ●○○○● ○●●●○發表人 - jerrykuo 於 2003/11/04 16:21:40 |
JerryKuo
版主 ![]() ![]() ![]() ![]() ![]() 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: 請問jerrykuo: 怎麼使用二維陣列去搜尋影像中的人臉阿 謝謝找到原始碼囉~~ unsigned char **GetEllipseMask(int width,int height) { unsigned char **EllipseMask; int centerx,centery; double a,b; int edge_x,edge_y; int i,j; /* make a EllipseMask memory space*/ EllipseMask = (unsigned char **)malloc(sizeof(unsigned char *)*height); for( i=0 ; i |
ptj
一般會員 ![]() ![]() 發表:14 回覆:19 積分:11 註冊:2003-01-21 發送簡訊給我 |
|
JerryKuo
版主 ![]() ![]() ![]() ![]() ![]() 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: void traceface(unsigned char **image,int img_w,int img_h,int face_w,int face_h) 整個程式有點看不懂 請問一下**image 的定義的值是甚麼呀image是二維byte指標,在traceface會自動配給image記憶空 間,也就是一張黑色的影像,然後在這張黑色影像任意處畫一 個橢圓,橢圓就是我所謂的虛擬人臉。整支程式就是找這個 橢圓的位置。語法有點古老,見諒。 ※ps: unsigned char = byte 如何使用這支程式: 首先在主程式宣告一個unsigned char **image的二維指標 呼叫traceface()這個函數,自行填入影像的長寬img_w,img_h, 及虛擬人臉的大小長寬face_w,face_h即可,程式內定人臉(6,13) 的位置,也自行更改,因為虛擬人臉是在沒有干擾的最佳狀況下 產生的,所以一定找得到(face_x,face_y)。 這是用c語言寫的,沒有畫面可看,只有結果。 發表人 - jerrykuo 於 2003/11/05 09:22:54 |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
大家好:
我把原作者的論文與程式放到下面連結,有興趣的人可以參考看看
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40094
引言: 因為虛擬人臉是在沒有干擾的最佳狀況下 產生的,所以一定找得到(face_x,face_y)。原作者下一篇中加入膚色的條件所以干擾的影響又更小了 順心 |
dean
一般會員 ![]() ![]() 發表:24 回覆:60 積分:21 註冊:2003-08-23 發送簡訊給我 |
引言: newken您好:引言: (1)如何用模板去掃描一張影像,在bcb上 (2)如何統計(1) 請問您橢圓模板做出來了嗎?? 以橢圓的中心點為準,掃描畫面.. (2) 累計像素值 順心 |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
dean
一般會員 ![]() ![]() 發表:24 回覆:60 積分:21 註冊:2003-08-23 發送簡訊給我 |
引言: dean您好:引言: 請問一下,您說的累計像素值,指的是"橢圓內的面積的所有點",還是指"橢圓的橢圓線上的像素點",一個是橢圓內,一個是畫成橢圓的線上,到底是哪一種的取像素值?橢圓的線上,因為橢圓遮罩的形式也是橢圓的圓周 |
JerryKuo
版主 ![]() ![]() ![]() ![]() ![]() 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
|
dean
一般會員 ![]() ![]() 發表:24 回覆:60 積分:21 註冊:2003-08-23 發送簡訊給我 |
引言: 插個花,^^| 這要看掃描人臉位置的條件! 1.)如果橢圓模板比較小,應該就會找到小臉,比較不會找到大臉。 2.)如果橢圓模板是可變的,可以利用百分比來區分那個模板找得比較對JerryKuo您好: 可不可以解釋一下百分比區分模板找的比較對?若在多人模式下,就是要找出多人臉,不管大臉小臉都要找出,那這樣就要用到可變的模板,但是您說利用百分比,這個小弟弄模糊了! 您只的百分比是說,橢圓模板內的像素點的百分比多寡ㄇ?然後假設一個threshold的值為0.75,只要模板內的像素累計點有超過0.75,就是人臉?是這樣ㄇ?還是您有別的意思? **我很想學,但又很不懂,所以一直問蠢問題,希望不要不屑我的問題,嘻嘻嘻** |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
JerryKuo
版主 ![]() ![]() ![]() ![]() ![]() 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
Dean你好: 關於搜尋多個人臉,可不可以請你開個新主題,請大家共同討論 這個主題包涵文章很多,最後連程式都post出來,但持續有很多問題
主因於這主題基本上就需要很多的影像處理配合實現,例如:影像轉灰階
sobel邊緣搜尋,雜訊處理,製作模板比對,膚色比對...等等。因此累積
相當多的文章,包涵許多領域,若要查看,著實不易。 所以我想請大家以此篇文章為主體,將這主題"人臉追蹤"細分討論,
發表主題開頭為"人臉追蹤",依細部處理的方法領域,接在人臉追蹤之後
例如:人臉追蹤-製作模板比對
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |