Hi Tom,

> Im trying to create a landuse map for a customer that requires the
> removal of pixelation (isolated islands of pixels, possible larger than
> 1 pixel).
> To make things complicated, different pixelclasses have different
> tresholds for removal.
> For instance, class 1 is removed when the combined pixels are less than
> 4, whereas class2 is removed when the combined pixels are less than 50.
> Furthermore, some classes count diagonal neighbours as 'touching'
> whereas other classes discard them.
> 
> My solution is given below.
> As you can see there is an expensive buffer-union-buffer trio to make
> sure I connect the correct polygons before I can calculate their area.
> This calculation is part of a big raster calculation. All of the
> calculations are going very fast, except this one.
> Anyone with an idea to make it faster? In the end all I need is removal
> of isolated islands of pixels so any matrix calculation would be fine as
> well.

I think you could easily implement a filter function to remove the 1 pixel type 
of island as a custom function of ST_MapAlgebraFctNgb(). See 
http://www.postgis.org/documentation/manual-svn/RT_ST_MapAlgebraFctNgb.html The 
size of the window should be 3x3 in this case. Return the pixel value if at 
least one neighbour has a value, null otherwise.

I am 99% sure ST_MapAlgebraFctNgb would be faster on big rasters than 
vectorizing/union/rasterizing...

However I have no idea how to implement such a filter to remove bigger islands 
(or speckles?) spanning on many pixels. Maybe with a little of research...

Pierre

_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to