/// <summary> /// Calculates features map. First orientations are quantized, the stable ones are selected and then they are spread. /// </summary> /// <param name="orientationDegImg">Orientation map. Each location represents angle in degrees [0..360].</param> /// <param name="spreadNeigborhood">Spreading neighborhood. If 1 no spreading is done.</param> /// <param name="minSameOrientations">Minimal number of the same orientations in [3 x 3] neighborhood to proclaim the orientation stable.</param> /// <returns>Feature map.</returns> public static Gray <byte>[,] Calculate(Gray <int>[,] orientationDegImg, int spreadNeigborhood, int minSameOrientations = 4) { Gray <byte>[,] quantizedOrient = FeatureMap.QuantizeOrientations(orientationDegImg); Gray <byte>[,] importantQuantizedOrient = FeatureMap.RetainImportantQuantizedOrientations(quantizedOrient, minSameOrientations); Gray <byte>[,] sprededQuantizedOrient = importantQuantizedOrient; if (spreadNeigborhood > 1) { sprededQuantizedOrient = FeatureMap.SpreadOrientations(importantQuantizedOrient, spreadNeigborhood); } return(sprededQuantizedOrient); }
/// <summary> /// Calculates features map. First orientations are quantized, the stable ones are selected and then they are spread. /// </summary> /// <param name="orientationDegImg">Orientation map. Each location represents angle in degrees [0..360].</param> /// <param name="spreadNeigborhood">Spreading neighborhood. If 1 no spreading is done.</param> /// <param name="minSameOrientations">Minimal number of the same orientations in [3 x 3] neighborhood to proclaim the orientation stable.</param> /// <returns>Feature map.</returns> public static Image <Gray, byte> Calculate(Image <Gray, int> orientationDegImg, int spreadNeigborhood, int minSameOrientations = 4) { Image <Gray, Byte> quantizedOrient = FeatureMap.QuantizeOrientations(orientationDegImg); Image <Gray, Byte> importantQuantizedOrient = FeatureMap.RetainImportantQuantizedOrientations(quantizedOrient, minSameOrientations); Image <Gray, Byte> sprededQuantizedOrient = importantQuantizedOrient; if (spreadNeigborhood > 1) { sprededQuantizedOrient = FeatureMap.SpreadOrientations(importantQuantizedOrient, spreadNeigborhood); } return(sprededQuantizedOrient); }
/// <summary> /// Calculates features map. First orientations are quantized, the stable ones are selected and then they are spread. /// </summary> /// <param name="orientationDegImg">Orientation map. Each location represents angle in degrees [0..360].</param> /// <param name="spreadNeigborhood">Spreading neighborhood. If 1 no spreading is done.</param> /// <param name="minSameOrientations">Minimal number of the same orientations in [3 x 3] neighborhood to proclaim the orientation stable.</param> /// <returns>Feature map.</returns> public static Gray <byte>[,] Calculate(Gray <int>[,] orientationDegImg, int spreadNeigborhood, int minSameOrientations = 4) { //Quantinize the orientationIMG [ 1..360 --> 0..7 ] Gray <byte>[,] quantizedOrient = FeatureMap.QuantizeOrientations(orientationDegImg); // Convert the neightbor to 8-bit number [ correspond to Image J in the paper] [0..7 --> 1,2,4,8,,,128] Gray <byte>[,] importantQuantizedOrient = FeatureMap.RetainImportantQuantizedOrientations(quantizedOrient, minSameOrientations); Gray <byte>[,] sprededQuantizedOrient = importantQuantizedOrient; if (spreadNeigborhood > 1) { sprededQuantizedOrient = FeatureMap.SpreadOrientations(importantQuantizedOrient, spreadNeigborhood); } return(sprededQuantizedOrient); }