Ejemplo n.º 1
0
    def testStars(self):
        """Test creating an RGB image"""
        asinhMap = rgb.AsinhMapping(self.min, self.range, self.Q)
        rgbImage = asinhMap.makeRgbImage(self.images[R], self.images[G], self.images[B])

        if display:
            rgb.displayRGB(rgbImage)            
Ejemplo n.º 2
0
    def testSaturated(self):
        """Test interpolating saturated pixels"""

        satValue = 1000.0
        for f in [R, G, B]:
            self.images[f] = saturate(self.images[f], satValue)

        rgb.replaceSaturatedPixels(self.images[R], self.images[G], self.images[B], 1, 2000)
        #
        # Check that we replaced those NaNs with some reasonable value
        #
        for f in [R, G, B]:
            self.assertTrue(np.isfinite(self.images[f].getImage().getArray()).all())
        
        if False:
            ds9.mtv(self.images[B], frame=0, title="B")
            ds9.mtv(self.images[G], frame=1, title="G")
            ds9.mtv(self.images[R], frame=2, title="R")
        #
        # Prepare for generating an output file
        #
        for f in [R, G, B]:
            self.images[f] = self.images[f].getImage()

        asinhMap = rgb.AsinhMapping(self.min, self.range, self.Q)
        rgbImage = asinhMap.makeRgbImage(self.images[R], self.images[G], self.images[B])

        if display:
            rgb.displayRGB(rgbImage)            
Ejemplo n.º 3
0
    def __init__(self, vmin=None, vmax=None, clip=False, minimum=0, dataRange=1, Q=8):
        mpColors.Normalize.__init__(self, vmin, vmax, clip)

        if True:
            self.mapping = afwRgb.AsinhMapping(minimum, dataRange, Q)
        else:
            self.mapping = afwRgb.LinearMapping(minimum, minimum+dataRange, Q)
Ejemplo n.º 4
0
 def testWriteStars(self):
     """Test writing RGB files to disk"""
     asinhMap = rgb.AsinhMapping(self.min, self.range, self.Q)
     rgbImage = asinhMap.makeRgbImage(self.images[R], self.images[G],
                                      self.images[B])
     with utilsTests.getTempFilePath(".png") as fileName:
         rgb.writeRGB(fileName, rgbImage)
Ejemplo n.º 5
0
    def testWriteStars(self):
        """Test writing RGB files to disk"""
        asinhMap = rgb.AsinhMapping(self.min, self.range, self.Q)
        rgbImage = asinhMap.makeRgbImage(self.images[R], self.images[G], self.images[B])
        fileName = "rgb.png"
        with Tempfile(fileName, remove=True):
            rgb.writeRGB(fileName, rgbImage)

            if False:               # you'll also want to set remove=False in Tempfile manager
                os.system("open %s > /dev/null 2>&1" % fileName)

            self.assertTrue(os.path.exists(fileName))
Ejemplo n.º 6
0
    def __init__(self, minimum=0, dataRange=1, Q=8):
        """Initialise an object able to carry out an asinh mapping

        @param minimum   Minimum pixel value (default: 0)
        @param dataRange Range of values for stretch if Q=0; roughly the linear part (default: 1)
        @param Q Softening parameter (default: 8)

        See Lupton et al., PASP 116, 133
        """
        Normalize.__init__(self)

        ## The object used to perform the desired mapping
        self.mapping = afwRgb.AsinhMapping(minimum, dataRange, Q)
Ejemplo n.º 7
0
def makeThumbnail(exposure, isrQaConfig=None):
    """Create a snapshot thumbnail from input exposure.

    The output thumbnail image is constructed based on the parameters
    in the configuration file.  Currently, the asinh mapping is the
    only mapping method used.

    Parameters
    ----------
    exposure : `lsst.afw.image.Exposure`
        The exposure to be converted into a thumbnail.
    isrQaConfig : `Config`
        Configuration object containing all parameters to control the
        thumbnail generation.

    Returns
    -------
    rgbImage : `numpy.ndarray`
        Binned and scaled version of the exposure, converted to an
        integer array to allow it to be written as PNG.
    """
    if isrQaConfig is not None:
        binning = isrQaConfig.thumbnailBinning
        binnedImage = afwMath.binImage(exposure.getMaskedImage(), binning,
                                       binning, afwMath.MEAN)

        statsCtrl = afwMath.StatisticsControl()
        statsCtrl.setAndMask(binnedImage.getMask().getPlaneBitMask(
            ["SAT", "BAD", "INTRP"]))
        stats = afwMath.makeStatistics(
            binnedImage, afwMath.MEDIAN | afwMath.STDEVCLIP | afwMath.MAX,
            statsCtrl)

        low = stats.getValue(
            afwMath.MEDIAN) - isrQaConfig.thumbnailStdev * stats.getValue(
                afwMath.STDEVCLIP)

        if isrQaConfig.thumbnailSatBorder:
            afwRGB.replaceSaturatedPixels(binnedImage, binnedImage,
                                          binnedImage,
                                          isrQaConfig.thumbnailSatBorder,
                                          stats.getValue(afwMath.MAX))

        asinhMap = afwRGB.AsinhMapping(low,
                                       isrQaConfig.thumbnailRange,
                                       Q=isrQaConfig.thumbnailQ)
        rgbImage = asinhMap.makeRgbImage(binnedImage)

        return rgbImage
Ejemplo n.º 8
0
    def __init__(self, vmin=None, vmax=None, clip=False, minimum=0, dataRange=1, Q=8):
        Normalize.__init__(self, vmin, vmax, clip)

        self.mapping = afwRgb.AsinhMapping(minimum, dataRange, Q)