Question

Fit a template to a point cloud


Badge +4

Hi,

 

I have a point cloud of a rail line. I also have a guideline of the position of each rail (within +/- 0.1m)

 

What I want to do is fit a template to the point cloud at increments of 0.5m along the guideline. This is to extract the location of the running edge.

 

Does anyone know how to do this? I currently do this in Topodot, but that is a semi-manual process which is time consuming. I'd like to automate it


7 replies

Userlevel 1
Badge +15

Hi @james_c_452​ thanks for your question! There might be a couple of ways you could get a result with FME, but this depends on what geometry type the guideline data is in. If your guideline is in point geometry you could build a line with the LineBuilder. Once your guideline is line geometry you could potentially use a Bufferer and buffer the line by your precision (i.e. 10cm) to create a polygon of your line. You could then use this polygon to clip your point cloud with the Clipper, point cloud in the candidate port and polygon in the clipper port.

 

For more ways to filter and manipulate point clouds check out these articles:

 

Badge +4

Hi @james_c_452​ thanks for your question! There might be a couple of ways you could get a result with FME, but this depends on what geometry type the guideline data is in. If your guideline is in point geometry you could build a line with the LineBuilder. Once your guideline is line geometry you could potentially use a Bufferer and buffer the line by your precision (i.e. 10cm) to create a polygon of your line. You could then use this polygon to clip your point cloud with the Clipper, point cloud in the candidate port and polygon in the clipper port.

 

For more ways to filter and manipulate point clouds check out these articles:

 

Hi @Evie Lapalme​ ,

Thanks for the reply.

My guideline is a line at the moment, and I already have a clipped pointcloud. What I have is a need to find the running edge of a rail track.

My rough guideline is of where the track should be +/-0.1m and a clipped pointcloud that includes the track. what I want to do is fit a template at 0.5m increments along the guideline to that pointcloud. Basically, a lot of cross sections of the actual rail location near the guidline, which I would join to a line if it wasn't output as one. Feature extraction really.

James

Userlevel 1
Badge +15

Hi @Evie Lapalme​ ,

Thanks for the reply.

My guideline is a line at the moment, and I already have a clipped pointcloud. What I have is a need to find the running edge of a rail track.

My rough guideline is of where the track should be +/-0.1m and a clipped pointcloud that includes the track. what I want to do is fit a template at 0.5m increments along the guideline to that pointcloud. Basically, a lot of cross sections of the actual rail location near the guidline, which I would join to a line if it wasn't output as one. Feature extraction really.

James

Hi @james_c_452​ creating cross sections is totally possible with FME, I would take a look at this article specifically: Profiling and Slicing Point Clouds.

 

Could you send a screenshot of what your expected outcome would be? (from visual preview, or even from a different application)

Badge +4

Hi @Evie Lapalme​ ,

Thanks for the reply.

My guideline is a line at the moment, and I already have a clipped pointcloud. What I have is a need to find the running edge of a rail track.

My rough guideline is of where the track should be +/-0.1m and a clipped pointcloud that includes the track. what I want to do is fit a template at 0.5m increments along the guideline to that pointcloud. Basically, a lot of cross sections of the actual rail location near the guidline, which I would join to a line if it wasn't output as one. Feature extraction really.

James

Hi @Evie Lapalme​ ,

Thanks for the reply. I see from that link that you can segment the point cloud into slices. I'm not sure if I can automatically fit a shape to it. What I want to do is fit a rail template shape to the cloud at each slice (roughly where the guideline is). Then once the template is fitted a point will be made at each cross section. In this case the inner running edge of the rail. Then the points can be strung together to make a line of where the train actually drives.

The picture kind of shows what I am wanting to do, but it might not be clear enough

Badge +4

Hi @Evie Lapalme​ ,

Thanks for the reply.

My guideline is a line at the moment, and I already have a clipped pointcloud. What I have is a need to find the running edge of a rail track.

My rough guideline is of where the track should be +/-0.1m and a clipped pointcloud that includes the track. what I want to do is fit a template at 0.5m increments along the guideline to that pointcloud. Basically, a lot of cross sections of the actual rail location near the guidline, which I would join to a line if it wasn't output as one. Feature extraction really.

James

Hi,

Has anyone got a way to fit a template to the slices that you can get from the link @Evie Lapalme​ sent? I want to fit a shape template (the cross sectional profile of a rail line) at 1m increments along a guideline to a pointcloud

Userlevel 1
Badge +15

Hi @Evie Lapalme​ ,

Thanks for the reply.

My guideline is a line at the moment, and I already have a clipped pointcloud. What I have is a need to find the running edge of a rail track.

My rough guideline is of where the track should be +/-0.1m and a clipped pointcloud that includes the track. what I want to do is fit a template at 0.5m increments along the guideline to that pointcloud. Basically, a lot of cross sections of the actual rail location near the guidline, which I would join to a line if it wasn't output as one. Feature extraction really.

James

Sorry for the delayed response @james_c_452​ I was talking with a colleague and they have some ideas, but also more questions for you to clarify the problem a bit more.

 

It sounds like you want to filter the point cloud to find just the points that represent the inner top of the inside track. If this is correct, then we can probably help with some of the steps in this workspace attached.

Buffering and clipping to start. Then use the workspace to filter out all the points except the DSM or top most points. Then you would have to figure out which points represent the inside edge. That would then give you a series of points every 0.5 m or so where you could then position their rail cross section template and build a 3d geometry representation of your track.

 

I'm not sure if this makes sense to you, but maybe we need more clarification.

Badge +4

Hi @Evie Lapalme​ ,

Thanks for the reply.

My guideline is a line at the moment, and I already have a clipped pointcloud. What I have is a need to find the running edge of a rail track.

My rough guideline is of where the track should be +/-0.1m and a clipped pointcloud that includes the track. what I want to do is fit a template at 0.5m increments along the guideline to that pointcloud. Basically, a lot of cross sections of the actual rail location near the guidline, which I would join to a line if it wasn't output as one. Feature extraction really.

James

Hi @Evie Lapalme​ ,

I guess I am not explaining myself quite right. I'll try again, sometimes these sort of tasks can get quite confusing for those who aren't surveyors! Sorry about that.

 

It sounds like it will be easy enough to get the point cloud sections every 0.5m (with say a width of 0.2 to cover sparse clouds). That's really the first step

 

Then I essentially want a point at each of these locations which I can build into a line.

It is an entirely new point. It won't exist in the point cloud. That is because I want to fit a model to this section, and the new point is a mathematical point based on how the model fits the cloud. Things like noise and tilt will affect this which is why it needs to best fit a profile

 

See the attached picture of the cross section of the rail. I want to best fit the blue line (the model) to the point cloud at each section. The red point has a constant offset from the blue line. This is called the running edge and it is where a train theoretically runs. In this case that is the point I want to create (to string into a line with all the other create points)

 

I'm not at all sure if this can be done. From what I have seem in the last few weeks there isn't a way to use FME to do this, other that adding Python (which I can't write)

 

James

 

Reply