Ask Your Question

paxida's profile - activity

2014-06-05 08:35:43 -0600 received badge  Student (source)
2014-06-05 08:27:05 -0600 received badge  Editor (source)
2014-06-05 08:26:27 -0600 asked a question LINE-MOD/LINE-2D: Why does the OpenCV implementation use only silhouettes of the object?

On his website (section "Software") Hinterstoisser notes that OpenCV implementation of LINE-MOD/LINE-2D uses only sihouettes when learning templates, but doesn't reason why. So here's my question: Why is that?

The lines of code that I'm talking about can be found in file opencv/modules/objectdetect/src/linemod.cpp:

For LINE-2D:

bool ColorGradientPyramid::extractTemplate(Template& templ) const
{
  // Want features on the border to distinguish from background
  Mat local_mask;
  if (!mask.empty())
  {
    erode(mask, local_mask, Mat(), Point(-1,-1), 1, BORDER_REPLICATE);
    subtract(mask, local_mask, local_mask);
  }
//... 
}

And same for LINE-MOD:

bool DepthNormalPyramid::extractTemplate(Template& templ) const
{
  // Features right on the object border are unreliable
  Mat local_mask;
  if (!mask.empty())
  {
    erode(mask, local_mask, Mat(), Point(-1,-1), 2, BORDER_REPLICATE);
  }
//...
}

Why erode the mask? Why not just leave it what it is and take all the gradients anywhere on the object like Hinterstoisser et al. originally proposed in their paper? (As I understood it, LINE-MOD/LINE-2D is for detecting textureless object, not for detecting silhouttes of objects.)