image-processing - 图像算法中的图像

标签 image-processing

我需要一种用任何语言编写的算法来在图像中找到图像,包括不同比例的图像。有谁知道解决此类问题的起点?

例如:

我有一个 800x600 的图像,在该图像中是一个周长为 180 像素的黄色球。我需要能够使用周长为 15 像素的黄色球的搜索模式找到此图像。

谢谢

最佳答案

这是一个算法:

  • 将图像拆分为 RGB并走蓝色 channel 。您会注意到彩色图像中的黄色区域现在在蓝色 channel 中变暗了。这是因为蓝色和黄色是 complementary colors .
  • 反转蓝色 channel
  • 使用与图像大小相同的圆圈(周长 180 像素)创建灰度搜索模式。使其成为黑色背景上的白色圆圈。
  • 计算 cross-correlation具有反向蓝色 channel 的搜索模式。
  • 互相关峰值将对应于球的位置。

  • 这是运行中的算法:

    RGB 和 R:

    alt text
    alt text

    G和B:

    alt text
    alt text

    倒 B 和图案:

    alt text
    alt text

    Python + OpenCV 代码:
    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
    

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

    这为您提供了图像中图案第一次出现的左上角坐标。如果要找到圆的中心,请将圆的半径添加到 x 和 y 坐标。

    关于image-processing - 图像算法中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720168/

    相关文章:

    c++ - Nvidia NPP nppiFilter 在与 2d 内核卷积时产生垃圾

    通用图像处理库的 C# 设计指南

    python - 如何去除图像 OpenCV、Python 中的噪声?

    c++ - 直方图均衡不适用于彩色图像 - OpenCV

    java - Android:图像的大小会影响SURF的处理时间

    css - 使用 CSS 剪影 PNG 图像

    python - 如何计算2个红色像素之间的距离

    二值图像中的环形或空心伪影检测算法

    python - 在 OpenCV Python 中与多个对象进行模板匹配

    python - 矢量化照片 : Finding an Adapted Algorithm