如何運用template與影像做比對 |
尚未結案
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
各位好: 再插花一下喔.....
我是認為sobel出來的edge應該不會都是封閉的?
而且一定會有雜訊存在,sobel過的edge一定是雜亂無章
我的問題跟newken有點像: 要怎麼用一個橢圓模板,統計一張sobel過的二值影像
判別圖片是否有存在一個近似橢圓的物件? 如果有,可以大概描述一下嗎? 我大概描述一下我對人臉追蹤的做法,newken可以參考看看:
根據別人的經驗,是用膚色初步判定出幾個物件區塊
(這裡使用了很多的影像處理:影像正規化,消蝕,膨脹)
,把最大的區塊假想為是人的臉部,再以掃描的方式
找到這區塊的位置,套上適合的橢圓模板,橢圓的
中心點就是人臉追蹤所要的位置。在這邊都沒有提到
用sobel去做人臉追蹤。 我想我看的文章跟你們用的方法
不一樣,不知道你們是參考哪一篇呢? 發表人 - JerryKuo 於 2003/04/24 19:50:36
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
JerryKuo您好:
引言: 我是認為sobel出來的edge應該不會都是封閉的? 而且一定會有雜訊存在,sobel過的edge一定是雜亂無章 我的問題跟newken有點像: 要怎麼用一個橢圓模板,統計一張sobel過的二值影像 判別圖片是否有存在一個近似橢圓的物件? 如果有,可以大概描述一下嗎? 我大概描述一下我對人臉追蹤的做法,newken可以參考看看: 根據別人的經驗,是用膚色初步判定出幾個物件區塊 (這裡使用了很多的影像處理:影像正規化,消蝕,膨脹) ,把最大的區塊假想為是人的臉部,再以掃描的方式 找到這區塊的位置,套上適合的橢圓模板,橢圓的 中心點就是人臉追蹤所要的位置。在這邊都沒有提到 用sobel去做人臉追蹤。
|
newken
一般會員 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
taishyang你好:
下面案是我寫的一段程式目的是為了測試一下匹配的效果,但是出現了一些問題,我的畫面並不能畫出橢圓來,麻煩你幫我看一下,
謝謝
for (x=100;x<(Bmp->Height-100);x )
{
for (y=50;y<(Bmp->Width-50);y )
{
for(int i=1; i<=360; i )
{ x1=x a*cos(PI*i/180);
y1=y b*sin(PI*i/180);
pixel=GetPixel(Bmp->Canvas->Handle,x1,y1);
value[i-1]=(Byte)pixel;
sum =value[i-1];
total=sum/360;
if (total>0.5)
break;
}
Bmp->Canvas->Pixels[x1][y1]=clRed;
}
}
/此處的Bmp是已經edge detection處理了
|
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 發送簡訊給我 |
|
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您好:
看到您的結果,我想會造成這樣的原因大約如下
1. 因為那區域的total值都是大於0.5的(太小了),所以自然就是會被mark的點
2. 您可以加上Application->ProcessMessages();看看當時的結果對不對
3. 只有那一段程式的話,並不能看到真正的結果(最像人臉的地方),您必須還要判斷,哪一點才是您要的..
您已經快要做出來囉,加油< > 順心< > ~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 - taishyang 於 2003/04/30 22:44:38
|
newken
一般會員 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
newken您好:
想請問您total設成1的理由是??
您注意到我的結果與您的結果的差異嗎??
我的有先做二值化(0黑255白),而您的沒有...
我的sum of gradient magnitude=[255*(0~360)]/360
因為之前我跟您提過,假設360點每一點都match到人臉
那sum of gradient magnitude=(255*360)/360=255
因此臨界值最大是255,但不可能,所以一定是選一個適當的臨界值
而您的soure分布在[0,255]所以就要看您如何調整了...
但至少不會是個位數值甚至是小數... 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~>
|
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 發送簡訊給我 |
|
ptj
一般會員 發表:14 回覆:19 積分:11 註冊:2003-01-21 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
newken
一般會員 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
newken您好:
引言: 試了幾天是可以將橢圓畫出來,但在統計pixel值的地方好像有問題,所以不管怎麼設定臨界值好像都沒用,請taishyang兄幫我看一下 pixel=(Byte*)GetPixel(Bmp->Canvas->Handle,x1,y1); value[i-1]=(Byte)pixel; sum =value[i-1]; 其中我設定資料型態為 int sum,value[360]哪裡有問題? 臨界值您怎麼設定的呢? 程式跟我當初給您的幾乎一樣,是要我看哪裡呢? 既然程式編譯沒錯,理論部分您也讀懂了,應該可以自行 > <>~我也是在學習的階段,所以請您多多見諒與指教~> 發表人 - |
newken
一般會員 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
newken您好:
引言: (1)在設臨界值這裡我實在是no idea,能不能把你的經驗告訴我提供我一點建議 (2)在debug上我不太會用,能不能教教我,我不曉的我用的對不對(1) 臨界值的選取之前有討論到,您再仔細看一下囉 (2) Debug的方式,我用一個簡單的例子作說明 如圖所示: 在您要Debug的那行程式碼旁邊用滑鼠點一下,便會出現紅色的中斷點 編譯您的程式後,畫面就會跳到中斷點的地方,用滑鼠移到要觀看數值的地方 便會Show出程式再那時候的數值,以此例來說,每按一次F9,x與i的數值 都會累積,由此就看的出,到此時的程序,數值合不合理.. 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> |
newken
一般會員 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
taishyang你好:
以下是我做sobel偵測然後normalize的程式,你能不能幫我看看這樣寫對不對,
因為我編譯沒有問題,但是image裡的值好像不是0101的形式
for (int i=0;i |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
newken
一般會員 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
taishyang你好:
你好像誤會我的意思了,我是說sobel偵測加二值化,一張處理完的影像應該是呈現[0 0 255 255 0 0 255 0 0......],然後我再用
pixel=(Byte*)GetPixel(Bmp->Canvas->Handle,x1,y1);
去抓x1,y1點的pixel值,如果有值得化應該是255,沒有的是0,然後我用一個
value[i-1]去放值,那value矩陣的值應該是[255 0 0 255 255 ....]
可是好像沒有這樣呈現,不知是何問題?
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
newken您好:
引言:以下是我做sobel偵測然後normalize的程式紅色字翻中文應該是叫做正規化吧?? 二值化的範例請參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28358 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> |
newken
一般會員 發表:26 回覆:52 積分:15 註冊:2003-03-26 發送簡訊給我 |
taishyang你好:
我寫了一段程式,去做追蹤其中我以限定好範圍再debug來看sum,total的值,但每當我按一下F9,sum和total的值好像再跟之前的值做疊加,所以到最後,最後面的一個迴圈,累加的total值是最大的,能不能請你幫我看一看。
for (x = 110; x < 130 ; x ) { for (y = 75; y < 85 ; y ) { for(int i=1; i<=360; i ) { x1=x a*cos(3.1415967*i/180); y1=y b*sin(3.1415967*i/180); pixel=(Byte*)GetPixel(Bmp->Canvas->Handle,x1,y1); value[i-1]=(Byte)pixel; sum =value[i-1]; total=sum/360; } if (total>100) { face_x = x; face_y = y; } break;} } for(int i=1; i<=360; i ) { x1=face_x a*cos(3.1415967*i/180); y1=face_y b*sin(3.1415967*i/180); Bmp->Canvas->Pixels[x1][y1]=clRed; } Image2->Picture->Assign(Bmp); 謝謝...........< >< > |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |