[GRASS-dev] hints appreciated for work on a r.zonal.geometry module

Markus Metz markus.metz.giswork at gmail.com
Tue Jun 21 01:09:43 PDT 2016

On Tue, Jun 21, 2016 at 9:36 AM, Moritz Lennert
<mlennert at club.worldonline.be> wrote:
> On 20/06/16 23:20, Markus Metz wrote:
>> On Mon, Jun 20, 2016 at 6:40 PM, Moritz Lennert
>> <mlennert at club.worldonline.be> wrote:
>>> Hi,
>>> While work is ongoing concerning improving r.to.vect performance [1], I
>>> am
>>> looking at the possibility of creating an r.zonal.geometry module which
>>> would calculate a series of form statistics for raster zones (aka
>>> clumps). I
>>> would begin simply by trying to replicate the v.to.db statistics, i.e.
>>> area
>>> and perimeter, with compactness and fractal dimension derived from the
>>> two
>>> former.
>>> Area calculation is quite simple (and already exists, for example, in
>>> r.stats.zonal with the count method). However, perimeter is a bit more
>>> complicated. My current idea is to 'simply' fetch raster info into a SEG
>>> structure and to check for each pixel whether the upper, lower, left and
>>> right neighbor has the same cat value as the current pixel. For each
>>> neighbor where this is not the case, I add one pixel edge to the total
>>> zonal
>>> perimeter.
>> For raster-based perimeter calculation, you do not need a SEG
>> structure. Instead, you could use a 2x2 moving window and compare top
>> right - bottom right and bottom left - bottom right. Simply have two
>> rows at a time accessible. Whenever a pair is different, increment the
>> perimeter of each member of the comparison that is not NULL. You would
>> need to pad the region with a NULL row on top and bottom and a NULL
>> column to the left and right.
> Ok, thanks ! That's pretty much exactly like clump.c in r.clump, or ?

Yes. r.to.vect also does this padding and processing of a 2x2 window,
but I find the code in r.clump easier to use as template for a new
>> This works only with unique
>> cluster/clump IDs and not with classes.
> Yes. Not sure how usefule class-based geometries would be...
>> Do you want to obtain any
>> other parameters than area size and compactness? Another one might be
>> smoothness = perimeter of the cluster / perimeter of the cluster's
>> bounding box.
> The idea is to extend gradually, so yes, bounding box based statistics would
> be nice. Probably also statistics based on the eigenvalues of the x,y
> coordinates matrix which allows approximating the form by an ellipse and
> calculating length/width ratio statistics.
> But at this stage, I guess that for all these a two-row approach might be
> enough.
> I don't know when I will have time for this, but I would love to be able to
> get this done before foss4g where I will present the GRASS OBIA toolchain...
> Moritz

More information about the grass-dev mailing list