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