MATLAB: Matrix/Image Merging

algorithmdigital image processingimage processingmatricesmatrixmatrix manipulation

Hi,
I have 2 matrix A and B which are different size, I would like to combine them together with A as the master to make a new matrix with consist of A and B. The way I want both matrix is merge through a location on both matrix. For example place Matrix A on Matrix B on certain location, Eg ‘8’ on Matrix A to Matrix B’s ‘22’ to result Matrix Merge.
A=[1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
B=[13 14 15 20 27 21; 16 17 18 19 25 26; 21 22 23 24 25 23]
B =
13 14 15 20 27 21
16 17 18 19 25 26
21 22 23 24 25 23
Merge=[0 13 14 15 20 27 21 ; 1 2 3 4 5 25 26 ; 6 7 8 9 10 25 23 ; 11 12 13 14 15 0 0]
Merge =
0 13 14 15 20 27 21
1 2 3 4 5 25 26
6 7 8 9 10 25 23
11 12 13 14 15 0 0
Besides that, additional space will have value of 0. I'll use these method to merge 2 images where i have a location at both images which going to be used to control the location of merging.
Thanks;

Best Answer

Repaste New trix every time!
clear Merge
A=[1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15];
B=[16 17 18 19 20 21; 22 23 24 25 26 27; 28 29 30 31 32 33; 34 35 36 37 38 39;40 41 42 43 44 45];
Awant = 8;
Bwant = 42;
[ra ca] = find(A==Awant,1,'first');
[rb cb] = find(B==Bwant,1,'first');
D = abs(diff([ra ca;rb cb],1,1));
sd = sign(diff([ra ca;rb cb],1,1));
corners = abs(sum(sd));
if ~corners
if sd(1) == 1
Merge(1:(size(B,1)),(D(2)+1:(size(B,2)+D(2)))) = B;
Merge((D(1)+1):(size(A,1)+D(1)),1:(size(A,2))) = A;
else
Merge((D(1)+1):(size(B,1)+D(1)),1:(size(B,2))) = B;
Merge(1:(size(A,1)),(D(2)+1:(size(A,2)+D(2)))) = A;
end
elseif corners == 1;
if ~sd(1)
Merge(1:(size(B,1)),1:(size(B,2))) = B;
Merge((D(1)+1):(size(A,1)+D(1)),(D(2)+1:(size(A,2)+D(2)))) = A;
else
Merge(1:(size(B,1)),1:(size(B,2))) = B;
Merge((D(1)+1):(size(A,1)+D(1)),(D(2)+1:(size(A,2)+D(2)))) = A;
end
else
if sd(1) == 1
Merge(1:(size(B,1)),1:(size(B,2))) = B;
Merge((D(1)+1):(size(A,1)+D(1)),(D(2)+1:(size(A,2)+D(2)))) = A;
else
Merge((D(1)+1):(size(B,1)+D(1)),(D(2)+1:(size(B,2)+D(2)))) = B;
Merge(1:(size(A,1)),1:(size(A,2))) = A;
end
end
Should work for any case.