MATLAB: Aligning overlapping images and averaging the overlap

aligningaligning imagesaveraging imagesimageimage processingMATLAB

i have an empty matrix
canvas = uint8(zeros(10));
images are placed inside
image1=uint8(magic(3));
canvas(2:4,2:4)=image1;
a second image obviously overwrites the first
image2=uint8(magic(3));
canvas(3:5,3:5)=image2;
I would like to average the overlapping region
my attempt was to inspect each element in canvas to see if it was zero or non zero and then average each element(of subsequent images) one by one if it was non zero. sadly my code is really slow and doesn't work properly..
please help

Best Answer

I'm not quite sure what you want to do in the non-overlapping region, but if you want to leave the original images as they are, then you can do it like this:
canvas1 = uint8(zeros(10));
canvas2 = canvas1;
image1=uint8(magic(3));
canvas1(2:4,2:4)=image1;
image2=uint8(magic(3));
canvas2(3:5,3:5)=image2;
canvas = canvas1 + canvas2;
overlap = canvas1 & canvas2;
canvas(overlap) = canvas(overlap)/2;
I don't think this corresponds exactly to your code though. If you could say what the result in your example should be, it would be possible to be more certain of what to do.