问题
I'm working on a commercial product where I need to estimate the 6DOF pose of a known 3D CAD (closed 2-manifold triangular mesh) in a single 2D image. In general, this a difficult problem but under our operational conditions, we can impose the following constraints simplifying the problem:
- The CAD object is known and we do NOT aim for generality like recognizing the class of all chairs.
- We could get the user to position the camera approximately to a specific pose (distance from the object, general orientation +/-15deg, etc.)
- If possible, we would use only the edges of the image (like Canny) to find and match against the object viewed from a given position.
- This would be used in an industrial environment with manmade objects (pipes, valves, junctions, etc) without much texture.
All these constraints lead me to think that even relatively old and somewhat basic techniques could work. For example, in the Sonka and al. book, section 12.3.2 Goad's algorithm explains a 1986 paper from Goad C. "Fast 3D model-based vision" which could work relatively well under our assumptions with its top-down "hypothesize-and-verify" approach. I also know that the industrial vision and robotics community have tackled this problem and its generalization for a long time so there is bound to be something usable out there.
Would somebody know of a commercially usable implementation (like OpenCV, etc.) solving this problem?
More specifically:
- I'm NOT looking for deep learning stuff needing an offline learning phase with thousands of viewpoints from our CAD models.
- I'm NOT looking for RGB-D techniques relying on depth sensors. The color is also irrelevant as the CAD is colorless.
- "Old" techniques out of research fashion are OK, even preferred as we will be running on a low performance computer.
- Ideally, using C or C++ (may depend on OpenCV for example).
- Usable commercially (licensed under BSD, MIT, BOOST, etc.), not GPL.
Thanks in advance for any leads anybody could offer.
回答1:
I would try to create many rendered images of your CAD models and subtract the real image and try to minimize the difference.
To minimize the search space you could think of creating a bounding box of the foreground object first, if that is feasible.
来源:https://stackoverflow.com/questions/40893622/3d-object-pose-from-single-image-using-object-cad