[GRASS-dev] test of skeleton functionality in v.voronoi

Moritz Lennert mlennert at club.worldonline.be
Wed Oct 23 02:33:12 PDT 2013


[resending this with smaller images as first try didn't pass mailing 
list server]

On 22/10/13 22:42, Markus Metz wrote:
> Moritz Lennert wrote:
>> Markus M,
>>
>> I know this is still very fresh, but I was excited about seeing your
>> addition to v.voronoi allowing to calculate skeletons and longest lines for
>> areas. Amongst others, this could be useful for calculating some shape
>> parameters of polygons for region-based classification.
>>
>> So, just a quick feedback. I ran the module on the entire urbanarea map, in
>> order to test scalability. The results are really nice and I haven't found
>> evident errors, yet.
>
> I found evident errors in some other test data. The voronoi algorithm
> suffers from problems related to floating point representation errors,
> also sometimes apparent when calculating voronoi diagrams for areas.
>
>> It takes quite a while, though:
>
> Yes, because it is a brute force approach. The problem of finding the
> center line for areas, or an area skeleton from which the center line
> can be extracted, must have been solved previously. A literature
> research might help. On first glance, I did not find a solution,
> though. Only for straight skeletons which are not suitable to extract
> a center line.
>

I found a few articles that seem interesting to my lay eyes. I'll send 
them to you off-list.

I've done a bit of experimentation with generalisation (see 
comp_area_generalisation.png for the resulting areas):

v.extract urbanarea out=myarea cats=93
g.region vect=myarea res=500 -a

time v.generalize input=myarea at user1 output=myarea_general 
method=douglas threshold=1000 --o

real	0m0.060s
user	0m0.036s
sys	0m0.012s


time v.voronoi -s input=myarea at user1 output=skeleton thin=2000

real	1m13.463s
user	1m13.040s
sys	0m0.392s


time v.voronoi -s input=myarea_general output=skeleton_general thin=2000

real	0m29.660s
user	0m29.468s
sys	0m0.180s

i.e. in terms of real time 1m13s vs 30s

The skeleton is not _that_ different (see attached image, blue=without 
generalisation, red=with generalisation) and is probably sufficient for 
many use cases.


And for the center line:

time v.voronoi -s input=myarea at user1 output=centerline thin=-1

real	1m14.255s
user	1m13.732s
sys	0m0.376s

Length of center line: 96202m

time v.voronoi -s input=myarea_general output=centerline_general thin=-1

real	0m29.230s
user	0m29.076s
sys	0m0.144s

Length of center line: 91979m

i.e. same proportions as for the skeleton, and again the difference is 
probably not so significant as to make the result unusable.


Pushing generalisation a bit further:

time v.generalize input=myarea at user1 output=myarea_general2000 
method=douglas threshold=2000

real	0m0.052s
user	0m0.032s
sys	0m0.012s

time v.voronoi -s input=myarea_general2000 output=skeleton_general2000 
thin=2000

real	0m18.203s
user	0m17.988s
sys	0m0.196s

time v.voronoi -s input=myarea_general2000 output=centerline_general2000 
thin=-1

real	0m18.029s
user	0m17.864s
sys	0m0.156s

Length of center line: 89468m

i.e. down to 18s, but now the results begin to differ significantly.


So first thing might be to simply recommend generalisation as a first 
step if approximation is acceptable.

Moritz




-------------- next part --------------
A non-text attachment was scrubbed...
Name: comp_centerline_generalisation.png
Type: image/png
Size: 56509 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20131023/df5e0c3e/attachment-0005.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: comp_area_generalisation.png
Type: image/png
Size: 36885 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20131023/df5e0c3e/attachment-0006.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: comp_centerline_generalisation2000.png
Type: image/png
Size: 58583 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20131023/df5e0c3e/attachment-0007.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: comp_skeleton_generalisation2000.png
Type: image/png
Size: 72076 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20131023/df5e0c3e/attachment-0008.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: comp_skeleton_generalisation.png
Type: image/png
Size: 69521 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20131023/df5e0c3e/attachment-0009.png>


More information about the grass-dev mailing list