how to convert a project video mosaicking to project mosaic of two images

1 view (last 30 days)
hi, I am newbie in matlab and image processing This tutorial shows how to create a panorama from a video http://www.mathworks.com/help/vision/examples/video-mosaicking.html I want create a panorama for only two images using this code thank you in advance
  2 Comments
Alex Taylor
Alex Taylor on 21 May 2014
I would love to try to help you, but as I've asked repeatedly in your last posts, I need two separate image files. The images you are actually trying to form a mosaic from. I need this data to tune the registration algorithm I will use, and to try to decide which algorithm to use.
Without these images, I could at best provide you code that succeeds at registering the two images I would choose, but might not work very well with your data.
I'm really trying to be helpful here...
Image Analyst
Image Analyst on 12 Aug 2014
Alex, I still think it could be instructive for others if you could take two demo images , with some overlap, translation, rotation, and possibly magnification differences and seamlessly stitch them together into a panorama. As a rule of thumb, about what percentage of overlap is needed for a good alignment?

Sign in to comment.

Answers (1)

remos remos
remos remos on 21 May 2014
Edited: remos remos on 21 May 2014
if true
[w, h] = deal(680, 400); % Size of the mosaic
[x0, y0] = deal(-5, -60); % Upper-left corner of the mosaic
xLim = [0.5, w+0.5] + x0;
yLim = [0.5, h+0.5] + y0;
outputView = imref2d([h,w], xLim, yLim);
hsrc = vision.VideoFileReader('vipmosaicking.avi', 'ImageColorSpace','RGB', 'PlayCount', 1);
%
halphablender = vision.AlphaBlender('Operation', 'Binary mask', 'MaskSource', 'Input port');
%
hVideo1 = vision.VideoPlayer('Name', 'Corners');
hVideo1.Position(1) = hVideo1.Position(1) - 350;
%
hVideo2 = vision.VideoPlayer('Name', 'Mosaic');
hVideo2.Position(1) = hVideo1.Position(1) + 400;
hVideo2.Position([3 4]) = [750 500];
%
points = cornerPoints(zeros(0, 2));
features = binaryFeatures(zeros([0 64], 'uint8'));
failedToMatchPoints = true; % A new mosaic will be created if
% failedToMatchPoints is true
%
while ~isDone(hsrc)
% Save the points and features computed from the previous image
pointsPrev = points;
featuresPrev = features;
% To speed up mosaicking, select and process every 5th image
for i = 1:5
rgb = step(hsrc);
if isDone(hsrc)
break;
end
end
% Convert the image from RGB to intensity.
I = rgb2gray(rgb);
% Detect corners in the image
corners = detectFASTFeatures(I);
% Extract FREAK feature vectors for the corners
[features, points] = extractFeatures(I, corners);
% Match features computed from the current and the previous images
indexPairs = matchFeatures(features, featuresPrev);
% Check if there are enough corresponding points in the current and the
% previous images
if size(indexPairs, 1) > 2
matchedPoints = points(indexPairs(:, 1), :);
matchedPointsPrev = pointsPrev(indexPairs(:, 2), :);
% Find corresponding locations in the current and the previous
% images, and compute a geometric transformation from the
% corresponding locations
[tform, ~, ~, failedToMatchPoints] = estimateGeometricTransform(...
matchedPoints, matchedPointsPrev, 'affine');
end
if failedToMatchPoints
% If the current image does not match the previous one, reset the
% transformation and the mosaic image
xtform = eye(3);
mosaic = zeros(h, w, 3, 'single');
else
% If the current image matches with the previous one, compute the
% transformation for mapping the current image onto the mosaic
% image
xtform = xtform * tform.T;
end
% Display the current image and the corner points
cornerImage = insertMarker(rgb, corners.Location, 'Color', 'red');
step(hVideo1, cornerImage);
% Creat a mask which specifies the region of the transformed image.
mask = imwarp(ones(size(I)), affine2d(xtform), 'OutputView', outputView) >= 1;
% Warp the current image onto the mosaic image
transformedImage = imwarp(rgb, affine2d(xtform), 'OutputView', outputView);
mosaic = step(halphablender, mosaic, transformedImage, mask);
step(hVideo2, mosaic);
end
%
release(hsrc);
end
  1 Comment
Image Analyst
Image Analyst on 12 Aug 2014
Did you see Alex's post? He asked you for the two images so he could try something, but you did not attach them.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!