package association; import descriptors.HOG; import parameters.tracking_arguments; import particlefiltering.observation; import particlefiltering.pHistogram; import tracking.Atributes; public class Probabilities { public double prob_app (Atributes A1, Atributes A2, tracking_arguments tracking_parameters, int frame, int boxi, int boxj, String image_name) { int new_height = -1; int number_of_cells_x = 1; int number_of_cells_y = 1; int bins_per_cell = 9; boolean image_normalization = false; String image_normalization_weight = "Gaussian"; double image_normalization_weight_radius = 5.0; String gradient_option = "Simple"; String histogram_normalization_metric = "L1"; String weight_function = "Bernstein"; boolean deformable_weights = false; pHistogram histo1 = new pHistogram(); HOG hog1 = new HOG(); double[] e1 = hog1.hog_descriptor ( A1.image, /*Original image*/ new_height, number_of_cells_x, number_of_cells_y, bins_per_cell, image_normalization, image_normalization_weight, image_normalization_weight_radius, gradient_option, histogram_normalization_metric, weight_function, deformable_weights ); histo1.alloc_vector(e1.length); for (int i = 0; i < e1.length; i++) { histo1.set_data(i, e1[i]); } observation obs = new observation(); obs.normalize_histogram (histo1); pHistogram histo2 = new pHistogram(); HOG hog2 = new HOG(); double[] e2 = hog2.hog_descriptor ( A2.image, new_height, number_of_cells_x, number_of_cells_y, bins_per_cell, image_normalization, image_normalization_weight, image_normalization_weight_radius, gradient_option, histogram_normalization_metric, weight_function, deformable_weights ); histo2.alloc_vector(e2.length); for (int i = 0; i < e2.length; i++) { histo2.set_data(i, e2[i]); } obs.normalize_histogram (histo2); /* compute likelihood as e^{\lambda D^2(h, h^*)} */ double d_sq = obs.histo_dist_sq (histo1, histo2); return Math.exp (-tracking_parameters.sigma_app * d_sq); } public double prob_pos (Atributes A1, Atributes A2, tracking_arguments tracking_parameters) { double d = Math.sqrt ( ( A2.get_x() - A1.get_x() ) * ( A2.get_x() - A1.get_x() ) + ( A2.get_y() - A1.get_y() ) * ( A2.get_y() - A1.get_y() ) ); double sigma = tracking_parameters.sigma_pos; double prob = Math.exp (-(d*d)/(2*sigma*sigma)); return prob; } public double prob_size (Atributes A1, Atributes A2, tracking_arguments tracking_parameters) { int s1 = A1.get_width() * A1.get_height(); int s2 = A2.get_width() * A2.get_height(); double s = (s1-s2)/s1; double sigma = tracking_parameters.sigma_size; double prob = Math.exp (-(s*s)/(2*sigma*sigma)); return prob; } }