22__all__ = [
"clipImage",
"projectImage",
"getProjectionIndices"]
25from .maskedImage
import MaskedImage, makeMaskedImage
26from .image
import Mask
30 """Clip an image to lie between minClip and maxclip (None to ignore)"""
31 if isinstance(im, MaskedImage):
36 if minClip
is not None:
37 ds = afwDetect.FootprintSet(
38 mi, afwDetect.Threshold(-minClip, afwDetect.Threshold.VALUE,
False))
39 afwDetect.setImageFromFootprintList(
40 mi.getImage(), ds.getFootprints(), minClip)
42 if maxClip
is not None:
43 ds = afwDetect.FootprintSet(mi, afwDetect.Threshold(maxClip))
44 afwDetect.setImageFromFootprintList(
45 mi.getImage(), ds.getFootprints(), maxClip)
49 """Get the indices to project an image
51 Given an image and target bounding box,
52 calculate the indices needed to appropriately
53 slice the input image
and target image to
54 project the image to the target.
59 Bounding box of the input image
61 Bounding box of the target image
66 Slices of the target image
in the form (by, bx), (iy, ix).
68 Slices of the input image
in the form (by, bx), (iy, ix).
71 """Get minimum indices"""
78 return bxStart, ixStart
81 """Get maximum indices"""
92 dXmin = targetBBox.getMinX() - imageBBox.getMinX()
93 dXmax = targetBBox.getMaxX() - imageBBox.getMaxX()
94 dYmin = targetBBox.getMinY() - imageBBox.getMinY()
95 dYmax = targetBBox.getMaxY() - imageBBox.getMaxY()
97 bxStart, ixStart = getMin(dXmin)
98 byStart, iyStart = getMin(dYmin)
99 bxEnd, ixEnd = getMax(dXmax)
100 byEnd, iyEnd = getMax(dYmax)
102 bx = slice(bxStart, bxEnd)
103 by = slice(byStart, byEnd)
104 ix = slice(ixStart, ixEnd)
105 iy = slice(iyStart, iyEnd)
106 return (by, bx), (iy, ix)
110 """Project an image into a bounding box
112 Return a new image whose pixels are equal to those of
113 `image` within `bbox`, and equal to `fill` outside.
117 image: `afw.Image`
or `afw.MaskedImage`
120 The bounding box to project onto.
122 The value to fill the region of the new
123 image outside the bounding box of the original.
127 newImage: `afw.Image`
or `afw.MaskedImage`
128 The new image
with the input image projected
129 into its bounding box.
131 if image.getBBox() == bbox:
135 if isinstance(image, MaskedImage):
136 newImage =
type(image.image)(bbox)
137 newImage.array[by, bx] = image.image.array[iy, ix]
138 newMask =
type(image.mask)(bbox)
139 newMask.array[by, bx] = image.mask.array[iy, ix]
140 newVariance =
type(image.image)(bbox)
141 newVariance.array[by, bx] = image.variance.array[iy, ix]
142 newImage =
MaskedImage(image=newImage, mask=newMask, variance=newVariance, dtype=newImage.array.dtype)
144 newImage =
type(image)(bbox)
147 newImage.array[by, bx] = image.array[iy, ix]
Represent a 2-dimensional array of bitmask pixels.
def clipImage(im, minClip, maxClip)
def getProjectionIndices(imageBBox, targetBBox)
def projectImage(image, bbox, fill=0)
MaskedImage< ImagePixelT, MaskPixelT, VariancePixelT > * makeMaskedImage(typename std::shared_ptr< Image< ImagePixelT > > image, typename std::shared_ptr< Mask< MaskPixelT > > mask=Mask< MaskPixelT >(), typename std::shared_ptr< Image< VariancePixelT > > variance=Image< VariancePixelT >())
A function to return a MaskedImage of the correct type (cf.