package hypothesis_validation;

import java.awt.image.BufferedImage;
import java.util.ArrayList;
import descriptors.HOG;
import fr.lip6.classifier.Classifier;
import fr.lip6.classifier.SMOSVM;

public class HoG_Score {
	
	public double get_score (
			BufferedImage image, 
			Classifier cls,
			ArrayList<String> list ) 
    {	
		boolean debug = false;
		
		double[] descriptor = get_descriptor (debug, image, list);

    	return cls.valueOf (descriptor);  
    }
	
	public void print_descriptor (
			BufferedImage image, 
			ArrayList<String> list ) 
    {
		boolean debug = true;
		double descriptor[] = get_descriptor (debug, image, list);
		for (int i = 0; i < descriptor.length; i++) {
			System.out.printf("%d : %f\n", i, descriptor[i]);
		}
    }
	
	public double[] get_descriptor (
			boolean debug,
			BufferedImage image, 
			ArrayList<String> list ) 
    {			
			
		int new_height = Integer.parseInt(list.get(0));     
		
        int number_of_cells_x = Integer.parseInt(list.get(1));
		
        int number_of_cells_y = Integer.parseInt(list.get(2));
			
		int bins_per_cell = Integer.parseInt(list.get(3));
		
		boolean image_normalization = Boolean.parseBoolean(list.get(4)); 
		
		String image_normalization_weight = list.get(5);
		
		double image_normalization_weight_radius = Double.parseDouble(list.get(6));
		
		String gradient_option = list.get(7);
		
		String histogram_normalization_metric = list.get(8);
		
		String weight_function = list.get(9);
		
		boolean deformable_weights = Boolean.parseBoolean(list.get(10));
		
		HOG hog = new HOG();
		
		double[] descriptor = hog.hog_descriptor ( 
				debug,
				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 );	
		
		return descriptor;
    }
}
