Image in Image Algorithm

前端 未结 4 1647
醉酒成梦
醉酒成梦 2020-12-09 00:40

I need an algorithm written in any language to find an image inside of an image, including at different scales. Does anyone know a starting point to solving a problem like t

相关标签:
4条回答
  • 2020-12-09 01:13

    a version of one of previous posts made with opencv 3 and python 3

    import cv2
    import sys
    
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(cv2.matchTemplate(cv2.imread(sys.argv[1]),cv2.imread(sys.argv[2]),cv2.TM_CCOEFF_NORMED))
    
    print(max_loc)
    

    save as file.py and run as:
    python file.py image pattern

    0 讨论(0)
  • 2020-12-09 01:19

    You should take a look at OpenCV, an open source computer vision library - this would be a good starting point. Specifically check out object detection and the cvMatchTemplate method.

    0 讨论(0)
  • 2020-12-09 01:19

    A simple starting point would be the Hough transform, if you want to find circles.

    However there is a whole research area arount this subject called object detection and recognition. The state of the art has advanced significantly the past decade.

    0 讨论(0)
  • 2020-12-09 01:20

    Here's an algorithm:

    • Split the image into RGB and take the blue channel. You will notice that areas that were yellow in the color image are now dark in the blue channel. This is because blue and yellow are complementary colors.
    • Invert the blue channel
    • Create a greyscale search pattern with a circle that's the same size as what's in the image (180 pixels in circumference). Make it a white circle on a black background.
    • Calculate the cross-correlation of the search pattern with the inverted blue channel.
    • The cross-correlation peak will correspond to the location of the ball.

    Here's the algorithm in action:

    RGB and R:

    alt text alt text

    G and B:

    alt text alt text

    Inverted B and pattern:

    alt text alt text

    Python + OpenCV code:

    import cv
    if __name__ == '__main__':
        image = cv.LoadImage('ball-b-inv.png')
        template = cv.LoadImage('ball-pattern-inv.png')
    
        image_size = cv.GetSize(image)
        template_size = cv.GetSize(template)
        result_size = [ s[0] - s[1] + 1 for s in zip(image_size, template_size) ]
    
        result = cv.CreateImage(result_size, cv.IPL_DEPTH_32F, 1)
    
        cv.MatchTemplate(image, template, result, cv.CV_TM_CCORR)
    
        min_val, max_val, min_loc, max_loc = cv.MinMaxLoc(result)
    
        print max_loc
    

    Result:

    misha@misha-desktop:~/Desktop$ python cross-correlation.py 
    (72, 28)
    

    This gives you the top-left co-ordinate of the first occurence of the pattern in the image. Add the radius of the circle to both x and y co-ordinates if you want to find the center of the circle.

    0 讨论(0)
提交回复
热议问题