opencv matching edge images

2019-04-01 01:08发布

问题:

I am working on the project and part of it is to recognize objects recorded on camera. So to be more specofic:

  • I am using OpenCV

  • I have correctly setup camera and am able to retrieve pictures from it

  • I have compiled and experimented with number of demos from OpenCV

  • I need a scale- AND rotation- invariant algorithm for detection

  • Pictures of original objects are ONLY available as edge-images

All feature detection/extraction/matching algorithms I have seen so far are working reasonably well with gray-scale images (like photos), however due to my project specs I need to work with edge images (kinda like output of canny edge detector) which are typically BW and contain only edges found within the image. In this case the performance of algorithms I was trying to use (SURF, SIFT, MSER, etc) decreases dramatically.

So the actual question is: Has anyone come across algorithm that would be specific for matching edge images or is there a certain setup that can improve performance of SIFR/SURF/? in order to work well with that kind of input.

I would appretiate any advice or links to any relevant resources

PS: this is my first question of stackoverflow

回答1:

Edge images have a problem: The information they contain about the objects of interest is very, very scarce.

So, a general algorithm to classify edge images is probably not to be found. However, if your images are simple, clear and specific, you can employ a number of techniques to classify them. Among them: find contours, and select by shape, area, positioning, tracking.

A good list of shape information (from Matlab help site) includes:

  • 'Area'
  • 'EulerNumber'
  • 'Orientation'
  • 'BoundingBox'
  • 'Extent'
  • 'Perimeter'
  • 'Centroid'
  • 'Extrema'
  • 'PixelIdxList'
  • 'ConvexArea'
  • 'FilledArea'
  • 'PixelList'
  • 'ConvexHull'
  • 'FilledImage'
  • 'Solidity'
  • 'ConvexImage'
  • 'Image'
  • 'SubarrayIdx'
  • 'Eccentricity'
  • 'MajorAxisLength'
  • 'EquivDiameter'
  • 'MinorAxisLength'

An important condition to use shapes in your algorithm is to be able to select them individually. Shape analysis is very sensitive to noise, overlap, etc

Update

I found a paper that may be interesting in this context - it is an object classifier that only uses shape information, and it can be applied on Canny images - it sounds like it's your solution

http://www.vision.ee.ethz.ch/publications/papers/articles/eth_biwi_00664.pdf