2014-03-03 32 views
0

我正在尋找一種方法來使用matlab在屏幕上查找按鈕的位置。現在我爲此創建了以下代碼: 使用此代碼,我製作了我的計算機的屏幕截圖,將它加載到matlab中並使其加倍。 然後對目標圖像(需要在我的屏幕上找到的圖像)執行相同操作,然後嘗試將其匹配到整個矩陣的矩陣並顯示此圖像左上角的座標。 問題是,用這種方法和1920 * 1080的屏幕分辨率大約需要15分鐘才能完成這個完整的過程。查找圖像的部分圖像的座標

所以我的問題是,有沒有更容易/更快的方式來找到我的屏幕上,或另一個圖像中的圖像coördinates(或中心)?到目前爲止,即使在使用圖像處理工具箱時,我也沒有發現。

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,:) = []; 
+0

看看'xcorr2'。 – chappjc

回答

0

請查看以下鏈接:

我做2D跟蹤從MATLAB對一些非常特殊的幾何形狀的視頻。它比15分鐘快得多。您感興趣的部分是「圖像測量」。

其基本思想是可以使用傅立葉域2d操作,「最大」和一些局部多項式擬合來獲得可靠的子像素對齊。

祝您好運

0

更快的方法是對而不是搜索整個圖像是採取像素的較小的子集說:

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

和搜索該段。顯然如n增加算法會更快。

如果你想確定它實際上是那個片段,你可以對整個圖像進行另一次比較,但是現在你知道了開始的索引。

注: 1)如果有很多具有相同的像素對象以

SegmentOfImage該算法可以真正需要更長的時間。

2)另外,我相信這個代碼通常只在矩陣完全相同時纔有效。例如,如果sfimg的大小與scrimg的大小不一致,則會失敗。

希望這會有幫助