主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

xcorr2

説明

c= xcorr2 (一个bは,スケーリングなしで,行列一个bの相互相関を返します。xcorr2xcorrの2次元バージョンです。

c= xcorr2 (一个は,入力行列一个の自己相関行列です。この構文は,xcorr2(一个)と等価です。

すべて折りたたむ

2つの行列M1および平方米を作成します。

M1 = [17 24 1 8 15;23 5 7 14 16;4 6 13 20 22;10 12 19 21 3;11 18 25 2 9];M2 = [8 1 6;3 5 7;4 9 2];

M1は5行5列で平方米は3行3列であることから,これらの相互相関のサイズは(5 + 3)行(5 + 3)列,つまり7行7列となります。ラグについては,結果の行列は以下のようになります。

C c - 2 - 2 c - 2 - 1 c - 2 0 c - 2 1 c - 2 2 c - 2 3. c - 2 4 c - 1 - 2 c - 1 - 1 c - 1 0 c - 1 1 c - 1 2 c - 1 3. c - 1 4 c 0 - 2 c 0 - 1 c 0 0 c 0 1 c 0 2 c 0 3. c 0 4 c 1 - 2 c 1 - 1 c 1 0 c 1 1 c 1 2 c 1 3. c 1 4 c 2 - 2 c 2 - 1 c 2 0 c 2 1 c 2 2 c 2 3. c 2 4 c 3. - 2 c 3. - 1 c 3. 0 c 3. 1 c 3. 2 c 3. 3. c 3. 4 c 4 - 2 c 4 - 1 c 4 0 c 4 1 c 4 2 c 4 3. c 4 4

例として,要素 c 0 2 (または平方米が3行3列のため,MATLAB®におけるC(3、5))を計算します。(1,1)の要素が一致するように2つの行列を整列させます。この配置は c 0 0 に対応します。 c 0 2 を見つけるには,平方米の2つの行を右にスライドさせます。

これで平方米が行列M1 (1:3, 3:5)の上に重なりました。要素ごとの積を計算してそれらを加算します。答えは以下のようになります。

1 × 8 + 7 × 3. + 1 3. × 4 + 8 × 1 + 1 4 × 5 + 2 0 × 9 + 1 5 × 6 + 1 6 × 7 + 2 2 × 2 5 8 5

(r2 c2) = (M2)大小;CC =总和(总和(M1 (0 + (1: r2), 2 + (1: c2)。*平方米))
CC = 585

xcorr2を使用して結果を確認します。

D = xcorr2 (M1, M2);DD = D (0 + r2 2 + c2)
DD = 585

サイズ × N の行列 X およびサイズ P × の行列 H が与えられた場合,それらの2次元相互相関 C X H は以下の要素を持つサイズ + P - 1 × N + - 1 の行列になります。

C k l T r X H k l __ 1 k + P - 1 1 l N + - 1

T r はトレースで,ダガーはエルミート共役を意味します。行列 X および H k l のサイズは + 2 P - 1 × N + 2 - 1 であり,その非ゼロ要素は以下で与えられます。

X n X - P + 1 n - + 1 P + P - 1 n N + - 1

H k l p H p - k + 1 - l + 1 k p P + k - 1 l + l - 1

xcorr2の呼び出しは任意のサイズの通常の複素行列についてのこの処理手順と等価です。

サイズ 7 × 2 2 X およびサイズ 6 × 1 7 H という2つの複素行列を作成します。

X = randn([7 22])+1j*randn([7 22]);H = randn([6 17])+1j*randn([6 17]);[M, N] =大小(X);m = 1: m;n = 1: n;(P, Q) = (H)大小;p = 1: p;q = 1:问;

X C を初期化します。

x = 0 ([M+2*(P-1) N+2*(Q-1)]);Xt (m + p - 1, n + q1) = X;C = 0 ([M+P-1 N+Q-1])

k および l をループ処理することによって C の要素を計算します。各ステップで H k l をゼロにリセットします。乗算してトレースを取得する代わりに要素の積を合計することによって,時間とメモリを節約します。

k = 1: M + p - 1l = 1:N+Q-1 Hkl = 0 ([M+2*(P-1) N+2*(Q-1)]);Hkl (p + k - 1, + l - 1) = H;C (k, l) =总和(总和(Xt。*连词(Hkl)));结束结束max (max (abs (C-xcorr2 H (X)))))
ans = 1.5139 e-14

答えは,xcorr2の出力のマシンの精度と一致しています。

相互相関を使用して,イメージの一部が全体のどこに収まるかを見つけます。相互相関により,含まれる2つの信号が互いに最もよく似ている領域を検出できます。イメージのような2次元信号に対してはxcorr2を使用します。

白黒のテストイメージをワークスペースに読み込みます。显示亮度图像でこれを表示します。

负载杜勒img = X;白色= max (max (img));显示亮度图像(img)轴图像colormap灰色的标题(“原始”

图中包含一个坐标轴。标题为Original的轴包含一个类型为image的对象。

イメージの一部分を四角形に選択します。この部分を取り除いた大きい方のイメージを表示します。

x = 435;X = 535;szx = x: x;y = 62;Y = 182;szy = y: y;教派= img (szx szy);宣传= img;宣传(szx szy) =白;kumg =白*的(大小(img)); kumg(szx,szy) = Sect; subplot(1,2,1) imagesc(kimg) axis图像colormap灰色的标题(“图像”)子图(1,2,2)imagesc(kumg)轴图像colormap灰色的标题(“节”

图中包含2个轴。标题为Image的轴1包含一个Image类型的对象。带有标题Section的轴2包含一个image类型的对象。

xcorr2を使用して,小さい方のイメージが大きい方のイメージのどこに当てはまるかを見つけます。正と負の値の数がほぼ等しくなるように平均値を差し引きます。

nimg = img-mean(意味着(img));nSec = nimg (szx szy);退休研究中心= xcorr2 (nimg nSec);

相互相関の最大値は小さい方のイメージの右下隅の推定位置に相当します。ind2subを使用して,最大値の1次元的位置を2次元座標に変換します。

[ssr,先期]= max (crr (:));[ij,霁]= ind2sub(大小(crr),先期);图绘制(crr(:))标题(互相关的)举行情节(先期苏维埃社会主义共和国,”或“)举行文本(snd * 1.05,苏维埃社会主义共和国,“最大”

图中包含一个坐标轴。标题为互相关联的轴包含3个类型为line, text的对象。

大きい方のイメージ内に小さい方のイメージを配置します。MATLAB®がイメージ表示で使用する方法に従い、小さい方のイメージを回転させます。小さい方のイメージの周囲に四角形を描きます。

img (ij: 1: ij-size(教派,1)+ 1,霁:1:ji-size(教派,2)+ 1)= rot90(教派,2);显示亮度图像(img)轴图像colormap灰色的标题(“重建”)举行[y y y y],[x x x x x],“r”)举行

图中包含一个坐标轴。标题重建的轴包含图像、线两个对象。

既知の量だけテンプレートをシフトし,相互相関を使用してシフトを回復します。

11行11列の行列をもつテンプレートを作成します。22行 22 列の行列を作成してその行の次元に沿って 8、列の次元に沿って 6 だけ元のテンプレートをシフトします。

的模板= 0.2 * (11);模板(6所)= 0.6;模板(说,6)= 0.6;offsetTemplate = 0.2 * 1 (22);Offset = [8 6];offsetTemplate((1:尺寸(模板,1))+偏移量(1)...(1:尺寸(模板,2))+偏移量(2))=模板;

元の行列とシフトした行列をプロットします。

显示亮度图像(offsetTemplate) colormap灰色的持有显示亮度图像(模板)轴平等的

图中包含一个坐标轴。坐标轴包含2个image类型的对象。

2つの行列を相互相関させ,相互相関の最大絶対値を見つけます。最大絶対値の位置を使用して,テンプレート内のシフトを決定します。既知のシフトに対して結果を確認します。

cc = xcorr2 (offsetTemplate、模板);[max_cc, imax] = max(abs(cc(:)));[ypeak, xpeak] = ind2sub(size(cc),imax(1));Corr_offset = [(ypeak-size(template,1)) (xpeak-size(template,2))];isequal (corr_offset抵消)
ans =逻辑1

相互相関から得られたシフトは,行と列の次元において既知のテンプレートのシフトと等価です。

この例では,并行计算工具箱™ソフトウェアが必要です。どのGPUがサポートされているかについては,リリース別のGPUサポート(并行计算工具箱)を参照してください。

既知の量だけテンプレートをシフトし,相互相関を使用してシフトを回復します。

11行11列の行列をもつテンプレートを作成します。22行 22 列の行列を作成してその行の次元に沿って 8、列の次元に沿って 6 だけ元のテンプレートをシフトします。

的模板= 0.2 * (11);模板(6所)= 0.6;模板(说,6)= 0.6;offsetTemplate = 0.2 * 1 (22);Offset = [8 6];offsetTemplate((1:尺寸(模板,1))+偏移量(1)...(1:尺寸(模板,2))+偏移量(2))=模板;

gpuArrayオブジェクトを使用して,GPU上に元のテンプレートとシフトされたテンプレートの行列を配置します。

模板= gpuArray(模板);offsetTemplate = gpuArray (offsetTemplate);

GPU上での相互相関を計算します。

cc = xcorr2 (offsetTemplate、模板);

收集を使用して,結果をMATLAB®ワークスペースに返します。相互相関の最大絶対値を使用してシフトを決定し,結果を既知のシフトと比較します。

cc =收集(cc);[max_cc, imax] = max (abs (cc (:)));[ypeak, xpeak] = ind2sub(大小(cc), imax (1));Corr_offset = [(ypeak-size(template,1)) (xpeak-size(template,2))];isequal (corr_offset抵消)
ans =逻辑1

入力引数

すべて折りたたむ

入力配列。行列またはgpuArrayオブジェクトとして指定します。

gpuArray(并行计算工具箱)オブジェクトを使用したxcorr2の使用の詳細については,GPUでのMATLAB関数の実行(并行计算工具箱)およびリリース別のGPUサポート(并行计算工具箱)を参照してください。

例:罪(2 *π*(0:9)/ 10)*罪(2 *π* (0:13)/ 20)は2次元の正弦波表面を指定します。

例:gpuArray (sin(2 *π*(0:9)/ 10)*罪(2 *π* (0:13)/ 20))は2次元の正弦波表面をgpuArrayオブジェクトとして指定します。

データ型:|
複素数のサポート:あり

出力引数

すべて折りたたむ

2次元相互相関行列または自己相関行列。行列またはgpuArrayオブジェクトとして返されます。

詳細

すべて折りたたむ

2 次元相互相関

M行N列の行列XとP行列の行列Hの2次元相互相関は,サイズがM + P - 1行N + q1列の行列Cとなります。この要素は次で求められます。

C k l 0 1 n 0 N 1 X n H ¯ k n l P 1 k 1 1 l N 1

Hの上の横線は複素共役を表します。

出力される行列C (k, l)には,負と正の行インデックスと列インデックスがあります。

  • 負の行インデックスは,Hの行の上方向のシフトに対応します。

  • 負の列インデックスは,Hの列の左方向のシフトに対応します。

  • 正の行インデックスは,Hの行の下方向のシフトに対応します。

  • 正の列インデックスは,Hの列の右方向のシフトに対応します。

インデックスをMATLAB®形式にキャストするには,Hのサイズを加算します。要素C (k, l)はワークスペースのC (k + P、l + Q)に対応しています。

たとえば,以下の2次元相互相関について考えます。

X = 1(2、3);H = [1 2;3 4;5 6];% H是3 × 2C = xcorr2 (X, H)
C = 6 11 11 5 10 18 18 8 6 10 10 4 2 3 3 1

出力における要素C (1)は定義式のC(1 - 3、1 - 2)= C(2, 1)に対応し,ゼロベースのインデックスを使用します。C (1)要素を計算するには,Hを2行上,1列左にシフトします。その結果,相互相関の和における積は唯一X (1,1) * H (3 2) = 6となります。定義式を使用すると,

C 2 1 0 1 n 0 2 X n H ¯ + 2 n + 1 X 0 0 H ¯ 2 1 1 × 6 6

が得られ,二重和の他のすべての項はゼロになります。

拡張機能

C / c++コード生成
MATLAB®编码器™を使用してCおよびc++コードを生成します。

R2006aより前に導入