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

2 次查看(过去 30 天)
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 个评论
Alex Taylor
Alex Taylor 2014-5-21
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 2014-8-12
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?

请先登录,再进行评论。

回答(1 个)

remos remos
remos remos 2014-5-21
编辑:remos remos 2014-5-21
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

类别

Help CenterFile Exchange 中查找有关 Image Processing and Computer Vision 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by