void ITemplate.Initialize(Feature[] features, Size size, string classLabel) { this.Features = features; this.Size = size; this.ClassLabel = classLabel; }
private static List<Feature> ExtractTemplate(Gray<byte>[,] orientationImage, int maxNumOfFeatures, Func<Feature, int> featureImportanceFunc) { List<Feature> candidates = new List<Feature>(); using (var uOrientationImage = orientationImage.Lock()) { byte* orientImgPtr = (byte*)uOrientationImage.ImageData; int orientImgStride = uOrientationImage.Stride; int imgWidth = uOrientationImage.Width; int imgHeight = uOrientationImage.Height; for (int row = 0; row < imgHeight; row++) { for (int col = 0; col < imgWidth; col++) { if (orientImgPtr[col] == 0) //quantized orientations are: [1,2,4,8,...,128]; continue; var candidate = new Feature(x: col, y: row, angleBinaryRepresentation: orientImgPtr[col]); candidates.Add(candidate); } orientImgPtr += orientImgStride; } } candidates = candidates.OrderByDescending(featureImportanceFunc).ToList(); //order descending return FilterScatteredFeatures(candidates, maxNumOfFeatures, 5); //candidates.Count must be >= MIN_NUM_OF_FEATURES }