View Javadoc

1   /*
2    * @(#)$Id: Rubine3DConfiguration.java
3    *
4    * Author		:	Arthur Vogels, arthur.vogels@gmail.com
5    *                  
6    *
7    * Purpose		:   Configuration class for the Rubine3D algorithm.
8    *
9    * -----------------------------------------------------------------------
10   *
11   * Revision Information:
12   *
13   * Date				Who			Reason
14   *
15   * 05.01.2009		vogelsar	Initial Release
16   * 22.05.2010		bpuype		Code cleanup and bug fixes
17   *
18   * -----------------------------------------------------------------------
19   *
20   * Copyright 1999-2009 ETH Zurich. All Rights Reserved.
21   *
22   * This software is the proprietary information of ETH Zurich.
23   * Use is subject to license terms.
24   * 
25   */
26  
27  package org.ximtec.igesture.algorithm.rubine3d;
28  
29  import java.util.HashMap;
30  import java.util.Map;
31  import java.util.logging.Level;
32  import java.util.logging.Logger;
33  
34  import org.sigtec.util.Constant;
35  import org.ximtec.igesture.algorithm.AlgorithmTool;
36  import org.ximtec.igesture.algorithm.feature.F1;
37  import org.ximtec.igesture.algorithm.feature.F10;
38  import org.ximtec.igesture.algorithm.feature.F11;
39  import org.ximtec.igesture.algorithm.feature.F12;
40  import org.ximtec.igesture.algorithm.feature.F13;
41  import org.ximtec.igesture.algorithm.feature.F14;
42  import org.ximtec.igesture.algorithm.feature.F15;
43  import org.ximtec.igesture.algorithm.feature.F16;
44  import org.ximtec.igesture.algorithm.feature.F17;
45  import org.ximtec.igesture.algorithm.feature.F18;
46  import org.ximtec.igesture.algorithm.feature.F19;
47  import org.ximtec.igesture.algorithm.feature.F2;
48  import org.ximtec.igesture.algorithm.feature.F20;
49  import org.ximtec.igesture.algorithm.feature.F21;
50  import org.ximtec.igesture.algorithm.feature.F3;
51  import org.ximtec.igesture.algorithm.feature.F4;
52  import org.ximtec.igesture.algorithm.feature.F5;
53  import org.ximtec.igesture.algorithm.feature.F6;
54  import org.ximtec.igesture.algorithm.feature.F7;
55  import org.ximtec.igesture.algorithm.feature.F8;
56  import org.ximtec.igesture.algorithm.feature.F9;
57  import org.ximtec.igesture.algorithm.rubine.RubineAlgorithm;
58  import org.ximtec.igesture.algorithm.rubine.RubineConfiguration;
59  import org.ximtec.igesture.configuration.Configuration;
60  
61  public class Rubine3DConfiguration {
62  
63  	private static final Logger LOGGER = Logger
64  			.getLogger(Rubine3DConfiguration.class.getName());
65  	
66  	private static final String DEFAULT_XY_WEIGHT = "0.2";
67  	private static final String DEFAULT_YZ_WEIGHT = "0.6";
68  	private static final String DEFAULT_ZX_WEIGHT = "0.2";
69  
70  	private static final String DEFAULT_XY_MIN_DISTANCE = "2.0";
71  	private static final String DEFAULT_XY_MAHALANOBIS_DISTANCE = "400.0";
72  	private static final String DEFAULT_XY_PROBABILITY = "0.95";
73  
74  	private static final String DEFAULT_YZ_MIN_DISTANCE = "3.0";
75  	private static final String DEFAULT_YZ_MAHALANOBIS_DISTANCE = "800.0";
76  	private static final String DEFAULT_YZ_PROBABILITY = "0.95";
77  	
78  	private static final String DEFAULT_ZX_MIN_DISTANCE = "1.0";
79  	private static final String DEFAULT_ZX_MAHALANOBIS_DISTANCE = "400.0";
80  	private static final String DEFAULT_ZX_PROBABILITY = "0.95";
81  
82  	protected static Map<String, String> DEFAULT_CONFIGURATION = new HashMap<String, String>();
83  
84  	public enum Config {
85  		XY_WEIGHT, YZ_WEIGHT, ZX_WEIGHT, XY_MIN_DISTANCE, XY_FEATURE_LIST, XY_MAHALANOBIS_DISTANCE, XY_PROBABILITY, YZ_MIN_DISTANCE, YZ_FEATURE_LIST, YZ_MAHALANOBIS_DISTANCE, YZ_PROBABILITY, ZX_MIN_DISTANCE, ZX_FEATURE_LIST, ZX_MAHALANOBIS_DISTANCE, ZX_PROBABILITY
86  	}
87  
88  	private double xyWeight;
89  	private double yzWeight;
90  	private double zxWeight;
91  	private RubineConfiguration xyConfiguration;
92  	private RubineConfiguration yzConfiguration;
93  	private RubineConfiguration zxConfiguration;
94  
95  	/**
96  	 * Set default parameter values
97  	 */
98  	static {
99  		/**
100 		 * Parameter default values
101 		 */
102 		DEFAULT_CONFIGURATION.put(Config.XY_WEIGHT.name(), DEFAULT_XY_WEIGHT);
103 		DEFAULT_CONFIGURATION.put(Config.YZ_WEIGHT.name(), DEFAULT_YZ_WEIGHT);
104 		DEFAULT_CONFIGURATION.put(Config.ZX_WEIGHT.name(), DEFAULT_ZX_WEIGHT);
105 
106 		StringBuilder sb = new StringBuilder();
107 	    for(Class<?> clazz:new Class<?>[]{F1.class, F2.class, F3.class/*, F4.class, F5.class, F6.class, F7.class, F8.class, F9.class, F10.class, F11.class, F12.class, F13.class, F14.class, F15.class, F16.class, F17.class, F18.class, F19.class, F20.class, F21.class*/}){
108 	      sb.append(clazz.getName());
109 	      sb.append(Constant.COMMA);
110 	    }		
111 		
112 		DEFAULT_CONFIGURATION.put(Config.XY_MIN_DISTANCE.name(),
113 				DEFAULT_XY_MIN_DISTANCE);
114 		DEFAULT_CONFIGURATION.put(Config.XY_MAHALANOBIS_DISTANCE.name(),
115 				DEFAULT_XY_MAHALANOBIS_DISTANCE);
116 		DEFAULT_CONFIGURATION.put(Config.XY_PROBABILITY.name(),
117 				DEFAULT_XY_PROBABILITY);
118 		DEFAULT_CONFIGURATION.put(Config.XY_FEATURE_LIST.name(),
119 				sb.toString());
120 
121 		DEFAULT_CONFIGURATION.put(Config.YZ_MIN_DISTANCE.name(),
122 				DEFAULT_YZ_MIN_DISTANCE);
123 		DEFAULT_CONFIGURATION.put(Config.YZ_MAHALANOBIS_DISTANCE.name(),
124 				DEFAULT_YZ_MAHALANOBIS_DISTANCE);
125 		DEFAULT_CONFIGURATION.put(Config.YZ_PROBABILITY.name(),
126 				DEFAULT_YZ_PROBABILITY);
127 		DEFAULT_CONFIGURATION.put(Config.YZ_FEATURE_LIST.name(),
128 				sb.toString());
129 
130 		DEFAULT_CONFIGURATION.put(Config.ZX_MIN_DISTANCE.name(),
131 				DEFAULT_ZX_MIN_DISTANCE);
132 		DEFAULT_CONFIGURATION.put(Config.ZX_MAHALANOBIS_DISTANCE.name(),
133 				DEFAULT_ZX_MAHALANOBIS_DISTANCE);
134 		DEFAULT_CONFIGURATION.put(Config.ZX_PROBABILITY.name(),
135 				DEFAULT_ZX_PROBABILITY);
136 		DEFAULT_CONFIGURATION.put(Config.ZX_FEATURE_LIST.name(),
137 				sb.toString());
138 
139 		LOGGER.setLevel(Level.SEVERE);
140 	}
141 
142 	public Rubine3DConfiguration(Configuration config) {
143 		init(config);
144 	}
145 
146 	private void init(Configuration config) {
147 		Map<String, String> parameters = config
148 				.getParameters(Rubine3DAlgorithm.class.getCanonicalName());
149 		// Set Rubine3D parameters
150 		xyWeight = AlgorithmTool.getDoubleParameterValue(Config.XY_WEIGHT
151 				.name(), parameters, DEFAULT_CONFIGURATION);
152 		LOGGER.info(Config.XY_WEIGHT + Constant.COLON_BLANK + xyWeight);
153 
154 		yzWeight = AlgorithmTool.getDoubleParameterValue(Config.YZ_WEIGHT
155 				.name(), parameters, DEFAULT_CONFIGURATION);
156 		LOGGER.info(Config.YZ_WEIGHT + Constant.COLON_BLANK + yzWeight);
157 
158 		zxWeight = AlgorithmTool.getDoubleParameterValue(Config.ZX_WEIGHT
159 				.name(), parameters, DEFAULT_CONFIGURATION);
160 		LOGGER.info(Config.ZX_WEIGHT + Constant.COLON_BLANK + zxWeight);
161 
162 		// Set Rubine parameters per plane RubineConfiguration
163 
164 		// XY plane
165 		Configuration xyConf = new Configuration();
166 		xyConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
167 				"MAHALANOBIS_DISTANCE", String.valueOf(AlgorithmTool
168 						.getDoubleParameterValue(Config.XY_MAHALANOBIS_DISTANCE
169 								.name(), parameters, DEFAULT_CONFIGURATION)));
170 		xyConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
171 				"PROBABILITY", String.valueOf(AlgorithmTool
172 						.getDoubleParameterValue(Config.XY_PROBABILITY.name(),
173 								parameters, DEFAULT_CONFIGURATION)));
174 		xyConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
175 				"MIN_DISTANCE", String.valueOf(AlgorithmTool
176 						.getDoubleParameterValue(Config.XY_MIN_DISTANCE.name(),
177 								parameters, DEFAULT_CONFIGURATION)));
178 		String xyFeatureNames = AlgorithmTool.getParameterValue(
179 				Config.XY_FEATURE_LIST.name(), parameters,
180 				DEFAULT_CONFIGURATION);
181 		xyConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
182 				"FEATURE_LIST", xyFeatureNames);
183 
184 		xyConfiguration = new RubineConfiguration(xyConf);
185 
186 		// YZ plane
187 		Configuration yzConf = new Configuration();
188 		yzConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
189 				"MAHALANOBIS_DISTANCE", String.valueOf(AlgorithmTool
190 						.getDoubleParameterValue(Config.YZ_MAHALANOBIS_DISTANCE
191 								.name(), parameters, DEFAULT_CONFIGURATION)));
192 		yzConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
193 				"PROBABILITY", String.valueOf(AlgorithmTool
194 						.getDoubleParameterValue(Config.YZ_PROBABILITY.name(),
195 								parameters, DEFAULT_CONFIGURATION)));
196 		yzConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
197 				"MIN_DISTANCE", String.valueOf(AlgorithmTool
198 						.getDoubleParameterValue(Config.YZ_MIN_DISTANCE.name(),
199 								parameters, DEFAULT_CONFIGURATION)));
200 		String yzFeatureNames = AlgorithmTool.getParameterValue(
201 				Config.YZ_FEATURE_LIST.name(), parameters,
202 				DEFAULT_CONFIGURATION);	
203 		yzConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
204 				"FEATURE_LIST", yzFeatureNames);
205 
206 		yzConfiguration = new RubineConfiguration(yzConf);
207 
208 		// ZX plane
209 		Configuration zxConf = new Configuration();
210 		zxConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
211 				"MAHALANOBIS_DISTANCE", String.valueOf(AlgorithmTool
212 						.getDoubleParameterValue(Config.ZX_MAHALANOBIS_DISTANCE
213 								.name(), parameters, DEFAULT_CONFIGURATION)));
214 		zxConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
215 				"PROBABILITY", String.valueOf(AlgorithmTool
216 						.getDoubleParameterValue(Config.ZX_PROBABILITY.name(),
217 								parameters, DEFAULT_CONFIGURATION)));
218 		zxConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
219 				"MIN_DISTANCE", String.valueOf(AlgorithmTool
220 						.getDoubleParameterValue(Config.ZX_MIN_DISTANCE.name(),
221 								parameters, DEFAULT_CONFIGURATION)));
222 		String zxFeatureNames = AlgorithmTool.getParameterValue(
223 				Config.ZX_FEATURE_LIST.name(), parameters,
224 				DEFAULT_CONFIGURATION);	
225 		zxConf.addParameter(RubineAlgorithm.class.getCanonicalName(),
226 				"FEATURE_LIST", zxFeatureNames);
227 
228 		zxConfiguration = new RubineConfiguration(zxConf);
229 
230 	}
231 
232 	public double getXyWeight() {
233 		return xyWeight;
234 	}
235 
236 	public double getYzWeight() {
237 		return yzWeight;
238 	}
239 
240 	public double getZxWeight() {
241 		return zxWeight;
242 	}
243 
244 	public RubineConfiguration getXyConfiguration() {
245 		return xyConfiguration;
246 	}
247 
248 	public RubineConfiguration getYzConfiguration() {
249 		return yzConfiguration;
250 	}
251 
252 	public RubineConfiguration getZxConfiguration() {
253 		return zxConfiguration;
254 	}
255 
256 	public static Map<String, String> getDefaultConfiguration() {
257 		return DEFAULT_CONFIGURATION;
258 	}
259 
260 }