2017-08-26 23 views
0

私はスクリプトを書きましたが、スクリプトは動作しません。私はどのバグがあるのか​​分かりません。 screenCapture関数をテストしました。できます。私のコードはピクセルごとに比較し、この時点では赤色のみを比較しています。 normxcorr2ドキュメントの例でMATLABを使用して大きな画像内の小さな画像の位置を見つける方法は?

function [X,Y] = findImageXY(ImageName) 
X = 0; 
Y = 0; 


%Load the small image 
SmallImage = imread(ImageName); 

%Screen Capture the right screen 
ScreenImage1=ScreenCapture([1600,1,1600,900],'ScreenImage.bmp'); 
ScreenImage = imread('ScreenImage.bmp'); 


for ii = 1:size(ScreenImage,1) - size(SmallImage,1) - 1 
    for jj = 1:size(ScreenImage,2) - size(SmallImage,2) - 1 
     X = 0; 
     for i = 1:size(SmallImage,1) 
      for j = 1:size(SmallImage,2) 
       if ScreenImage(ii+i,jj+j,1)~= SmallImage(i,j,1) 
        X = inf; 
        Y = inf; 
        break 
       end 
      end 
      if isinf(X) == 1 
       break 
      end 
     end 
     if X == 0 
      X = jj + ceil(size(SmallImage,2)/2); 
      Y = ii + ceil(size(SmallImage,1)/2); 
      break 
     end 
    end 
    if X~=0 && isinf(X)~=1 
     break 
    end 
end 
+0

こんにちは、関数normmcorr2を使用して、小さなイメージがインデックスオフセットの大きなものと最も類似しているインデックスを取得できます。私は、2つの画像の値が同一ではない可能性があると考えています。正確な比較はできませんが、その差異があるはずです。しかし、私は 'normxcorr2'を使うのが最善だと思います。 – dafnahaktana

+0

また、画面キャプチャ画像の場合は、画面上に何がスムーズな領域があるかによって異なります。例えば、画面がstackoverflowサイトにページを表示していて、あなたは同じ分野が多くあり、正しいマッチを見つけることが難しいです。 – dafnahaktana

+1

過労の種類ですが、一般的な画像登録方法を使用することができます。あなたの問題に合ったものがここにあります。 https://www.mathworks.com/help/images/ref/imregister.html – Durkee

答えて

-1

ルック:

https://www.mathworks.com/help/images/ref/normxcorr2.html

について考えワース:何あなたがやろうとしていることは、テンプレートマッチングは、2つの類似が、数値的に同一ではない画像上にある場合は、照度の差やノイズのようなものに対して堅牢な正規化された相互相関や位相相関のような技術を使いたいと思っています。ちょうど@dafnahaktanaがコメントでこれと同じことを指摘したことに気づいた。コードがサブ画像等しばしばノイズが最も現実世界のテンプレートマッチング問題、非常に一般的ではない拡大、照明の違い、

間の正確な一致が存在することを前提とし

c = normxcorr2(SmallImage(:,:,1),ScreenImage(:,:,1)); 
[ypeak, xpeak] = find(c==max(c(:))); 
YtopLeft = ypeak-size(SmallImage,1)+1; 
XtopLeft = xpeak-size(SmallImage,2)+1; 

関連する問題