全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:14040
推到 Plurk!
推到 Facebook!
[<<] [1] [2] [3] [4] [>>]

如何運用template與影像做比對

尚未結案
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#32 引用回覆 回覆 發表時間:2003-04-24 19:48:30 IP:61.59.xxx.xxx 未訂閱
各位好: 再插花一下喔..... 我是認為sobel出來的edge應該不會都是封閉的? 而且一定會有雜訊存在,sobel過的edge一定是雜亂無章 我的問題跟newken有點像: 要怎麼用一個橢圓模板,統計一張sobel過的二值影像 判別圖片是否有存在一個近似橢圓的物件? 如果有,可以大概描述一下嗎? 我大概描述一下我對人臉追蹤的做法,newken可以參考看看: 根據別人的經驗,是用膚色初步判定出幾個物件區塊 (這裡使用了很多的影像處理:影像正規化,消蝕,膨脹) ,把最大的區塊假想為是人的臉部,再以掃描的方式 找到這區塊的位置,套上適合的橢圓模板,橢圓的 中心點就是人臉追蹤所要的位置。在這邊都沒有提到 用sobel去做人臉追蹤。 我想我看的文章跟你們用的方法 不一樣,不知道你們是參考哪一篇呢? 發表人 - JerryKuo 於 2003/04/24 19:50:36
taishyang
站務副站長


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

發送簡訊給我
#33 引用回覆 回覆 發表時間:2003-04-24 19:52:12 IP:140.135.xxx.xxx 未訂閱
newken您好:
引言: (1)你所說的橢圓模板有多大是否是說用幾個點構成橢圓呢? (2)''橢圓mask是做統計一些資料''這一句話是否是統計對應的點呢?
(1) 由(1)可知您還沒親自動手做,所以會這樣回答... (2) 答對了一點點,統計sum of gradient magnitude以及中心點座標 我想這個問題就此打住吧,來來回回討論了那麼多篇,剩下的就交給您囉 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
taishyang
站務副站長


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

發送簡訊給我
#34 引用回覆 回覆 發表時間:2003-04-24 20:23:38 IP:140.135.xxx.xxx 未訂閱
JerryKuo您好:
引言: 我是認為sobel出來的edge應該不會都是封閉的? 而且一定會有雜訊存在,sobel過的edge一定是雜亂無章 我的問題跟newken有點像: 要怎麼用一個橢圓模板,統計一張sobel過的二值影像 判別圖片是否有存在一個近似橢圓的物件? 如果有,可以大概描述一下嗎? 我大概描述一下我對人臉追蹤的做法,newken可以參考看看: 根據別人的經驗,是用膚色初步判定出幾個物件區塊 (這裡使用了很多的影像處理:影像正規化,消蝕,膨脹) ,把最大的區塊假想為是人的臉部,再以掃描的方式 找到這區塊的位置,套上適合的橢圓模板,橢圓的 中心點就是人臉追蹤所要的位置。在這邊都沒有提到 用sobel去做人臉追蹤。
  • 其實國內的論文(以橢圓遮罩做追蹤)都是引用一篇外國人做的(名字我忘了),他最早的方式就是單純用橢圓遮罩(1997~1998),論文當中提一keyword[sum of gradient magnitude],gradient(梯度)就是用sobel遮罩後的結果,因為他是以遮罩的方式來達到一階微分(即梯度)的效果,sobel的原理我在此不詳述... 論文最後有提到,加上了[預測下一點]的位置的方式(假設臉移動速度是很smooth),才能加快運算速度... 之後他下一篇論文又加上了[人臉顏色]的條件,來縮小掃描範圍即JerryKu大哥提到的...
  • sobel的結果一定會有雜訊,所以之前要經過[濾波][侵蝕][擴張]的影像預處理 才能將sobel的效果提高....
  • 這一段我將方法的精神描述一遍,能會有遺漏,因為我現在在打工>< 1. 得到sobel的影像(二值化後,可以不二值化,只是會影像後來臨界值的選擇) 建立一橢圓遮罩以(x,y)為橢圓的中心點,x為主軸y=1.2X,論文上有提到 人臉的比例約為y/x~1.2且y軸一定大於x軸,並以[直立]呈現... 建立橢圓遮罩的關鍵是您必須知道圓周上的每一點的位置,以便得知此位置 的像素值.. 2. 建立完遮罩後(有一關鍵是,您必須知道您要追蹤的人臉大小範圍),掃描欲追 蹤的畫面,每掃一次紀錄圓周上的像素值...求出每次的sum of gradient magnitude,並記錄,在此您可以設一臨界值低於的則不紀錄,最後再求出最 大的就是最像人臉的.. 3. 可以利用[人臉膚色]當條件縮小掃描範圍,其實您可以仔細看論文的結果 畫面的大小都很小(爭取計算速度)...
順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#35 引用回覆 回覆 發表時間:2003-04-30 15:14:16 IP:163.28.xxx.xxx 未訂閱
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

發送簡訊給我
#36 引用回覆 回覆 發表時間:2003-04-30 16:06:22 IP:140.135.xxx.xxx 未訂閱
newken您好:    
引言:我的畫面並不能畫出橢圓來
我看了一下,您是不是沒有將Bmp Assign給Image啊?? 意思是是要加上
Image1->Picture->Assign(Bmp); 
順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#37 引用回覆 回覆 發表時間:2003-04-30 17:42:08 IP:163.28.xxx.xxx 未訂閱
taishyang你好: 我有assign回去但image上呈現這樣的圖形     請幫我看一下謝謝................
taishyang
站務副站長


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

發送簡訊給我
#38 引用回覆 回覆 發表時間:2003-04-30 18:19:11 IP:140.135.xxx.xxx 未訂閱
newken您好:   看到您的結果,我有兩個疑問??   (1) 您畫橢圓形的那段程式在哪邊??   (2) 為什麼total要那樣設定,理由??    順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#39 引用回覆 回覆 發表時間:2003-04-30 18:31:46 IP:163.28.xxx.xxx 未訂閱
taishyang你好: (1)畫橢圓的那一段程式不就是: x1=x a*cos(PI*i/180); y1=y b*sin(PI*i/180); Bmp->Canvas->Pixels[x1][y1]=clRed; (2)我設定total這一值最主要是想看看統計的值的臨界值如果大於TOTAL即break出來 thanks.................
taishyang
站務副站長


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

發送簡訊給我
#40 引用回覆 回覆 發表時間:2003-04-30 20:05:03 IP:140.135.xxx.xxx 未訂閱
newken您好:   可是Bmp->Canvas->Pixels[x1][y1]=clRed;   這一行應該放在最內層的回圈中吧??< > 您橢圓的大小是??? 順心< > ~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 - taishyang 於 2003/04/30 20:07:19
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#41 引用回覆 回覆 發表時間:2003-04-30 21:55:06 IP:61.230.xxx.xxx 未訂閱
taishyang你好: (1)我把Bmp->Canvas->Pixels[x1][y1]=clRed;這一行放到內圈出現以下的圖片     (2)橢圓模板的大小不就是適用360個pixel數來構成嗎? THANKS>>>>>>>>>>>>>>
taishyang
站務副站長


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

發送簡訊給我
#42 引用回覆 回覆 發表時間:2003-04-30 22:08:32 IP:140.135.xxx.xxx 未訂閱
newken您好:
引言:橢圓模板的大小不就是適用360個pixel數來構成嗎?
假如您了解那段程式的意義,您就不會這樣說了... 您的a與b設多少? 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#43 引用回覆 回覆 發表時間:2003-04-30 22:24:28 IP:61.230.xxx.xxx 未訂閱
taishyang你好: (1)我認為我了解那一段的意思,那一段主要是說用360點描述畫出一個橢圓,並紀錄像素值的總合,最後再和畫面中類似橢圓的地方比對,之後再把橢圓畫出來 (2)我a=100,b=120 (3)請問我那一段程式這樣寫是否有錯不然怎麼會寶出這樣的image呢? thanks>>>>>>>>>>>>>>>>>>>>
taishyang
站務副站長


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

發送簡訊給我
#44 引用回覆 回覆 發表時間:2003-04-30 22:41:21 IP:140.135.xxx.xxx 未訂閱
newken您好:   看到您的結果,我想會造成這樣的原因大約如下   1. 因為那區域的total值都是大於0.5的(太小了),所以自然就是會被mark的點   2. 您可以加上Application->ProcessMessages();看看當時的結果對不對   3. 只有那一段程式的話,並不能看到真正的結果(最像人臉的地方),您必須還要判斷,哪一點才是您要的.. 您已經快要做出來囉,加油< > 順心< > ~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 - taishyang 於 2003/04/30 22:44:38
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#45 引用回覆 回覆 發表時間:2003-04-30 23:11:41 IP:61.230.xxx.xxx 未訂閱
taishyang你好: (1)我把total值依序調高到1其呈現的影像都沒變 (2)可不可以再多告訴我一點或提示 thanks..............
taishyang
站務副站長


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

發送簡訊給我
#46 引用回覆 回覆 發表時間:2003-04-30 23:39:11 IP:61.231.xxx.xxx 未訂閱
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

發送簡訊給我
#47 引用回覆 回覆 發表時間:2003-05-01 00:58:28 IP:61.230.xxx.xxx 未訂閱
taishyang你好:我有一個疑問,就是sobel filter以後的影像不就是呈現二值化了,還需二值化嗎?
taishyang
站務副站長


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

發送簡訊給我
#48 引用回覆 回覆 發表時間:2003-05-01 08:33:25 IP:140.135.xxx.xxx 未訂閱
newken您好:   
引言:我有一個疑問,就是sobel filter以後的影像不就是呈現二值化了,還需二值化嗎?
1.不是 2.需要 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#49 引用回覆 回覆 發表時間:2003-05-01 13:37:12 IP:163.28.xxx.xxx 未訂閱
taishyang你好: (1)我以將sobel filter以後的影像二值化了,但經匹配以後所呈現的影像還是跟之前一樣,而且我也有取臨界值,可是還沒法畫出橢圓,指出現一個bar在影像中?? 請幫幫我吧...........謝謝.....不甚感激.........
taishyang
站務副站長


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

發送簡訊給我
#50 引用回覆 回覆 發表時間:2003-05-01 17:47:09 IP:140.135.xxx.xxx 未訂閱
newken您好:   1.您的臨界值設多少??   2.您覺得您所紀錄的點(紅色的點),是正常的還是不正確的??有可能是那些點     (bar)都是符合您需求的點也說不一定,您可以debug程式,看看為什麼數據會     是那樣??想想為什麼結果會是那樣吧< > 順心< > ~我也是在學習的階段,所以請您多多見諒與指教~
ptj
一般會員


發表:14
回覆:19
積分:11
註冊:2003-01-21

發送簡訊給我
#51 引用回覆 回覆 發表時間:2003-05-05 02:43:46 IP:61.217.xxx.xxx 未訂閱
可否寄同樣的一組sample code給我呢 ? 還是說 code就是討論的那幾行 我想用樣板的概念 抓出眼睛的部分 謝謝
taishyang
站務副站長


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

發送簡訊給我
#52 引用回覆 回覆 發表時間:2003-05-05 15:25:27 IP:140.135.xxx.xxx 未訂閱
ptj您好;    
引言:可否寄同樣的一組sample code給我呢 ?還是說code就是討論的那幾行
最重要的就是那幾行... 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#53 引用回覆 回覆 發表時間:2003-05-07 15:13:01 IP:163.28.xxx.xxx 未訂閱
taishyang你好: (1)試了幾天是可以將橢圓畫出來,但在統計pixel值的地方好像有問題,所以 不管怎麼設定臨界值好像都沒用,請taishyang兄幫我看一下 pixel=(Byte*)GetPixel(Bmp->Canvas->Handle,x1,y1); value[i-1]=(Byte)pixel; sum =value[i-1]; 其中我設定資料型態為 int sum,value[360] thanks.......................
taishyang
站務副站長


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

發送簡訊給我
#54 引用回覆 回覆 發表時間:2003-05-07 21:10:45 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#55 引用回覆 回覆 發表時間:2003-05-08 14:40:40 IP:163.28.xxx.xxx 未訂閱
taishyang你好: (1)在設臨界值這裡我實在是no idea,能不能把你的經驗告訴我提供我一點建議 (2)在debug上我不太會用,能不能教教我,我不曉的我用的對不對 thanks........................
taishyang
站務副站長


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

發送簡訊給我
#56 引用回覆 回覆 發表時間:2003-05-08 15:49:03 IP:140.135.xxx.xxx 未訂閱
newken您好:
引言: (1)在設臨界值這裡我實在是no idea,能不能把你的經驗告訴我提供我一點建議 (2)在debug上我不太會用,能不能教教我,我不曉的我用的對不對
(1) 臨界值的選取之前有討論到,您再仔細看一下囉 (2) Debug的方式,我用一個簡單的例子作說明 如圖所示: 在您要Debug的那行程式碼旁邊用滑鼠點一下,便會出現紅色的中斷點 編譯您的程式後,畫面就會跳到中斷點的地方,用滑鼠移到要觀看數值的地方 便會Show出程式再那時候的數值,以此例來說,每按一次F9,x與i的數值 都會累積,由此就看的出,到此時的程序,數值合不合理.. 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#57 引用回覆 回覆 發表時間:2003-05-29 12:59:57 IP:163.28.xxx.xxx 未訂閱
taishyang你好: 以下是我做sobel偵測然後normalize的程式,你能不能幫我看看這樣寫對不對, 因為我編譯沒有問題,但是image裡的值好像不是0101的形式  
 
for (int i=0;iHeight;i ) { ptr=(Byte*)Bmp->ScanLine[i]; for (int j=0;jWidth; j ) { ptr[j*3]=Gx(j,i) Gy(j,i); ptr[j*3 1]=Gx(j,i) Gy(j,i); ptr[j*3 2]=Gx(j,i) Gy(j,i); if (ptr[j*3]>55 & ptr[j*3 1]>55 & ptr[j*3 2]>55) ptr[j*3]=ptr[j*3 1]=ptr[j*3 2]=255; else ptr[j*3]=ptr[j*3 1]=ptr[j*3 2]=0; } } 謝謝...................
taishyang
站務副站長


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

發送簡訊給我
#58 引用回覆 回覆 發表時間:2003-05-29 13:06:11 IP:140.135.xxx.xxx 未訂閱
newken您好:   
引言:以下是我做sobel偵測然後normalize的程式
我沒有仔細看您的程式 不過怎麼看都不像是normalize反倒像二值化 您用過Debug來看看您的數據對不對嗎?? 您給了255和0的值,怎麼會出現0101的值呢?? 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#59 引用回覆 回覆 發表時間:2003-05-29 13:25:26 IP:163.28.xxx.xxx 未訂閱
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

發送簡訊給我
#60 引用回覆 回覆 發表時間:2003-05-29 13:34:40 IP:140.135.xxx.xxx 未訂閱
newken您好:  
引言:以下是我做sobel偵測然後normalize的程式
紅色字翻中文應該是叫做正規化吧?? 二值化的範例請參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28358 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
newken
一般會員


發表:26
回覆:52
積分:15
註冊:2003-03-26

發送簡訊給我
#61 引用回覆 回覆 發表時間:2003-05-29 17:36:39 IP:163.28.xxx.xxx 未訂閱
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] [4] [>>]
系統時間:2024-10-05 10:58:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!