def calculate_sift_grid(self, image, rangeH, rangeW):
H, W = image.shape
feat = np.zeros((len(rangeH), len(rangeW), self.Nsamples*self.Nangles))
IH = filters.convolve(image, self.GH, mode='nearest')
IW = filters.convolve(image, self.GW, mode='nearest')
I_mag = np.sqrt(IH ** 2 + IW ** 2)
I_theta = np.arctan2(IH, IW)
I_orient = np.empty((H, W, self.Nangles))
for i in range(self.Nangles):
I_orient[:,:,i] = I_mag * np.maximum(
np.cos(I_theta - self.angles[i]) ** self.alpha, 0)
for i, hs in enumerate(rangeH):
for j, ws in enumerate(rangeW):
feat[i, j] = np.dot(self.weights,
I_orient[hs:hs+self.pS, ws:ws+self.pS]\
.reshape(self.pS**2, self.Nangles)
).flat
return feat
评论列表
文章目录