Armin Burger wrote:
maybe someone on this list has some experience using numpy in combination with GDAL/Python and could give me some advice.

For further questions about numpy, the numpy list is very helpful.


difference can be easily calculated after reading both images into an array and substract one from the other.

The problem is that both images can contain clouds or snow that have predefined pixel values (252,253).

Does anybody know if this is possible and how to perform it?

yep.

Looking through the numpy docs I was not able to identify required methods or functions for this. There is something like 'masked arrays' but I have not understood if this could be used for my purpose.

This is exactly the kind of thing masked arrays are for. Yu can create a masked array out of your data with something like:

>>> a
array([ 1,  2,  3,  4,  5,  6,  3,  4, 67,  4,  3,  5,  6,  7])

#a regular array

>>> import numpy.ma as ma

# create a masked array with the mask set at all elements with a value of 3:
>>> a = ma.masked_values(a, 3)
>>> a
masked_array(data = [1 2 -- 4 5 6 -- 4 67 4 -- 5 6 7],
mask = [False False True False False False True False False False True False
 False False],
      fill_value=3)

#another one:
>>> b = np.array((1,3,4,2,4,7,4,5,23,5,7,3,8,5))
>>> b = ma.masked_values(b, 3)
>>> b
masked_array(data = [1 -- 4 2 4 7 4 5 23 5 7 -- 8 5],
mask = [False True False False False False False False False False False True
 False False],
      fill_value=3)


add them together:
>>> c = a+b
>>> c
masked_array(data = [2 -- -- 6 9 13 -- 9 90 9 -- -- 14 12],
mask = [False True True False False False True False False False True True
 False False],
      fill_value=3)


If your values are Floating Point, then Another option would be to replace all the "cloud" values with NaN:

>>> a = np.array((1,2,3,4,5,6,3,4,67,4,3,5,6,7), dtype=np.float)
>>> a[a==3] = np.nan
>>> a
array([  1.,   2.,  NaN,   4.,   5.,   6.,  NaN,   4.,  67.,   4.,  NaN,
         5.,   6.,   7.])
>>> b = np.array((1,3,4,2,4,7,4,5,23,5,7,3,8,5), dtype=np.float)
>>> b[b==3] = np.nan
>>> b
array([  1.,  NaN,   4.,   2.,   4.,   7.,   4.,   5.,  23.,   5.,   7.,
        NaN,   8.,   5.])
>>> a+b
array([  2.,  NaN,  NaN,   6.,   9.,  13.,  NaN,   9.,  90.,   9.,  NaN,
        NaN,  14.,  12.])


-Chris



--
Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

[EMAIL PROTECTED]
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to