www.gusucode.com > vision 源码程序 matlab案例代码 > vision/Find3DWorldPointsUsingTriangulationWithMultipleImagesExample.m

    %% Find 3-D World Points Across Multiple Images Using Triangulation
%
%%
% Load images.
imageDir = fullfile(toolboxdir('vision'),'visiondata',...
    'structureFromMotion');
images = imageSet(imageDir);
%%
% Load precomputed camera parameters.
load(fullfile(imageDir,'cameraParams.mat'));
%%
% Compute features for the first image.
I = rgb2gray(read(images,1));
I = undistortImage(I,cameraParams);
pointsPrev = detectSURFFeatures(I);
[featuresPrev,pointsPrev] = extractFeatures(I,pointsPrev);
%%
% Load camera locations and orientations.
load(fullfile(imageDir,'cameraPoses.mat'));
%%
% Create a viewSet object.
vSet = viewSet;
vSet = addView(vSet, 1,'Points',pointsPrev,'Orientation',...
    orientations(:,:,1),'Location',locations(1,:));
%%
% Compute features and matches for the rest of the images.
for i = 2:images.Count
  I = rgb2gray(read(images, i));
  I = undistortImage(I, cameraParams);
  points = detectSURFFeatures(I);
  [features, points] = extractFeatures(I, points);
  vSet = addView(vSet,i,'Points',points,'Orientation',...
      orientations(:,:,i),'Location',locations(i,:));
  pairsIdx = matchFeatures(featuresPrev,features,'MatchThreshold',5);
  vSet = addConnection(vSet,i-1,i,'Matches',pairsIdx);
  featuresPrev = features;
end
%%
% Find point tracks.
tracks = findTracks(vSet);
%%
% Get camera poses.
cameraPoses = poses(vSet);
%%
% Find 3-D world points.
[xyzPoints,errors] = triangulateMultiview(tracks,cameraPoses,cameraParams);
z = xyzPoints(:,3);
idx = errors < 5 & z > 0 & z < 20;
pcshow(xyzPoints(idx, :),'VerticalAxis','y','VerticalAxisDir','down','MarkerSize',30);
hold on
plotCamera(cameraPoses, 'Size', 0.1);
hold off