2014-12-04 98 views
0

我想用模板执行模板匹配。一般来说,通过将图像从空间域转换到频域可以使模板匹配更快。但是,如果我想要执行相同的掩码,是否还有任何方法可以应用?我正在使用opencv C++。在这个任务中,opencv中是否有匹配函数?带模板匹配的模板

我目前的做法:

  • 按位异或图像的掩模A &图像B。

  • 计数的非零像素。

  • 装满这个计数的结果矩阵。

  • 搜索MAXI-MA。

现在我猜几个参数是:

  • 跳过瓷砖的位置,如果比赛少于25%。
  • 如果匹配小于25%,则跳过拼贴位置。

  • 跳过平铺位置如果先前的磁砖具有匹配是小于50%。

我的问题:是否有任何的算法已经做到这一点匹配?有没有可以加速这个过程的数学运算?

回答

0

随着二值图像,你可以直接使用HU-矩及马氏距离找到,如果图像与类似图像B.如果距离趋于0,然后将图像是相同的。

当然你也可以使用还具有检测器,使得看什么的比赛,但对于喜欢这些图片,Hu矩或功能的探测器将给出大致相同的结果,但胡时刻都更有效。

使用findContours,可以提取黑色区域的白星内填充它们,才能有像A =图像B.

其他方法:使用你的面具findContours和应用结果来成像(提取感兴趣区域),可以提取星体内部的内容并计算您拥有多少黑色像素(不匹配的像素)。

+0

对不起!我修改了我的问题来说清楚。我没有比较这些图像中的功能!我想用蒙版来计算图像中匹配像素的总数! – 2014-12-04 17:41:48

+0

所以只需使用bitwise_and操作并获取白色像素的数量。 – madduci 2014-12-04 17:43:45

0

我有同样的要求,我尝试了几乎相同的方式。就像在图像中,我想匹配城堡。城堡有不同的盾牌形象和可变长度的氏族名称以及草地背景(此图像来自游戏Clash of Clans)。正常的opencv matchTemplate不起作用。所以我写我自己的。 我遵循matchTemplate的方式来创建结果图像,但使用不同的算法。 核心思想是计算掩模下的匹配像素。代码如下,很简单。 这工作正常,但时间成本高。正如你所看到的,它花费457毫秒。 现在我正在进行优化。

源和模板图像都是CV_8U3C,掩模图像是CV_8U。匹配一个频道即可。它速度更快,但成本仍然很高。

Mat tmp(matTempl.cols, matTempl.rows, matTempl.type()); 

int matchCount  = 0; 
float maxVal  = 0; 
double areaInvert = 1.0/countNonZero(matMask); 

for (int j = 0; j < resultRows; j++) 
{ 
    float* data = imgResult.ptr<float>(j); 
    for (int i = 0; i < resultCols; i++) 
    { 
     Mat matROI(matSource, Rect(i, j, matTempl.cols, matTempl.rows)); 

     tmp.setTo(Scalar(0)); 
     bitwise_xor(matROI, matTempl, tmp); 
     bitwise_and(tmp, matMask, tmp); 

     data[i] = 1.0f - float(countNonZero(tmp) * areaInvert); 
     if (data[i] > matchingDegree) 
     { 
      SRect rc; 
      rc.left  = i; 
      rc.top  = j; 
      rc.right = i + imgTemplate.cols; 
      rc.bottom = j + imgTemplate.rows; 
      rcOuts.push_back(rc); 

      if (data[i] > maxVal) 
      { 
       maxVal = data[i]; 
       maxIndex = rcOuts.size() - 1; 
      } 

      if (++matchCount == maxMatchs) 
      { 
       Log_Warn("Too many matches, stopped at: " << matchCount); 
       return true; 
      } 
     } 
    } 
} 

它说我没有足够的声誉发布图像.... http://i.stack.imgur.com/mJrqU.png

新增: 我成功通过关键点优化算法。计算所有点是成本,但只计算服务器关键点更快。看到图片,成本大大降低,现在是7ms左右。

我还不能发布图片,请访问:http://i.stack.imgur.com/ePcD9.png

请给我的声誉,所以我可以发表图片。 :)