public FastBitmap GetImageWithDisplacement(FastBitmap currFrame, FastBitmap nextFrame, List<Point> edgePoints) { _nBytesPerPixel = currFrame.CCount; currFrame.LockBits(); nextFrame.LockBits(); byte[] currRgbValues = currFrame.Pixels; byte[] nextRgbValues = nextFrame.Pixels; Dictionary<Point, Point> displacements = new Dictionary<Point, Point>(); foreach (Point edgePoint in edgePoints) { int edgePointPos; List<Color> pointVicinity = GetPointVicinity(edgePoint, currRgbValues, currFrame.Width, currFrame.Height, currFrame.Stride, out edgePointPos); _brief = new BRIEF((POINT_WINDOW_SIDE + 1) * (POINT_WINDOW_SIDE + 1),edgePointPos); string vicinityDescriptor = _brief.GetImageDescriptor(pointVicinity); if (pointVicinity[edgePointPos] != Color.Black) { Point nextFramePoint = FindPointDiscplacement(edgePoint, nextRgbValues, nextFrame.Width, nextFrame.Height, vicinityDescriptor, nextFrame.Stride, pointVicinity[edgePointPos]); displacements.Add(edgePoint, nextFramePoint); } else displacements.Add(edgePoint,edgePoint); } currFrame.UnlockBits(); nextFrame.UnlockBits(); DrawDisplacement(currFrame, displacements); return currFrame; }
public ReturnImage GetImageWithDisplacement(FastBitmap currFrame, FastBitmap nextFrame, List<Point> edgePoints) { _nBytesPerPixel = currFrame.CCount; currFrame.LockBits(); nextFrame.LockBits(); byte[] currRgbValues = currFrame.Pixels; byte[] nextRgbValues = nextFrame.Pixels; ConcurrentDictionary<Point, Point> displacements = new ConcurrentDictionary<Point, Point>(); Parallel.ForEach(edgePoints, (edgePoint) => { int edgePointPos; List<Color> pointVicinity = GetPointVicinity(edgePoint, currRgbValues, currFrame.Width, currFrame.Height, currFrame.Stride, out edgePointPos); _brief = new BRIEF((POINT_WINDOW_SIDE + 1) * (POINT_WINDOW_SIDE + 1), edgePointPos); string vicinityDescriptor = _brief.GetImageDescriptor(pointVicinity); if (pointVicinity[edgePointPos] != Color.Black) { Point nextFramePoint = FindPointDiscplacement(edgePoint, nextRgbValues, nextFrame.Width, nextFrame.Height, vicinityDescriptor, nextFrame.Stride, pointVicinity[edgePointPos]); displacements.TryAdd(edgePoint, nextFramePoint); } else displacements.TryAdd(edgePoint, edgePoint); }); currFrame.UnlockBits(); nextFrame.UnlockBits(); Frame frame = GetFrameByChanell(currFrame, displacements); //frames.Add(); ReturnImage image = new ReturnImage(frame, currFrame); return image; }