Even,
That was a little thing that I start years ago. Here is the usage:
{{{
# =============================================================================
# Usage Message
# =============================================================================
def Usage():
print 'Usage: mathbox.py [-formula "formula"] [outfile] [infile*]'
print
print ' -formula Formula to be applied on input pixels values'
print ' assigning the results to the output.'
print ' Use letters "a" to "j" as variables to refers'
print ' to the list of infiles in alphabetic order'
print ' outfifile Name of the output file'
print ' infile Name of the input file(s)'
print
print ' Notes: Images will be identified by the order of file name as
"a,b,c...'
print
print 'Examples:'
print
print ' mathbox.py -formula "a+b/2" result.tif dist_roads.tif slope.tif'
print ' mathbox.py -formula "a-255" correct.tif original.tif'
print
sys.exit(1)
}}}
It is based on the "eval()" Python function, so it will actually execute the
formula as it was
entered by the user. Please let me know if that would be of any interest.
Regards,
Ivan
Even Rouault wrote:
For the record, I had started some time ago to work on something pretty close
to Frank's ideas. It was based on a "generic" expression evaluator that could
accept C-like expressions ( arithmetic operators, boolean operators, numeric
constants, a few predefined maths functions, user variables, user
functions, ...). It could be specialized for pixel operations : the
specialization consists in providing the necessary code to evaluate the
variables and function calls. I'll give more details once I find where it is
burried right now ;-).
It could potentially do more complex operations than just operations on pixels
at same location in different images.
If my memory are corrects, it could do things like :
* "pixel[ysize-1-y][x]" : to make an horizontal flip of an image
* "0.30 * source[0].pixel[y][x] + 0.59 * source[1].pixel[y][x] + 0.11 *
source[2].pixel[y][x]" : to compute a grey level from RGB
* "sum(j,-1,1,sum(i,-1,1,abs(pixel[y+j][x+i] - pixel[y][x]))) / 8" :
equivalent of the TPI algorithm of gdaldem
* "abs(source[0].pixel[y][x] - source[1].pixel[y][x])" : for the example
discussed in the previous post in this thread ;-)
This worked pretty well but of course the performance of an interpretator is
way much slower than the equivalent compiled code.
Best regards,
Even
Le Tuesday 02 February 2010 17:13:54 Frank Warmerdam, vous avez écrit :
Antonio Valentino wrote:
Anyway, IMHO the point here is not to decide if we have to
*modify* the diff function so that it returns abs(b1-b2).
Greg asked to add a new one ( abs(b1-b2) ) to the *base set* of pixel
functions.
Stated that there is no technical difficulty to do this I'm wondering
what is the Frank's mind about the question.
Antonio,
I think including abs(b1-b2) just demonstrates that we haven't come
up with a convenient way of stacking more basic operations (difference
and abs).
Honestly, I'm a bit ambivalent about fleshing out the use of
pixel operations in VRT files and I've never used them myself.
I think I would prefer to wait for a more generalized expression
evaluation mechanism for VRT or possibly as a distinct driver.
However, if there are other GDAL developers keen on this functionality,
and willing to take responsibility for integration, documentation and
support then I'm willing to let them proceed.
Best regards,
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev