sift/surf基於灰度圖,
一、首先建立影象金字塔,形成三維的影象空間,通過hessian矩陣獲取每一層的區域性極大值,然後進行在極值點周圍26個點進行nms,從而得到粗略的特徵點,再使用二次插值法得到精確特徵點所在的層(尺度),即完成了尺度不變。
二、在特徵點選取乙個與尺度相應的鄰域,求出主方向,其中sift採用在乙個正方形鄰域內統計所有點的梯度方向,找到佔80%以上的方向作為主方向;而surf則選擇圓形鄰域,並且使用活動扇形的方法求出特徵點主方向,以主方向對齊即完成旋轉不變。
三、以主方向為軸可以在每個特徵點建立座標,sift在特徵點選擇一塊大小與尺度相應的方形區域,分成16塊,統計每一塊沿著八個方向佔的比例,於是特徵點形成了128維特徵向量,對影象進行歸一化則完成強度不變;而surf分成64塊,統計每一塊的dx,dy,|dx|,|dy|的累積和,同樣形成128維向量,再進行歸一化則完成了對比度不變與強度不變。
haar特徵也是基於灰度圖,
首先通過大量的具有比較明顯的haar特徵(矩形)的物體影象用模式識別的方法訓練出分類器,分類器是個級聯的,每級都以大概相同的識別率保留進入下一級的具有物體特徵的候選物體,而每一級的子分類器則由許多haar特徵構成(由積分影象計算得到,並儲存下位置),有水平的、豎直的、傾斜的,並且每個特徵帶乙個閾值和兩個分支值,每級子分類器帶乙個總的閾值。識別物體的時候,同樣計算積分影象為後面計算haar特徵做準備,然後採用與訓練的時候有物體的視窗同樣大小的視窗遍歷整幅影象,以後逐漸放大視窗,同樣做遍歷搜尋物體;每當視窗移動到乙個位置,即計算該視窗內的haar特徵,加權後與分類器中haar特徵的閾值比較從而選擇左或者右分支值,累加乙個級的分支值與相應級的閾值比較,大於該閾值才可以通過進入下一輪篩選。當通過分類器所以級的時候說明這個物體以大概率被識別。
廣義hough變換同樣基於灰度圖,
使用輪廓作為特徵,融合了梯度資訊,以投票的方式識別物體,在本blog的另一篇文章中有詳細討論,這裡不再贅述。
特點異同對比及其適用場合:
三種演算法都只是基於強度(灰度)資訊,都是特徵方法,但sift/surf的特徵是一種具有強烈方向性及亮度性的特徵,這使得它適用於剛性形變,稍有透視形變的場合;haar特徵識別方法帶有一點人工智慧的意味,對於像人臉這種有明顯的、穩定結構的haar特徵的物體最適用,只要結構相對固定即使發生扭曲等非線性形變依然可識別;廣義hough變換完全是精確的匹配,可得到物體的位置方向等引數資訊。前兩種方法基本都是通過先獲取區域性特徵然後再逐個匹配,只是區域性特徵的計算方法不同,sift/surf比較複雜也相對穩定,haar方法比較簡單,偏向一種統計的方法形成特徵,這也使其具有一定的模糊彈性;廣義hough變換則是一種全域性的特徵——輪廓梯度,但也可以看做整個輪廓的每乙個點的位置和梯度都是特徵,每個點都對識別有貢獻,用直觀的投票,看票數多少去確定是否識別出物體。
**:
物體移動 三種方法
api transform.translate 直接對物體座標進行操作 api 3d rigidbody.velocity new vector3 speed.x,speed.y,speed.z 2d rigidbody.velocity new vector2 speed.x,speed.y 對剛...
unity的三種物體移動方法
1.帶有rigidbody元件的物體移動一般採用 getcomponent velocity 如 float h input.getaxis horizontal float v input.getaxis vertical if input.getbuttondown jump vel jump ...
Unity 物體移動的三種方式
在unity3d中,有多種方式可以改變物體的座標,實現移動的目的,其本質是每幀修改物體的position。通過transform元件移動物體 transform 元件用於描述物體在空間中的狀態,它包括 位置 position 旋轉 rotation 和 縮放 scale 其實所有的移動都會導致pos...