このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
2 次元相互相関
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列となります。ラグについては,結果の行列は以下のようになります。
例として,要素
(または平方米
が3行3列のため,MATLAB®におけるC(3、5)
)を計算します。(1,1)
の要素が一致するように2つの行列を整列させます。この配置は
に対応します。
を見つけるには,平方米
の2つの行を右にスライドさせます。
これで平方米
が行列M1 (1:3, 3: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
サイズ の行列 およびサイズ の行列 が与えられた場合,それらの2次元相互相関 は以下の要素を持つサイズ の行列になります。
はトレースで,ダガーはエルミート共役を意味します。行列 および のサイズは であり,その非ゼロ要素は以下で与えられます。
と
xcorr2
の呼び出しは任意のサイズの通常の複素行列についてのこの処理手順と等価です。
サイズ の およびサイズ の という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 = 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 = 1: M + p - 1为l = 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灰色的标题(“原始”)
イメージの一部分を四角形に選択します。この部分を取り除いた大きい方のイメージを表示します。
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灰色的标题(“节”)
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,苏维埃社会主义共和国,“最大”)
大きい方のイメージ内に小さい方のイメージを配置します。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つの行列を相互相関させ,相互相関の最大絶対値を見つけます。最大絶対値の位置を使用して,テンプレート内のシフトを決定します。既知のシフトに対して結果を確認します。
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
一个
,b
- - - - - -入力配列gpuArray
オブジェクト入力配列。行列または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
データ型:单
|双
複素数のサポート:あり
c
- 2次元相互相関行列または自己相関行列gpuArray
オブジェクト2次元相互相関行列または自己相関行列。行列またはgpuArray
オブジェクトとして返されます。
M行N列の行列XとP行列の行列Hの2次元相互相関は,サイズがM + P - 1行N + q1列の行列Cとなります。この要素は次で求められます。
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
となります。定義式を使用すると,
が得られ,二重和の他のすべての項はゼロになります。
この関数は,GPU配列を完全にサポートします。詳細については,GPUでのMATLAB関数の実行(并行计算工具箱)を参照してください。
次のMATLABコマンドに対応するリンクがクリックされました。
コマンドをMATLABコマンドウィンドウに入力して実行してください。WebブラウザーはMATLABコマンドをサポートしていません。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。