|
LSSTApplications
11.0-13-gbb96280,12.1.rc1,12.1.rc1+1,12.1.rc1+2,12.1.rc1+5,12.1.rc1+8,12.1.rc1-1-g06d7636+1,12.1.rc1-1-g253890b+5,12.1.rc1-1-g3d31b68+7,12.1.rc1-1-g3db6b75+1,12.1.rc1-1-g5c1385a+3,12.1.rc1-1-g83b2247,12.1.rc1-1-g90cb4cf+6,12.1.rc1-1-g91da24b+3,12.1.rc1-2-g3521f8a,12.1.rc1-2-g39433dd+4,12.1.rc1-2-g486411b+2,12.1.rc1-2-g4c2be76,12.1.rc1-2-gc9c0491,12.1.rc1-2-gda2cd4f+6,12.1.rc1-3-g3391c73+2,12.1.rc1-3-g8c1bd6c+1,12.1.rc1-3-gcf4b6cb+2,12.1.rc1-4-g057223e+1,12.1.rc1-4-g19ed13b+2,12.1.rc1-4-g30492a7
LSSTDataManagementBasePackage
|
(Return to Images)
(You might be interested to compare this example with the discussion of Image locators; apart from an include file and a typedef, the only difference is the use of ImageT::Pixel(y, 0x1, 10) as the assigned pixel value instead of y).
Iterators provide access to an image, pixel by pixel. You often want access to neighbouring pixels (e.g. computing a gradient, or smoothing). Let's consider the problem of smoothing with a
kernel (the code's in maskedImage2.cc):
Start by including MaskedImage.h, defining a namespace for clarity:
That didn't gain us much, did it? The code's a little messier than using x_iterator. But now we can add code to calculate the smoothed image. First make an output image, and copy the input pixels:
Now do the smoothing:
(N.b. you don't really want to do this; not only is this kernel separable into1 2 1 in first the x then the y directions, but lsst::afw::math can do convolutions for you).
Here's a faster way to do the same thing (the use of an Image::Ptr is just for variety)
xy_loc::cached_location_t variables remember relative positions.
We can rewrite this to move setting nw, se etc. out of the loop:
You may have noticed that that kernel isn't normalised. We could change the coefficients, but that'd slow things down for integer images (such as the one here); but we can normalise after the fact by making an Image that shares pixels with the central part of out2 and manipulating it via overloaded operator/=
N.b. you can use the iterator embedded in the locator directly if you really want to, e.g.
Note that this isn't quite the samex_iterator as before, due to the need to make the x_iterator move the underlying xy_locator.
Finally write some output files and close out main():
1.8.5