【问题标题】:Find coordinates of partial image of an image查找图像的部分图像的坐标
【发布时间】:2014-03-04 13:41:38
【问题描述】:

我正在寻找一种使用 matlab 在屏幕上查找按钮位置的方法。现在我为此创建了以下代码: 使用此代码,我制作了我的计算机的屏幕截图,将其加载到 matlab 中并使其翻倍。 然后对目标图像执行相同的操作,即需要在我的屏幕上找到的图像,然后尝试将其匹配以找到矩阵到总矩阵并显示该图像左上角的坐标。 问题在于,使用这种方法和 1920*1080 的屏幕分辨率,完成整个过程大约需要 15 分钟。

所以我的问题是,有没有一种更简单/更快的方法可以在我的屏幕上或另一个图像中找到图像的坐标(或中心)?到目前为止,即使使用图像处理工具箱,我也没有找到。

clear all
close all
robo = java.awt.Robot;
t = java.awt.Toolkit.getDefaultToolkit();
rectangle = java.awt.Rectangle(t.getScreenSize());
image = robo.createScreenCapture(rectangle);
filehandle = java.io.File('screencapture.png');
javax.imageio.ImageIO.write(image,'png',filehandle);
scrimg=im2double(imread('screencapture.png')); % screenshot
sfimg=im2double(imread('searchfor.png')); % image to look for

[mA,nA,zA] = size(sfimg);
[mB,nB,zB] = size(scrimg);
F = zeros((mB-mA+1)*(nB-nA+1),3);
k = 0;
for p = 1:mB-mA+1
 for q = 1:nB-nA+1
     for r = 1:zB-zA+1
         iets=[p q r];
         disp(iets)
      if all(all(sfimg==scrimg(p:p+mA-1,q:q+nA-1,r:r+zA-1)))
       k = k + 1;
       F(k,:) = [p,q,r];
      end
     end
 end
end
F(k+1:end,:) = [];

【问题讨论】:

  • 看看xcorr2

标签: image matlab find coordinates


【解决方案1】:

查看以下链接:

我在 matlab 中对一些非常特殊的几何图形进行了二维跟踪。它比 15 分钟快得多。您感兴趣的部分是“对图像进行测量”。

基本思想是您可以使用傅立叶域 2d 运算、“最大值”和一些局部多项式拟合来获得可靠的子像素对齐。

祝你好运

【讨论】:

    【解决方案2】:

    一种更快的方法是,而不是搜索整个图像,而是取一个较小的像素子集说:

    n=4;
    SegmentOfImage=sfimg(1:(mA/n),1:(nA/n));
    

    并搜索该段。显然,随着 n 的增加,算法会更快。

    如果您想确保它实际上是那个片段,您可以对整个图像进行另一次比较,但现在您知道要从哪个索引开始。

    注意: 1)如果有很多具有相同像素的对象,该算法实际上可能需要更长的时间

    SegmentOfImage。

    2) 另外,我相信此代码通常仅在矩阵完全相同的情况下才有效。例如,如果 sfimg 的大小与 scrimg 不同,它将失败。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 2011-05-31
      • 2012-01-15
      • 1970-01-01
      • 2017-08-25
      • 2021-12-26
      相关资源
      最近更新 更多