|
@@ -17,6 +17,7 @@ namespace bbiwarg
|
|
|
private Image<Gray, Int16> image;
|
|
|
private Image<Gray, Int16> edges;
|
|
|
private bool[,] fingerPoints;
|
|
|
+ private List<Finger> fingers;
|
|
|
|
|
|
private Int16 minDepth;
|
|
|
private Int16 maxDepth;
|
|
@@ -39,6 +40,10 @@ namespace bbiwarg
|
|
|
|
|
|
|
|
|
findFingerPoints();
|
|
|
+
|
|
|
+
|
|
|
+ findFingers();
|
|
|
+
|
|
|
}
|
|
|
|
|
|
public int getWidth() {
|
|
@@ -135,6 +140,7 @@ namespace bbiwarg
|
|
|
|
|
|
if ((edgeRightX - x) < maxFingerSize && depthLeft > depthMid && depthMid < depthRight) {
|
|
|
fingerPoints[midX, y] = true;
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -165,5 +171,50 @@ namespace bbiwarg
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private void findFingers() {
|
|
|
+ float maxDistanceTogether = 5.0f;
|
|
|
+ float minFingerLength = 20.0f;
|
|
|
+ List<Finger> possibleFingers = new List<Finger>();
|
|
|
+
|
|
|
+ for (int y = 0; y < height; y++) {
|
|
|
+ for (int x = 0; x < width; x++) {
|
|
|
+ if (fingerPoints[x, y]) {
|
|
|
+ Point fingerPoint = new Point(x,y);
|
|
|
+ float minDistanceValue = float.MaxValue;
|
|
|
+ int minDistanceIndex = 0;
|
|
|
+ for (int i = 0; i < possibleFingers.Count; i++)
|
|
|
+ {
|
|
|
+ float distance = possibleFingers[i].getMinDistance(fingerPoint);
|
|
|
+ if (distance < minDistanceValue) {
|
|
|
+ minDistanceValue = distance;
|
|
|
+ minDistanceIndex = i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (minDistanceValue < maxDistanceTogether)
|
|
|
+ {
|
|
|
+ possibleFingers[minDistanceIndex].add(fingerPoint);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ possibleFingers.Add(new Finger(fingerPoint));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ fingers = new List<Finger>();
|
|
|
+ fingerPoints = new bool[width, height];
|
|
|
+ foreach (Finger finger in possibleFingers) {
|
|
|
+ float length = finger.getLength();
|
|
|
+ if (length > minFingerLength)
|
|
|
+ {
|
|
|
+ fingers.Add(finger);
|
|
|
+ foreach (Point fingerPoint in finger.getFingerPoints()) {
|
|
|
+ fingerPoints[fingerPoint.X, fingerPoint.Y] = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|