rotate and crop dataset

Feel free to ask any question here
Post Reply
TMC
Posts: 9
Joined: Tue Mar 12, 2019 1:29 pm

rotate and crop dataset

Post by TMC »

Dear Forum,

I recently started to work with point clouds from TLS - Data. I have a huge plot (over 1 hectar) of trees scanned. So it is a quite big dataset. To reduce the data I try to focus only to the area of interest (AOI). The data is geo-referenced and I do have the exact coordinates of my AOI. Basically I want to crop my point cloud to those coordinates.

My problem:

The only problem I encountered so far is that my plot isn't orthogonal to the coordinate-system. See picture one.
I solved this by using the Edit/Apply transformation (alt+t) and using the calculated correction angle (in this case ~12 degrees, see Picture two).

Now a have a rotated cloud, but it seems that the rotation was done around the center of the bounding shape (just guessing).
Because if I try to crop the cloud by my coordinates of my AOI, it wouldn't crop at the expected position.
In my use case it would be nice if it would rotate around my lower left corner so at least that coordinate wouldn't change.

My question:

Is it possible to
a) crop a point cloud with an polygonal shape to my exact coordinates of my plot or
b) to rotate the cloud and then somehow calculate the new relative position of my coordinates.

Do you have any suggestions to help me?

Best

Tobias

---------------------------
pictures: First one displays just two out of the 146 scans of the plot, but the plot size is displayed by the bounding box. In the middle u can see a quite straight line of rails were a crane is attached
The second one is the same as above but rotated ~12 degrees, now I want to crop the point cloud again. starting roughly there where the points in the lower left corner are visable (actually I need to crop a few meters to the right)

edit: sorry for the doubble post, I forgot to attach the pictures
Attachments
02_Rotated.jpeg
02_Rotated.jpeg (128.31 KiB) Viewed 9751 times
01_original.jpeg
01_original.jpeg (137.31 KiB) Viewed 9751 times
daniel
Site Admin
Posts: 7713
Joined: Wed Oct 13, 2010 7:34 am
Location: Grenoble, France
Contact:

Re: rotate and crop dataset

Post by daniel »

First, the 'Apply Transformation' tool applies the rotation around the coordinate system origin (P' = R.P + T - where R is the rotation matrix, and T the translation). But whatever the way you apply the rotation, your (X,Y) coordinates will change (even slightly), won't they?

I guess the AOI coordinates are in the 'real world' coordinate system? And your cloud hasn't been registered yet? The only proper solution to handle this would be to 'align' your cloud with Ground Control Points (at least 3) so that the TLS point cloud ends at the right position... or did I miss something?
Daniel, CloudCompare admin
TMC
Posts: 9
Joined: Tue Mar 12, 2019 1:29 pm

Re: rotate and crop dataset

Post by TMC »

Dear Daniel,

thank you for your quick reply, it seems I missed it, I'm sorry for the long delay.

The data I have is georeferenced, and to my knwoledge there were used seven ground control points used during the 146 scans of the entire plot. So I guess my AOI is in a real world coordinate system. But CloudCompare did a translation (global shift) before opening the file, because my x and y values are pretty big.
Since the global shift is stored and restored at export time, I'm okay with this.
If the rotation is around the coordinate system origin as you explained it I should be able to calculate the new coordinates with some vector calculations.. I have to look it up this week how to do so, but something I learned long time ago in school might help :).
The problem I might have, is that the automatic translation did not set my point cloud to the origin of the coordinate system.
The original x is 312657.279175 and is translated into 57.27917 and y is translated from 5693918.939423 to 18.93942.

I guess if I set the shift of x and y both to 0, my point cloud would be at the origin, right?

Starting from there I should be able to rotate my cloud, then crop it further to reduce it more precisely to my AOI and then rotate it back so I have again a georeferenced cloud.

I'm going to test this and report back :)

Again, thank you for your answer.

Best Tobias
daniel
Site Admin
Posts: 7713
Joined: Wed Oct 13, 2010 7:34 am
Location: Grenoble, France
Contact:

Re: rotate and crop dataset

Post by daniel »

The problem is that if you don't shift the cloud (setting the shift to (0,0) then you'll lose accuracy!

You should better consider using your new origin (the 'original' cloud origin minus the global shift, i.e. (57.27917, 18.93942) if I understood well). Sorry for the additional arithmetic, but that's the only mechanism in CC to preserve large coordinates accuracy.
Daniel, CloudCompare admin
TM-C
Posts: 1
Joined: Tue Mar 12, 2019 1:31 pm
Location: Leipzig

Re: rotate and crop dataset

Post by TM-C »

Very well Daniel,

I'm going to set my point cloud manually to the origin and rotate it.
Since the translation is reversed after export I"m okay with the additional arithmetic's.
The hard job is going to be to isolate all the trees of this point cloud into separate objects/point clouds, but I managed to find a software "CompuTree" which is designed to deal with such kind of tasks.

Thank you for your help and really quick replies, you are doing a great job in this forum and with your program!

Best Tobias
TMC
Posts: 9
Joined: Tue Mar 12, 2019 1:29 pm

Re: rotate and crop dataset

Post by TMC »

It seems that I'm failing to get my point cloud to the origin of the coordinate system with CloudCompare. It seems there is a quite big shift after rotation of the cloud. So my guess is that my cloud is not set correctly to the origin.

The first thing I do is to import the pount cloud and apply the automatoíc global shift. After that, my point cloud is not at the origin. Hence that, I open the " edit global shift and scale" function again and insert the presumably excact coordinates. Basically I add 57.27917, 18.93942) and hence the cloud should be at the origin. But it seems that it isn't doing that.

Am I doing something wrong? Or do you have an idea what I can do to fix this?

Best Tobias
daniel
Site Admin
Posts: 7713
Joined: Wed Oct 13, 2010 7:34 am
Location: Grenoble, France
Contact:

Re: rotate and crop dataset

Post by daniel »

Once loaded, you can't shift the cloud with the 'Global shift' information (it's meant to be used only at loading and saving time).

Either you set the right shift at loading time (in the Global Shift dialog that automatically appears). Or more simply you apply the remaining shift afterwards with 'Edit > Apply transformation'.
Daniel, CloudCompare admin
TMC
Posts: 9
Joined: Tue Mar 12, 2019 1:29 pm

Re: rotate and crop dataset

Post by TMC »

daniel wrote: Wed Mar 27, 2019 9:38 pm Either you set the right shift at loading time (in the Global Shift dialog that automatically appears). Or more simply you apply the remaining shift afterwards with 'Edit > Apply transformation'.
Okay using the Apply transformation did the trick...

But on the way home I was wondering if it would be possible to crop my data set based on a polygon. First I started to write a simple java program which iterates through my file and only those point which are inside of the polygon are kept.
Then it occurred to me that this might be possible to do in CloudCompare as well.
I found the following in the documentation:

http://www.cloudcompare.org/doc/wiki/in ... _line_mode
command_line_mode wrote: -CROP2D {ortho_dim} {n:number of vertices} X1 Y1 X2 Y2 ... Xn Yn
I guess I can use this to simply crop my cloud at my area of interest coordinates. So all the rotation and cropping and so on is obsolet. Hopefully.
I'll report back with the result :)

Best Tobias
TMC
Posts: 9
Joined: Tue Mar 12, 2019 1:29 pm

Re: rotate and crop dataset

Post by TMC »

This is the code I used for the command line tool

open CMD and change directory to cloudcompare / shift right click on CloudCompare folder and open CMD there

Code: Select all

CloudCompare -o -GLOBAL_SHIFT -312600 -5693000 0 merged_Full.asc -CROP2D z 4 46 829 77 1037 169 1027 122 849
Some explanations of the code since I had quite a bit of struggle to figure out the right syntax for it:

//open a file

Code: Select all

CloudCompare -0
//since data is georeferenced it needs to be globaly shiftet, I use specific values because I need to calculate the verticies of my polygon with those values [x y z]

Code: Select all

GLOBAL_SHIFT -312600 -5693000 0
//filename (I put my cloud into the folder of cloud compare but it would work as well with a given path to file), it seems like 'bin' files are processed much faster

Code: Select all

merged_Full.asc
//initialize the polygon crop functionality

Code: Select all

-CROP2D
// this is the crop direction {ortho_dim} in my case I cropped along the z axis

Code: Select all

z
//how many vertices I want to use. In my case I used a rectangular shape but more complex shapes are possible

Code: Select all

4
//my vertices coordinates I calculated, starting with x1 y2, x2, y2 ... xn, yn

Code: Select all

46 829 77 1037 169 1027 122 849
now I'm trying to develop a for loop to loop through a folder with my 146 scans.

and again thanks Daniel! Great Software :)

Best Tobias

edit [forgot to append the loop]:

Code: Select all

for %f in (./*) do start /w "" "C:\Program Files\CloudCompare\CloudCompare.exe" -SILENT -O -GLOBAL_SHIFT x y z %f  -CROP2D z 4 x1 y1 x2 y2 x3 y3 x4 y4
- open CMD were your files are or replace (./*) with path to files
- for [%f] means: for every file - whereas %f is a variable passed after -GLOBAL_SHIFT x y z [%f]

Code: Select all

start /w ""
waits until cloudcompare exits and then starts the new crop
Last edited by TMC on Fri Apr 05, 2019 1:08 pm, edited 1 time in total.
daniel
Site Admin
Posts: 7713
Joined: Wed Oct 13, 2010 7:34 am
Location: Grenoble, France
Contact:

Re: rotate and crop dataset

Post by daniel »

Great feedback, thanks ;)
Daniel, CloudCompare admin
Post Reply