ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

normxcorr2

正規化された 2 次元相互相関

説明

C = normxcorr2(template,A) は、行列 template および A の正規化された相互相関を計算します。結果の行列 C には相関係数が含まれています。

オプションで、正規化された相互相関の計算を GPU を使用して実行できます (Parallel Computing Toolbox™ が必要)。詳細は、GPU での画像処理を参照

すべて折りたたむ

2 つのイメージをワークスペースに読み取って、normxcorr2 で使用するグレースケールに変換します。イメージを並べて表示します。

onion   = rgb2gray(imread('onion.png'));
peppers = rgb2gray(imread('peppers.png'));
imshowpair(peppers,onion,'montage')

相互相関を実行し、結果を表面として表示します。

c = normxcorr2(onion,peppers);
figure, surf(c), shading flat

相互相関のピークを検出します。

[ypeak, xpeak] = find(c==max(c(:)));

normxcorr2 で追加されるパディングを考慮します。

yoffSet = ypeak-size(onion,1);
xoffSet = xpeak-size(onion,2);

一致した領域を表示します。

figure
imshow(peppers);
imrect(gca, [xoffSet+1, yoffSet+1, size(onion,2), size(onion,1)]);

2 つのイメージを gpuArray に読み取ります。

onion   = gpuArray(imread('onion.png'));
peppers = gpuArray(imread('peppers.png'));

カラー イメージを 2 次元グレースケールに変換します。関数 rgb2graygpuArray を受け入れます。

onion   = rgb2gray(onion);
peppers = rgb2gray(peppers);

相互相関を実行し、結果を表面として表示します。

c = normxcorr2(onion,peppers);
figure, surf(c), shading flat

相互相関のピークを検出します。

[ypeak, xpeak] = find(c==max(c(:)));

normxcorr2 で追加されるパディングを考慮します。

yoffSet = ypeak-size(onion,1);
xoffSet = xpeak-size(onion,2);

表示のためにデータを CPU に戻します。

yoffSet = gather(ypeak-size(onion,1));
xoffSet = gather(xpeak-size(onion,2));

一致した領域を表示します。

figure
imshow(peppers);
imrect(gca, [xoffSet+1, yoffSet+1, size(onion,2), size(onion,1)]);

入力引数

すべて折りたたむ

入力テンプレート。数値行列として指定します。template のすべての値が同じであってはなりません。

GPU を使用して計算を実行するには、template を数値行列を含む gpuArray として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

入力イメージ。数値イメージとして指定します。意味のある正規化を行うには、A が行列 template より大きくなければなりません。

正規化された相互相関は、テンプレートの全範囲で A の分散がゼロである領域において、定義されていない演算です。これらの領域では、normxcorr2 は出力 C に相関係数ゼロを割り当てます。

GPU を使用して計算を実行するには、A を数値行列を含む gpuArray として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

出力引数

すべて折りたたむ

相関係数。範囲 [-1, 1] の値を持つ数値行列として返されます。

GPU を使用して相関係数を計算する場合、C は範囲 [-1, 1] の値を持つ数値行列を含む gpuArray として返されます。

データ型: double

アルゴリズム

normxcorr2 では、次の一般的な処理を使用します ([1][2])。

  1. イメージのサイズに応じて、空間領域または周波数領域の相互相関を計算します。

  2. あらかじめ累積和を計算することによって、局所的な和を計算します[1]

  3. 局所的な和を使用して相互相関を正規化し、相関係数を取得します。

実装は、[1] の式に従って行います。

γ(u,v)=x,y[f(x,y)f¯u,v][t(xu,yv)t¯]{x,y[f(x,y)f¯u,v]2x,y[t(xu,yv)t¯]2}0.5

ここで、

  • f はイメージです。

  • t¯ はテンプレートの平均値です。

  • f¯u,v はテンプレートの下の領域にある f(x,y) の平均値です。

参照

[2] Haralick, Robert M., and Linda G. Shapiro, Computer and Robot Vision, Volume II, Addison-Wesley, 1992, pp. 316-317.

拡張機能

参考

|

R2006a より前に導入