30 November 2016 23 9K Report

Hello,

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 (see attached picture).

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 (see link below), 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.

    My question is the following: 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.

    Bruno

    http://users.nik.uni-obuda.hu/vamossy/GepiLatas2007/Segedlet/Hlavac_Sonka.pdf

    More Bruno Martin's questions See All
    Similar questions and discussions