ドキュメンテーション

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

normxcorr2

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

構文

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

説明

C = normxcorr2(template, A) は、行列 template および A の正規化された相互相関を計算します。意味のある正規化を行うには、行列 A が行列 template より大きくなければなりません。template のすべての値が同じであってはなりません。結果行列 C には、値が -1.0 ~ 1.0 の範囲の相関係数が含まれています。

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

クラス サポート

入力行列 template および A には数値を使用できます。出力行列 Cdouble です。

入力行列 gpuarrayTemplate および gpuarrayA は、基となる型が数値である gpuArrays でなければなりません。出力行列 gpuarrayC は gpuArray で、基となるクラスが double でなければなりません。

すべて折りたたむ

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

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

ヒント

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

アルゴリズム

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

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