void saliencyEngine(object state) { lock (lockThis) { using (ColorFrame frame = colorRef.AcquireFrame()) { // It's possible that we skipped a frame or it is already gone if (frame == null) { return; } size = Convert.ToUInt32(frame.FrameDescription.Height * frame.FrameDescription.Width * 4); frame.CopyConvertedFrameDataToIntPtr(kinect.Camera.PinnedImageBuffer, size, ColorImageFormat.Bgra); frame.Dispose(); colorRef = null; UpdateVisualSaliency(vs, kinect.Camera.PinnedImageBuffer); Spoint = GetSalientPoint(vs); saliency[currentId % 10] = Spoint; if (currentId == 10) { currentId = 0; } else { currentId++; } saliencySecondsTimer_Tick(); } } }
private static extern void SaliencyMap(ref SalientPoint image, int numtemporal, int numspatial, float firsttau, int firstrad, int wFrameResized);
void saliencySecondsTimer_Tick(object sender, EventArgs e) { if (saliencyIsActive == true) { SalientPoint avgPoint = new SalientPoint(); uint sumX = 0, sumY = 0; for (int i = 0; i < saliency.ToArray().Length; i++) { sumX += saliency[i].x; sumY += saliency[i].y; } avgPoint.x = (uint)(sumX / saliency.Length); avgPoint.y = (uint)(sumY / saliency.Length); Dispatcher.BeginInvoke((System.Threading.ThreadStart)delegate { Canvas.SetLeft(salientPoint, avgPoint.x); Canvas.SetTop(salientPoint, avgPoint.y); }); environment.virtualsaliency_xy = new List<float> { avgPoint.x, avgPoint.y }; } }
private static extern void SaliencyMap(ref SalientPoint image, int numtemporal, int numspatial, float firsttau, int firstrad, int wFrameResized);
public void saliencyEngine() { while (kinect.frameReady.WaitOne()) { if (saliencyIsActive == true) { try { UpdateVisualSaliency(vs, pinnedImageBuffer); Spoint = GetSalientPoint(vs); saliency[currentId % 30] = Spoint; currentId++; } catch (Exception ex) { Console.WriteLine("Error Saliency" + ex.Message); } } } }