J'essaye de reconstruire la forme d'une voile. J'utilise la méthode de reconstruction 3D clairsemée. J'utilise deux caméras avec lesquelles j'ai pris deux photos. J'ai réussi à faire l'étalonnage de ces caméras aussi. Dans les images, il est possible de voir le damier et le code que j'ai écrit le détecte correctement. Maintenant, comme mes images sont en noir et blanc et que la qualité des caméras est assez faible, je ne peux pas utiliser correctement la méthode detectFeatures. Des problèmes surviennent lorsque j'essaie d'utiliser matchFeatures. Pour surmonter ce problème, j'ai décidé d'utiliser à la place une commande cpselect. Ce faisant, je peux cliquer manuellement sur les fonctionnalités. La correspondance entre les points des deux vues semble maintenant être correcte. Quand je continue avec le code et essaye de reconstruire le complot 3D je reçois des points partout. Cela semble déformé. L'intrigue ne représente clairement pas la voile et je ne sais pas pourquoi.Problèmes de reconstruction 3D MATLAB clairsemés. D'une manière ou d'une autre je ne peux pas obtenir le diagramme de dispersion final des points à travailler
Le code suit.
Nous vous remercions à l'avance
% % Load precomputed camera parameters
load IP_CalibrationCarlos.mat %Calibration feature
%
I1 = imread('/Users/riccardocamin/Documents/MATLAB/Frames/Scan1.1.jpg');
I2 = imread('/Users/riccardocamin/Documents/MATLAB/Frames/Scan2.1.jpg');
%
[I1, newOrigin1] = undistortImage(I1, cameraParameters, 'OutputView', 'full');
[I2, newOrigin2] = undistortImage(I2, cameraParameters, 'OutputView', 'full');
%
I1 = imcrop(I1, [80 10 1040 1300]); %Necessary so images have same size
I2 = imcrop(I2, [0 10 1067 1300]);
%
squareSize = 82; % checkerboard square size in millimeters
%
[imagePoints, boardSize, pairsUsed] = detectCheckerboardPoints(rgb2gray(I1), rgb2gray(I2));
[refPoints1, boardSize] = detectCheckerboardPoints(rgb2gray(I1));
[refPoints2, boardSize] = detectCheckerboardPoints(rgb2gray(I2));
%
% % Translate detected points back into the original image coordinates
refPoints1 = bsxfun(@plus, refPoints1, newOrigin1);
refPoints2 = bsxfun(@plus, refPoints2, newOrigin2);
%
worldPoints = generateCheckerboardPoints(boardSize, squareSize);
%
[R1, t1] = extrinsics(refPoints1, worldPoints, cameraParameters); %R = r t = translation
[R2, t2] = extrinsics(refPoints2, worldPoints, cameraParameters);
%
% % Calculate camera matrices using the |cameraMatrix| function.
cameraMatrix1 = cameraMatrix(cameraParameters, R1, t1);
cameraMatrix2 = cameraMatrix(cameraParameters, R2, t2);
%
cpselect(I1, I2); % Save them as 'matchedPoints1'and 'matchedPoints2'
%
indexPairs = matchFeatures(matchedPoints1, matchedPoints2);
% Visualize correspondences
figure;
showMatchedFeatures(I1, I2, matchedPoints1, matchedPoints2);
title('Matched Features');
%
[points3D] = triangulate(matchedPoints1, matchedPoints2, ...
cameraMatrix1, cameraMatrix2);
%
x = -points3D(:,1);
y = -points3D(:,2);
z = -points3D(:,3);
figure
scatter3(x,y,z, 25);
xlabel('X');
ylabel('Y');
zlabel('Z');
Pouvez-vous fournir un exemple de sortie que vous avez mentionné dans la question? –
S'il vous plaît jeter un oeil à ce lien, il y a des images et les fichiers que j'ai utilisés. [lien] (http://fr.mathworks.com/matlabcentral/answers/210084-3d-sparse-reconstruction-issues-somehow-i-can-t-get-the-final-scatter-plot-of- les-points-au-travail) –