from scipy.spatial import distance as dist
from collections import OrderedDict
import numpy as np
class CentroidTracker:
def __init__(self, maxDisappeared=50, maxDistance=1):
self.nextObjectID = 0
self.objects = OrderedDict()
self.disappeared = OrderedDict()
self.maxDisappeared = maxDisappeared
self.maxDistance = maxDistance
def register(self, centroid):
self.objects[self.nextObjectID] = centroid
self.disappeared[self.nextObjectID] = 0
self.nextObjectID += 1
def deregister(self, objectID):
del self.objects[objectID]
del self.disappeared[objectID]
def update(self, rects):
if len(rects) == 0:
for objectID in list(self.disappeared.keys()):
self.disappeared[objectID] += 1
if self.disappeared[objectID] > self.maxDisappeared:
self.deregister(objectID)
return self.objects
inputCentroids = np.zeros((len(rects), 2), dtype="int")
for (i, (startX, startY, endX, endY)) in enumerate(rects):
cX = int((startX + endX) / 2.0)
cY = int((startY + endY) / 2.0)
inputCentroids[i] = (cX, cY)
if len(self.objects) == 0:
for i in range(0, len(inputCentroids)):
self.register(inputCentroids[i])
else:
objectIDs = list(self.objects.keys())
objectCentroids = list(self.objects.values())
D = dist.cdist(np.array(objectCentroids), inputCentroids)
rows = D.min(axis=1).argsort()
cols = D.argmin(axis=1)[rows]
usedRows = set()
usedCols = set()
for (row, col) in zip(rows, cols):
if row in usedRows or col in usedCols:
continue
if D[row, col] > self.maxDistance:
continue
objectID = objectIDs[row]
self.objects[objectID] = inputCentroids[col]
self.disappeared[objectID] = 0
usedRows.add(row)
usedCols.add(col)
unusedRows = set(range(0, D.shape[0])).difference(usedRows)
unusedCols = set(range(0, D.shape[1])).difference(usedCols)
if D.shape[0] >= D.shape[1]:
for row in unusedRows:
objectID = objectIDs[row]
self.disappeared[objectID] += 1
if self.disappeared[objectID] > self.maxDisappeared:
self.deregister(objectID)
else:
for col in unusedCols:
self.register(inputCentroids[col])
return self.objects
質心追蹤
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門沮榜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盘榨,“玉大人,你說我怎么就攤上這事蟆融〔菅玻” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵型酥,是天一觀的道長山憨。 經常有香客問我,道長弥喉,這世上最難降的妖魔是什么郁竟? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮由境,結果婚禮上棚亩,老公的妹妹穿的比我還像新娘。我一直安慰自己虏杰,他們只是感情好讥蟆,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纺阔,像睡著了一般瘸彤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笛钝,一...
- 文/蒼蘭香墨 我猛地睜開眼雄妥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了依溯?” 一聲冷哼從身側響起老厌,我...
- 正文 年R本政府宣布堕绩,位于F島的核電站策幼,受9級特大地震影響,放射性物質發(fā)生泄漏奴紧。R本人自食惡果不足惜特姐,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黍氮。 院中可真熱鬧唐含,春花似錦、人聲如沸沫浆。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽件缸。三九已至,卻和暖如春叔遂,著一層夾襖步出監(jiān)牢的瞬間他炊,已是汗流浹背争剿。 一陣腳步聲響...
推薦閱讀更多精彩內容
- 身心靈健康成長之旅,經歷大家都經歷的原生家庭的羈絆炒刁,療愈原生家庭的傷與痛恩沽,求學明志“成為自己”,求職明心“因為愛所...
- 2016年9月24日翔始,黑龍江省食耕社可追蹤大米和北京二商集團可追蹤米醋亮相第三屆“亮馬橋?外交官中外文化秀”活動罗心。...
- 想學好英語补憾,讓它為你的職場技能加分?但是外教課買了卷员,卻一直沒有學盈匾!想擁有健康的身體、完美的身材毕骡,但是辦了健身卡削饵,卻...
- 反復追問窿撬,反復深究,直到抵達最深層的本質叙凡,看通透劈伴。 就能發(fā)現(xiàn)事物發(fā)展的內在核心驅動力 事物格局中的框架,結構力量個...
- 任何一種計算機圖形學渲染算法的核心都是最終確定要顯示圖像中的每個像素的顏色严里。光線追蹤算法也不例外。每種渲染算法確定...