double Sample::getPrediction(const Feature &feature) const { if (!feature.indexIsCorrect()) { throw new MessageException("incorrect feature index"); } std::vector<bool> features; features.reserve(FEATURE_NUMBER / 2); features.push_back( picture.getPixelIntensity(feature.getFirstPixel()) > picture.getPixelIntensity(feature.getSecondPixel())); features.push_back(absDifferenceLessThan(picture, feature, 5)); features.push_back(absDifferenceLessThan(picture, feature, 10)); features.push_back(absDifferenceLessThan(picture, feature, 25)); features.push_back(absDifferenceLessThan(picture, feature, 50)); if (feature.getFeatureIndex() < FEATURE_NUMBER / 2) { return features[feature.getFeatureIndex()]; } else { return !features[feature.getFeatureIndex() - FEATURE_NUMBER / 2]; } }
bool absDifferenceLessThan(const Picture picture, const Feature &feature, size_t maxDifference) { return abs( picture.getPixelIntensity(feature.getFirstPixel()) - picture.getPixelIntensity(feature.getSecondPixel())) < maxDifference; }