获取和比较BOVW直方图以获得图像相似性

时间:2018-03-14 11:22:34

标签: python opencv3.0

我正在建立一个图像相似性程序,因为我是简历中的一个初学者,我与一位专家进行了交谈,他给了我以下推荐的步骤以获得真正的基本功能:

  1. 从所有图像中提取关键点(DoG,Harris等)和局部不变描述符(SIFT,SURF等)。
  2. 将它们聚类成一个码本(视觉词词典包; BOVW)
  3. 将每个图像的特征量化为BOVW直方图
  4. 比较每幅图像的BOVW直方图(通常使用卡方,余弦或欧几里德距离)
  5. 第一点很容易,但我在第2步开始感到困惑。这是我到目前为止编写的代码:

    import cv2
    import numpy as np
    
    dictionarySize = 20
    BOW = cv2.BOWKMeansTrainer(dictionarySize)
    
    for imgpath in ['testimg/testcropped1.jpg','testimg/testcropped2.jpg','testimg/testcropped3.jpg']:
        img = cv2.imread(imgpath)
        gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
        dst = cv2.cornerHarris(gray,2,3,0.04)
    
        sift = cv2.xfeatures2d.SIFT_create()
        kp = sift.detect(gray,None)
        kp,des = sift.compute(img,kp)
    
        img=cv2.drawKeypoints(gray,kp,img)
        cv2.imwrite('%s_keypoints.jpg' % imgpath, img)
    
        BOW.add(des)
    

    我使用SIFT提取一些特征然后我尝试构建每个图像描述符的BOVW。问题是我不知道这是否正确以及如何获得直方图。

0 个答案:

没有答案