我试图用HOG描述符建立一个可视化的单词包模型。这是用于前景背景选择的面片级背景模型的一部分。在here之后。在
我在windows上使用opencv3.2二进制文件,python3.5。在
我首先创建一个字典大小为128的BOW类:
self.BOW=cv2.BOWKMeansTrainer(128)
我将使用带有以下参数的HOG描述符(见下文)。在
^{pr2}$我使用MOG背景减法来生成我的初始背景建议,然后将其输入到BOW模型中以获得补丁级别的特性。在
图像具有以下形状
self.bg_image.shape
(509, 905, 3)
因此,对于每一帧,如果它被MOG分类为背景,我将HOG特征添加到弓模型中
self.BOW.add(self.calc_HOG.compute(self.bg_image))
我会一直这样,直到一个潜在的前景对象需要检查。在
当一个帧可能是前景时,我将描述符进行聚类
self.background_vocab=self.BOW.cluster()
生成提取器
self.extract_bow = cv2.BOWImgDescriptorExtractor(self.calc_HOG, self.matcher)
创建词汇表
self.extract_bow.setVocabulary(self.background_vocab)
并将当前裁剪与当前背景图像进行比较
current_BOWhist=self.extract_bow.compute(current)
print("Extract background HOG feature")
background_BOWhist=self.extract_bow.compute(background)
print("Compare Background and Foreground Masks")
BOW_dist =cv2.compareHist(current_BOWhist, background_BOWhist, method=cv2.HISTCMP_CHISQR)
这种经常被引用的策略的内存使用/性能似乎完全无法使用。这个弓形簇()方法,文档化的here是难以置信的内存密集型,基本上锁定了计算机。即使是在一些描述上也需要10到20秒。这尤其令人费解,因为上面的文章和许多类似的文章都规定背景模型是不断地更新的,即多次调用cluster()并生成新的词汇表。在
所以在我的示例文件中,我浏览了添加HOG特征的30帧
a=self.BOW.getDescriptors()
len(a)
30
有很多描述词(这里有线索吗?)在
self.BOW.descriptorsCount()
576979200
我认为是问题所在,这对kmeans来说似乎太多了。我的HOG描述符属性有问题吗?来自上面引用的论文
“弓字典的尺寸是128。在验证步骤中,msdp将根据其纵横比调整大小,以确保所有补丁包含大致相同数量的像素。为了解决分割过程中不可避免的各种高宽比问题,我们让沿x和y坐标的HOG网格数目保持灵活,同时保持总数为600个固定数目。同样,总共使用25个块对HOG特征进行编码。拱尺寸为32“
我有什么不明白的猪特征是如何添加到词袋?在
目前没有回答
相关问题 更多 >
编程相关推荐