मैं गति में ऑब्जेक्ट को हटाने या ओवरले को आकर्षित करने के लिए अग्रभूमि में निकालने के लिए सी # (इमगुसीवी 3.0 का उपयोग करके) में गति का पता लगाना चाहता हूं।EmguCV: ऑप्टिकल फ्लो का उपयोग करके मोशन में ऑब्जेक्ट पर समोच्च बनाएं?
यहां नमूने के परीक्षण मैं एक Kinect के साथ किया
मैं कैसे EmguCV 3.0 के साथ शुरू कर सकते हैं (क्योंकि यह एक गहराई कैमरा है) है?
- मुझे लगता है कि
- काम नहीं करते ऐसा लगता है OpticalFlow एक अच्छी शुरुआत है, लेकिन EmguCV 3.0
- में कोई उदाहरण सी अगर मैं सबसे बड़ा ब्लॉब मैं अपनी आकृति कैसे पा सकते हैं खोजने के कई पृष्ठभूमि हटाने कोड की कोशिश की?
कोई मुझे शुरू करने में मदद कर सकता है?
संपादित करें: http://www.emgu.com/wiki/files/3.0.0-rc1/document/html/b72c032d-59ae-c36f-5e00-12f8d621dfb8.htm
वहाँ केवल है: 17/06/2015
EmguCV3.0.0 आर सी में मैं पैकेज और दस्तावेज में OpticalFlow नहीं दिख रहा है DenseOpticalFlow, OpticalFlowDualTVL1 ???
यह एक AbsDiff कोड है:
var grayFrame = frame.Convert<Gray, Byte>();
var motionFrame = grayFrame.AbsDiff(backFrame)
.ThresholdBinary(new Gray(20), new Gray(255))
.Erode(2)
.Dilate(2);
परिणाम:
मैं कैसे सफेद में गति प्राप्त करने के लिए पता नहीं है?
इस ब्लॉब कोड है:
Image<Bgr, Byte> smoothedFrame = new Image<Bgr, byte>(frame.Size);
CvInvoke.GaussianBlur(frame, smoothedFrame, new Size(3, 3), 1); //filter out noises
Mat forgroundMask = new Mat();
fgDetector.Apply(smoothedFrame, forgroundMask);
CvBlobs blobs = new CvBlobs();
blobDetector.Detect(forgroundMask.ToImage<Gray, byte>(), blobs);
blobs.FilterByArea(400, int.MaxValue);
blobTracker.Update(blobs, 1.0, 0, 1);
foreach (var pair in blobs) {
CvBlob b = pair.Value;
CvInvoke.Rectangle(frame, b.BoundingBox, new MCvScalar(255.0, 255.0, 255.0), 2);
}
परिणाम:
क्यों इतना झूठी सकारात्मक?
यह एक MOG2 कोड है:
forgroundDetector.Apply(frame, forgroundMask);
motionHistory.Update(forgroundMask);
var motionMask = GetMotionMask();
Image<Bgr, Byte> motionImage = new Image<Bgr, byte>(motionMask.Size);
CvInvoke.InsertChannel(motionMask, motionImage, 0);
Rectangle[] rects;
using (VectorOfRect boundingRect = new VectorOfRect()) {
motionHistory.GetMotionComponents(segMask, boundingRect);
rects = boundingRect.ToArray();
}
foreach (Rectangle comp in rects) { ...
परिणाम:
अगर मैं सबसे बड़ी क्षेत्र का चयन कैसे मैं वस्तु की समोच्च मिल सकता है?
धन्यवाद, ऐसा लगता है कि ऑप्टिकल फ्लो EmguCV 3 में उपलब्ध नहीं है? केवल एक घने ऑप्टिकल फ्लो है? क्या मै गलत हु ? –
मैंने पृष्ठभूमि/अग्रभूमि पर AbsDiff (सबसे अच्छा लगता है) की कोशिश की लेकिन मुझे गति में साफ वस्तु नहीं मिल सकती है। मैंने ब्लॉब डिटेक्टर की कोशिश की लेकिन यह पूरी तरह से गड़बड़ हो गया है कि यह बहुत सी चीजों का पता लगाता है। मैंने मानव पहचान की भी कोशिश की लेकिन यह आंशिक मानव –
के साथ काम नहीं करता है, लुकास-कानडे एल्गोरिदम का उपयोग करके 'ऑप्टिकलफ्लो.एलके (...)' भी है, जो कि मुख्य बिंदुओं पर संचालित होता है और इस तरह ऑप्टिकल प्रवाह को मापता है। यह घने ऑप्टिकल प्रवाह से तेज़ है लेकिन ऑब्जेक्ट को अच्छे कीपॉइंट्स की आवश्यकता होती है, और आपको एक अलग क्षेत्र नहीं मिलता है। इसके अलावा, आप AbsDiff के अलावा किस कोड का उपयोग कर रहे हैं? –