Object detection, Kinect Depth images

asked 2015-08-31 03:15:03 -0500

smygarn gravatar image

updated 2015-08-31 03:18:15 -0500


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.

image description

Have never found a good object detection algorithm for my work though.

I've tested edge detection: image description

Also tried some 2DFeatures like SURF, SIFT and FAST. They seems to work better on high contrast, high resolution objects? image description

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.

edit retag flag offensive close merge delete


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...

thdrksdfthmn gravatar imagethdrksdfthmn ( 2015-08-31 03:30:03 -0500 )edit

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?

smygarn gravatar imagesmygarn ( 2015-08-31 03:50:04 -0500 )edit

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

wuling gravatar imagewuling ( 2015-08-31 04:04:01 -0500 )edit

You can smooth (blur) and improve contrast by histEqalization, or other approaches, too

thdrksdfthmn gravatar imagethdrksdfthmn ( 2015-08-31 04:18:33 -0500 )edit

how do you create circle structure elements from the image?

smygarn gravatar imagesmygarn ( 2015-08-31 08:59:45 -0500 )edit

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/...

wuling gravatar imagewuling ( 2015-08-31 09:56:59 -0500 )edit

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.

smygarn gravatar imagesmygarn ( 2015-09-16 02:45:40 -0500 )edit

So, what do you propose in pace? Are you sure your "other" algorithm is not with some different preprocessing before?

thdrksdfthmn gravatar imagethdrksdfthmn ( 2015-09-16 03:08:17 -0500 )edit

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?

mrid gravatar imagemrid ( 2020-01-10 03:29:38 -0500 )edit