Object detection, Kinect Depth images
Hi.
I've been working with OpenCV for a while now. Both native OpenCV (C++) and emgu (C#)
I want to recognize one or more "objects" in an image. This time it's a depth image from a kinect sensor. If you look at the image you can recognize 3 equal objects. I've marked it with a red rectangle.
Have never found a good object detection algorithm for my work though.
I've tested edge detection:
Also tried some 2DFeatures like SURF, SIFT and FAST. They seems to work better on high contrast, high resolution objects?
Maybe OpenCV isn't that good in detect this type of objects in the scene?
We are now using Matrox Image Library for this kind of detection.
And the question is...? What is not going well? Have you tried cascades, or shape detector, or features? OpenCV should do the job you want, the problem is how you do it...
Well. I've been trying to identify objects with opencv for a while now and I think it's time to get some help. :)
Initially I tried to find the contours with cannyedges. Looping the contours and try to match the shapes. I this works well for a complete circle objects, but not so good at complex edges.
Then I tried SURF and SIFT and they works quite well out of the box for images with high contrast and large resolution..
Haven't tried Cascade..
If you look in the images above the resolution and contrast is quite low.
My question is:
What is the best opencv-method to recognize the objects and also pick out the coordinate of the objects?
using morphology,at first, you choice the threshold to remain what you want, create circle structure element to remain circle and to finally to find what you want. or you choice the threshold to remain what you want, remove big object and small object ro reamin waht you want
You can smooth (blur) and improve contrast by histEqalization, or other approaches, too
how do you create circle structure elements from the image?
It's the same, when you create a vatiable, for example cross structure element ,Mat M = (Mat_(3,3) << 0, 1, 0, 1, 1, 1, 0, 1, 0);But if want to find curcle object this way is not very easy. I think you can find the area to filter the size or use HoughCircles.
if you want use first way, maybe you should see http://www.mmorph.com/cppmorph/morph/...
I made this testapplication to test the OpenCV and I'm NOT impressed of edge algorithms (findContours) so far. I found it extremely hard to detect the same edges between two nearly identical images and compare the edges to each other.
So, what do you propose in pace? Are you sure your "other" algorithm is not with some different preprocessing before?
How did you implement the edge matching algo in C++ ? I have a similar application but I'm not able to find any good algo to match edges. Can you please help me out?