<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Does a strategy of adding the centroid to the filters.icp
metadata and updating filters.icp documentation with the pipeline
to apply it sound good?<br>
</p>
<div class="moz-cite-prefix">On 3/5/20 5:41 PM, Andrew Bell wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CACJ51z1=LVQjV3rrA8p7aqtxeL6+kvN6nFmv9dLHWEeVsmmqoQ@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">This seems the same as this already reported bug:
<div><br>
</div>
<div><a href="https://github.com/PDAL/PDAL/issues/2939"
moz-do-not-send="true">https://github.com/PDAL/PDAL/issues/2939</a><br>
</div>
<div><br>
</div>
<div>If you want to submit a PR, I'll look it over.</div>
<div><br>
</div>
<div>Thanks!</div>
<div><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Thu, Mar 5, 2020 at 6:36 PM
Jim Klassen <<a href="mailto:klassen.js@gmail.com"
moz-do-not-send="true">klassen.js@gmail.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I
am trying to do something similar (apply ICP on a subset of a
large <br>
dataset) and am running into confusion over the transformation
matrix in <br>
the metadata.<br>
<br>
The point cloud output of the ICP filter on the subset looks
good. <br>
However when I try to use the resulting "transform" metadata
as a input <br>
into filters.transformation.matrix over the full dataset, the
resulting <br>
transformation moves the points wildly out of position.<br>
<br>
Looking at the code, in IterativeClosestPoint.cpp, it looks
like the <br>
transformation matrix (T) is applied after shifting the point
cloud to <br>
the centroid of the reference point cloud (C), and the shifted
back to <br>
regular coordinates.<br>
<br>
So something like Pout = ((P - C) * T) + C<br>
<br>
Where P is a 4 element input point vector (x,y,z,1), Pout is
the output <br>
point vector, C is the centroid vector (x,y,z,0), T is the 4x4
<br>
transformation matrix found by ICP.<br>
<br>
T is reported in the metadata for the stage, however, C is not
reported <br>
in the metadata.<br>
<br>
But the transformation matrix that filters.transformation
expects <br>
something more like<br>
<br>
Pout = P * T'<br>
<br>
If C is not (0,0,0) then T and T' will be different.<br>
<br>
I modified IterativeClosestPoint.cpp to also export the
centroid to the <br>
metadata and then created a pipeline with three
transformations, first <br>
shifting by the negative of the centroid, then applying T,
then shifting <br>
back by the centroid and that produced the expected results.<br>
<br>
<br>
On 2/18/20 7:24 PM, Bradley Chambers wrote:<br>
> The options are very heavily borrowed from the PCL
library, where this <br>
> was a squared value. Also, keep in mind that the default
values may be <br>
> better suited for terrestrial/robotics applications (as
opposed to <br>
> aerial), and will very likely need some tweaking.<br>
><br>
> The reported transformation should also be reported in
row major <br>
> order, like the transformation filter. If you find it is
not, I’d <br>
> consider that a bug, so feel free to file a ticket.<br>
><br>
> PRs are always welcome, especially for documentation!<br>
><br>
> Brad<br>
><br>
<br>
_______________________________________________<br>
pdal mailing list<br>
<a href="mailto:pdal@lists.osgeo.org" target="_blank"
moz-do-not-send="true">pdal@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/pdal"
rel="noreferrer" target="_blank" moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/pdal</a></blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr" class="gmail_signature">Andrew Bell<br>
<a href="mailto:andrew.bell.ia@gmail.com" target="_blank"
moz-do-not-send="true">andrew.bell.ia@gmail.com</a></div>
</blockquote>
</body>
</html>