def _likelihood_statistics(self, img_descriptors):
"""
:param img_descriptors: X
:return: 0th order, 1st order, 2nd order statistics
as described by equation 20, 21, 22 in reference [1]
"""
def likelihood_moment(x, posterior_probability, moment):
x_moment = np.power(np.float32(x), moment) if moment > 0 else np.float32([1])
return x_moment * posterior_probability
def zeros(like):
return np.zeros(like.shape).tolist()
means, covariances, weights = self.gmm.means, self.gmm.covariances, self.gmm.weights
normals = [multivariate_normal(mean=means[k], cov=covariances[k]) for k in range(0, len(weights))]
""" Gaussian Normals """
gaussian_pdfs = [np.array([g_k.pdf(sample) for g_k in normals]) for sample in img_descriptors]
""" u(x) for equation 15, page 4 in reference 1 """
statistics_0_order, statistics_1_order, statistics_2_order = zeros(weights), zeros(weights), zeros(weights)
for k in range(0, len(weights)):
for index, sample in enumerate(img_descriptors):
posterior_probability = FisherVector.posterior_probability(gaussian_pdfs[index], weights)
statistics_0_order[k] = statistics_0_order[k] + likelihood_moment(sample, posterior_probability[k], 0)
statistics_1_order[k] = statistics_1_order[k] + likelihood_moment(sample, posterior_probability[k], 1)
statistics_2_order[k] = statistics_2_order[k] + likelihood_moment(sample, posterior_probability[k], 2)
return np.array(statistics_0_order), np.array(statistics_1_order), np.array(statistics_2_order)
评论列表
文章目录