ofPolyline ofxFaceTracker2Landmarks::getFeature(Feature feature, vector<T> points) const {
    ofPolyline polyline;
    vector<int> indices = getFeatureIndices(feature);
    for(int i = 0; i < indices.size(); i++) {
        int cur = indices[i];
        polyline.addVertex(points[cur]);
    }
    switch(feature) {
        case LEFT_EYE:
        case RIGHT_EYE:
        case OUTER_MOUTH:
        case INNER_MOUTH:
        case FACE_OUTLINE:
            polyline.close();
            break;
        default:
            break;
    }
    
    return polyline;
}
Beispiel #2
0
	void Segmenter::createProbabilityTable() {		
		int mode_old, mode_new, feature_mode_old, feature_mode_new;
		double gate_probability;
		int edges = getEdges();
		
		vector<double> double_row(edges);
		probabilityMatrix = vector<vector<double> >(edges, double_row);
		
		vector<int> int_row(edges);
		modeMatrix = vector<vector<int> >(int(features.size() + 1), int_row);
				
		for (int i = 0; i < edges; i++) {
			vector<int> indices = getFeatureIndices(i + 1);
			
			for (int j = 0; j < features.size() + 1; j++)
				modeMatrix[j][i] = indices[j];
		}
		
		for (int i = 0; i < edges; i++) {
			for (int j = 0; j < edges; j++) {
				mode_old = modeMatrix[0][i];
				mode_new = modeMatrix[0][j];
				gate_probability = 1.0;
				
				for (int k = 0; k < features.size(); k++) {
					feature_mode_old = modeMatrix[k + 1][i];
					feature_mode_new = modeMatrix[k + 1][j];
					
					gate_probability *= features[k]->getSegmentationParameters()->fusionLogic[mode_old - 1][mode_new - 1][feature_mode_old - 1][feature_mode_new - 1];
				}
					
				probabilityMatrix[j][i] = modeTransitions[mode_old - 1][mode_new - 1] * gate_probability;
				
				if (probabilityMatrix[j][i] == 0)
					probabilityMatrix[j][i] = -46.0517;
				else
					probabilityMatrix[j][i] = log(probabilityMatrix[j][i]);
			}
		} 
	}