2

I have a set of points from a laser recognition of a sewer. This sewer has a hole in it.

The main goal is to detect this hole and decide whether it's clean or not. One way to detect it is to find the hole and see if it is a circle (in which case it is clean) or a circle with the upper or bottom side straight (in which case it is dirty).

There may be several solutions to obtain my main goal. I think that detecting this set of points that generate the hole and projecting them could be a good solution. If there is a better approach I would appreciate any suggestion.

I attach two images of the point cloud, which could be of help to understand where is the hole. The first image shows some points at the right. Those points are the ones that the laser detects further inside the hole. In the second image you can see the hole and those points from other perspective.

enter image description here enter image description here

Thank you, Alex.

Jabberwocky
  • 48,281
  • 17
  • 65
  • 115
avm_69
  • 183
  • 2
  • 11
  • 2
    Please indicate on the pictures where that hole is. I can't figure it out. –  Mar 17 '16 at 17:05
  • http://s12.postimg.org/ffja9iqi5/Captura.png http://s9.postimg.org/pryi0xhn3/Captura2.png – avm_69 Mar 18 '16 at 11:06
  • I still have no idea what the problem is. I don't see a hole in the first picture, and in the second picture I have no idea if this hole is supposed to be circular. And then there's some talk about "the top and bottom" of the circle, but I have no idea where whose are located. I think the problem here, like so often, is that you can't program waht you can't explain. In other words, once you can clearly state what you want, it's also clear to yourself and you can program it. – MSalters Mar 18 '16 at 11:36
  • In the first picture you can see the point cloud from a cenital view. Therefore, no hole can be seen, only those points at the right of the image, that are the points that the laser detects inside the hole. In the second image it's difficult to tell whether it is circular or not because of the laser error. All in all, what I need is an algorithm that given a set of points, detects the hole and decides if it is circular enough to be considered circular or not. If it is circular, it implies that the hole is clean, otherwise the hole of the sewer is dirty. Sorry for the misunderstanding. – avm_69 Mar 18 '16 at 12:43
  • @avm_69 if your question is not answered yet then do not accept answers. You can Vote up/down to mark helpful and bad posts. You can also provide/request more information by using comment (add `@nick` to it so the user `nick` will get notification ... but the user have to have some comment or post here) Have a look at [Finding holes in 2d point sets?](http://stackoverflow.com/a/21884021/2521214) if you separate your dataset to the 4 planes or port that answer to 3D it will return a polygon of your hole. After that it is just a matter of computing the angles and if bigger then treshold.... – Spektre Mar 30 '16 at 08:40

1 Answers1

1

A suggestion (untried): select the points that belong to a single side of the sewer and project them onto the plane of that side to obtain a 2D data set.

Then use the largest empty circle algorithm. If there are no spurious points inside the hole, a large radius will result. (See https://en.wikipedia.org/wiki/Largest_empty_sphere, 2D case.)

  • And how could I select the points that belong to each side of a sewer? And how would I decide which plane use to project those points? Thank you. – avm_69 Mar 29 '16 at 14:32
  • In the top view, you see a rectangle, fit a bounding rectangle. This makes the task easier. –  Mar 29 '16 at 15:20