|
LSSTApplications
11.0-13-gbb96280,12.1+18,12.1+7,12.1-1-g14f38d3+72,12.1-1-g16c0db7+5,12.1-1-g5961e7a+84,12.1-1-ge22e12b+23,12.1-11-g06625e2+4,12.1-11-g0d7f63b+4,12.1-19-gd507bfc,12.1-2-g7dda0ab+38,12.1-2-gc0bc6ab+81,12.1-21-g6ffe579+2,12.1-21-gbdb6c2a+4,12.1-24-g941c398+5,12.1-3-g57f6835+7,12.1-3-gf0736f3,12.1-37-g3ddd237,12.1-4-gf46015e+5,12.1-5-g06c326c+20,12.1-5-g648ee80+3,12.1-5-gc2189d7+4,12.1-6-ga608fc0+1,12.1-7-g3349e2a+5,12.1-7-gfd75620+9,12.1-9-g577b946+5,12.1-9-gc4df26a+10
LSSTDataManagementBasePackage
|
You can use the C++ APIs to manipulate images and bits of images from python, e.g.
sets a 4x10 portion of image im to 100 (I used im.Factory to avoid repeating afwImage.ImageF, rendering the code non-generic). I can't simply say sim = 100 as that'd make sim an integer rather than setting the pixel values to 100. I used an Image, but a Mask or a MaskedImage would work too (and I can create a sub-Exposure, although I can't assign to it).
This syntax gets boring fast.
We accordingly added some syntactic sugar at the swig level. I can write the preceeding example as:
i.e. create a subimage and assign to it. afw's image slices are always shallow (but you can clone them as we shall see).
Note that the order is [x, y]**. This is consistent with our C++ code (e.g. it's PointI(x, y)), but different from numpy's matrix-like [row, column].
This opens up various possiblities; the following all work:
You might expect to be able to say print im[0,20] but you won't get what you expect (it's an image, not a pixel value); say print float(im[0,20]) instead.
The one remaining thing that you can't do it make a deep copy (the left-hand-side has to pre-exist), but fortunately
works.
You will remember that the previous section used [x, y] whereas numpy uses [row, column] which is different; you have been warned.
You can achieve similar effects using numpy. For example, after creating im as above, I can use getArray to return a view of the image (i.e. the numpy object shares memory with the C++ object), so:
will also set a sub-image's value (but a different sub-image from im[1:5, 2:8]). You can do more complex operations using numpy syntax, e.g.
which is very convenient, although there's a good chance that you'll be creating temporaries the size of im.
1.8.5