查找图像的部分图像的坐标

时间:2014-03-03 21:05:03

标签: image matlab find coordinates

我正在寻找一种使用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,:) = [];

2 个答案:

答案 0 :(得分:0)

查看以下链接:

我使用matlab中的视频对一些非常特殊的几何图形进行了2d跟踪。它的速度远远超过15分钟。您感兴趣的部分是“图像测量”。

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

祝你好运

答案 1 :(得分:0)

更快捷的方法是,不是搜索整个图像,而是采用较小的像素子集说:

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

并搜索该细分受众群。显然,随着 n 的增加,算法会更快。

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

注意: 1)如果有许多具有相同像素的对象

,该算法实际上可能需要更长的时间
  

SegmentOfImage。

2)此外,我相信这个代码一般只有在矩阵完全相同的情况下才有效。例如,如果 sfimg 的大小与 scrimg 不同,则会失败。

希望这有帮助