def matchPairs(self, KNN=True, filter=True): ''' this function will create a matrix self.kpMatrix like the following: [a, b, none, c, none] [d, e, f, g, none] [h, none, j, k, l] [none, none, m, o, p] if these matches exist: image1:a - image2:d image2:d - image3:h image1:b - image2:e ... where a,b,c... are pixel coordinates ''' for i in range(len(self.imageList)-1): if KNN: if filter: points1, points2, matches = CVFuncs.findMatchesKnn(self.imageList[i], self.imageList[i+1],filter=True, ratio=True) else: points1, points2, matches = CVFuncs.findMatchesKnn(self.imageList[i], self.imageList[i+1],filter=False, ratio=True) else: if filter: points1, points2, matches = CVFuncs.findMatches(self.imageList[i], self.imageList[i+1],filter=True) else: points1, points2, matches = CVFuncs.findMatches(self.imageList[i], self.imageList[i+1],filter=False) # for each match... for match in matches: point1 = match.queryIdx #self.imageList[i].kps[match.queryIdx] # find out if the self.imageList[i] point was matched to already # if the point has been matched already, add its corresponding point in self.imageList[i+1] to the matrix at the same index if self.kpMatrix[i].count(point1): idx = self.kpMatrix[i].index(point1) self.kpMatrix[i+1][idx] = match.trainIdx#self.imageList[i+1].kps[match.trainIdx] else: # otherwise, at a new entry to every image's row in the matrix for j in range(len(self.imageList)): #if it's not image i or i+1, then make it empty if j not in [i,i+1]: self.kpMatrix[j].append(None) #otherwise, add the appropriate points elif j == i: self.kpMatrix[i].append(match.queryIdx) #self.imageList[i].kps[match.queryIdx]) else: #j == i+1 self.kpMatrix[i+1].append(match.trainIdx) #self.imageList[i+1].kps[match.trainIdx])