Minimizing Maximum Distance between 3D Point Cloud Data
이전 댓글 표시
I have what I'll call a "nominal point cloud" and then a "measured point cloud". My goal is that I want to minimize the maximum distance between respective points of EVERY point in the point cloud without moving points in the nominal cloud. I do not want a least-squares type fit that could sacrifice a couple points for the good of the rest of the cloud.
EDIT: Each point cloud contains the exact same amount of points and when transforming the measured point cloud, I need to move every point in relation to one another. i.e. If you move one point in a direction, every point moves in the same direction with the same magnitude.
I believe I could write a brute-force, majorly iterative, code for this process but the way I have in mind would take absolutely forever to run and that's not feasible. Looking for any advice available.
Thank you.
댓글 수: 7
José-Luis
2014년 6월 4일
I don't get it. Do you have the same number of points in both clouds? Can you move either cloud? If you can move one of them, does the transform have to be affine?
Nicholas
2014년 6월 4일
José-Luis
2014년 6월 4일
Does each point move independently?
Nicholas
2014년 6월 4일
José-Luis
2014년 6월 4일
So that means an affine transform? Translation and rotation but no shear.
José-Luis
2014년 6월 4일
Also, if the distance is pairwise (the distance between one point in one cloud to one point in another cloud, not the minimum distance between a point in one cloud and all the points in other clouds) then your problem reduces to optimizing a system of 6 unknowns:
rotation (x, y and z)
translation (x, y and z)
So you need to find the six values that will minimize the distance between a pairs of points. That sounds like a job for fminsearch() and similar functions.
Nicholas
2014년 6월 5일
답변 (1개)
My goal is that I want to minimize the maximum distance between respective points of EVERY point in the point cloud without moving points in the nominal cloud. I do not want a least-squares type fit that could sacrifice a couple points for the good of the rest of the cloud.
Well, the least squares method that you say you don't want is implemented here
I would do this to at least initialize a search using fminsearch, or better yet, fminimax if you have the Optimization Toolbox. This file may help to parameterize the rototranslation
reg= absor(nominal,measured);
p0=[reg.q(2:3);0;reg.t];
options = optimoptions('fminimax','MinAbsMax',size(nominal,2));
p = fminimax(@(p) objective(p,nominal,measured),[],[],[],[],[],...
[],[],options);
function F=objective(params,nominal,measured)
x1=params(1);
x2=params(2);
x3=sqrt(1-x1^2-x2^2);
theta=params(3);
translation=params(4:6);
Tnominal=AxelRot(nominal,theta,[x1,x2,x3],translation);
F=Tnominal-measured;
댓글 수: 4
Nicholas
2014년 6월 5일
I do not want to use Least Squares method because of the possibility of it sacrificing x amount of points for the benefit of the cloud's average delta from nominal.
You may have missed my point. I proposed to use least squares for initialization. You definitely want to do that.
Nicholas
2014년 6월 5일
Matt J
2014년 6월 7일
No, I don't do emails, I'm afraid. For one thing, it defeats the purpose of this forum if people move the discussion to private email exchange. The idea is to see the question resolved here so that not only you benefit as the OP, but also other people who might encounter the same problem, as well.
카테고리
도움말 센터 및 File Exchange에서 Point Cloud Processing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!