ドキュメンテーション

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

normxcorr2

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

構文

C = normxcorr2(template,A)
gpuarrayC = normxcorr2(gpuarrayTemplate,gpuarrayA)

説明

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

gpuarrayC = normxcorr2(gpuarrayTemplate,gpuarrayA) は GPU で正規化された相互相関演算を実行します。

すべて折りたたむ

イメージをワークスペースに読み取って並べて表示します。

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);

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

hFig = figure;
hAx  = axes;
imshow(peppers,'Parent', hAx);
imrect(hAx, [xoffSet+1, yoffSet+1, size(onion,2), size(onion,1)]);

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

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

カラー イメージを 2 次元に変換します。関数 rgb2gray は gpuArrays を受け入れます。

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));

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

hFig = figure;
hAx  = axes;
imshow(peppers,'Parent', hAx);
imrect(hAx, [xoffSet+1, yoffSet+1, size(onion,2), size(onion,1)]);

入力引数

すべて折りたたむ

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

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

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

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

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

入力テンプレート。gpuArray として指定します。

入力イメージ。gpuArray として指定します。

出力引数

すべて折りたたむ

相関係数。double クラスの数値行列として返されます。相関係数の範囲は -1.0 から 1.0 までになります。

相関係数。基となる型を double クラスとする gpuArray として返されます。

アルゴリズム

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 より前に導入

この情報は役に立ちましたか?