【问题标题】:Image in Image Algorithm图像中的图像算法
【发布时间】:2011-06-10 20:21:05
【问题描述】:

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

例如:

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

谢谢

【问题讨论】:

  • 在这种情况下,圆的周长实际上是毫无用处的。
  • 你有这方面的数学训练吗?这只是一些基本的向量空间变换。没有数学就无法解释。

标签: image-processing


【解决方案1】:

这是一个算法:

  • 将图片分割成RGB,取蓝色通道。您会注意到彩色图像中的黄色区域现在在蓝色通道中变暗了。这是因为蓝色和黄色是complementary colors
  • 反转蓝色通道
  • 创建一个灰度搜索模式,其圆圈的大小与图像中的内容相同(周长为 180 像素)。将其设为黑色背景上的白色圆圈。
  • 计算带有反向蓝色通道的搜索模式的cross-correlation
  • 互相关峰值将对应于球的位置。

下面是实际的算法:

RGB 和 R:

G 和 B:

倒B和图案:

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 坐标。

【讨论】:

  • 1000x upvotes 先生,在我找到你的答案之前,我已经为此工作了几个小时(我在 C++ 方面很糟糕)。 =)
  • 我用了这个方法,效果很好。但是,如果搜索到的项目具有相同颜色的可选轮廓,则此模式不起作用。如何更改包含圆圈(未填充)与搜索圆圈周围图案相同颜色的原始 iamge 的图案?其实我有一个矩形,但没关系。
【解决方案2】:

使用 opencv 3 和 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)

另存为 file.py 并运行为:
python file.py 图像模式

【讨论】:

    【解决方案3】:

    你应该看看OpenCV,一个开源的计算机视觉库——这是一个很好的起点。具体检查对象检测和cvMatchTemplate 方法。

    【讨论】:

      【解决方案4】:

      如果您想查找圈子,一个简单的起点是Hough transform

      但是,围绕这个主题有一个完整的研究领域,称为对象检测和识别。在过去十年中,最先进的技术取得了显着进步。

      【讨论】:

        猜你喜欢
        • 2023-02-23
        • 2012-05-14
        • 2015-10-18
        • 1970-01-01
        • 2018-07-10
        • 2012-12-12
        • 2023-03-23
        • 1970-01-01
        • 2010-12-21
        相关资源
        最近更新 更多