开发者

python image recognition [closed]

开发者 https://www.devze.com 2022-12-08 22:30 出处:网络
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.

Questions asking for code must demonstrate a minimal understanding of the problem being solved. Include attempted solutions, why they didn't work, and the expected results. See also: Stack Overflow question checklist

Closed 9 years ago.

Improve this question

what I want to do is a image recognition for a simple app:

  1. given image (500 x 500) pxs ( 1 color background 开发者_Python百科)
  2. the image will have only 1 geometric figure (triangle or square or smaleyface :) ) of (50x50) pxs.
  3. python will do the recognition of the figure and display what geometric figure is.

any links? any hints? any API? thxs :)


A typical python tool chain would be:

  • read your images with with PIL
  • transform them into Numpy arrays
  • use Scipy's image filters (linear and rank, morphological) to implement your solution

As far differentiating the shapes, I would obtain its silhouette by looking at the shape of the background. I would then detect the number of corners using a corner detection algorithm (e.g. Harris). A triangle has 3 corners, a square 4, and a smiley none. Here's a python implementation of the Harris corner detection with Scipy.

Edit:

As you mention in the comments, the blog post didn't present the function that produces a gaussian kernel needed in the algorithm. Here's an example of a such a function from the Scipy Cookbook (great resource btw):

def gauss_kern(size, sizey=None):
    """ Returns a normalized 2D gauss kernel array for convolutions """
        size = int(size)
        if not sizey:
            sizey = size
        else:
            sizey = int(sizey)
        x, y = mgrid[-size:size+1, -sizey:sizey+1]
        g = exp(-(x**2/float(size)+y**2/float(sizey)))
        return g / g.sum()


OpenCV has blob analysis tools, it will give you metrics about the shape which you can feed for your favourite pattern recognition algorithm :) Eg. rectangle has 1.0 ratio for area / (height * width), when circle's ratio is about 0.78.


You point the geometric figure is 50x50 px. If size and orientation of the geometric figures are fixed, you have a classic template matching problem, suitable to the correlation method. You can apply the template matching on the original image or on a border detection output.

Otherwise, if size (scale) and/or orientation are arbitrary, Fourier descriptors can be applied. These descriptors are rotation and scale invariants.

All these methods can be coded using OpenCV, NumPy or SciPy.


If you know the statespace of your data, you can use Principal Component Analysis. With PCA all of the objects must be posed (in the center of the screen). PCA will not do detection, but it will seperate objects into unique layers in which you can identify as being a triangle, etc. Also note: this is not scale or rotation invariant.

[I can't remember what this technique is called, but its similar to how the postoffice does handwritting rec] If you can handle only non-curved curvfaces, you could do edge detection, and then do sampling at intersections to get an approximation of similarity.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号