0

normxcorr2 matlab 関数を使用して、画像のサブイメージの正確な位置を特定しようとしています。画像を正確な場所に配置することを除いて、すべてうまくいくようです。

全体像はコチラフル画像

サブ画像はこれ画像の一部

2 つの画像の相関関係の xpeak と ypeak を見つけ、これら 2 つの座標を使用して両方を表示しています。しかし、理由は不明ですが、本来あるべき場所にありません。

出力は次のようになります結果の画像

私のコードは次のとおりです

clear
clc
%#read & convert the image
imgGray  = imread('1.jpg');
imgGray = rgb2gray(imgGray);
obj     = rgb2gray(imread('2.jpg'));




%# cross-correlate and find the offset
cor          = normxcorr2(obj,imgGray); 
[max_cc,indx]       = max(abs(cor(:))); %# Modify for multiple instances (generalize)
[yPeak, xPeak] = ind2sub(size(cor),indx(1));
offset     = [yPeak - size(obj,1), xPeak - size(obj,2)]; 

% size(obj,2)
% create a mask
xbegin = offset(1)+1;
xend = offset(1)+size(obj,2);
ybegin = offset(2)+1;
yend = offset(2)+size(obj,1);
mask      = uint8(zeros(size(imgGray)));
mask(ybegin:yend,xbegin:xend) = obj;




h1 = imshow(imgGray);
set(h1,'AlphaData',0.7)
hold on
h2= imshow(mask);
set(h2,'AlphaData',0.9)

何か提案してください

4

1 に答える 1

1

x と y を入れ替えました。offsetとして定義されて[y, x]いますが、 として使用してい[x, y]ます。以下の行を指摘しました。

offset     = [yPeak - size(obj,1), xPeak - size(obj,2)];

その後

xbegin = offset(1)+1;
xend = offset(1)+size(obj,2);
ybegin = offset(2)+1;
yend = offset(2)+size(obj,1);
于 2013-07-16T17:26:51.097 に答える