LSST Applications  21.0.0+04719a4bac,21.0.0-1-ga51b5d4+ae94e5adf4,21.0.0-10-g2408eff+ad7fe00a3b,21.0.0-10-g560fb7b+5d30037bff,21.0.0-10-gcf60f90+7fd8e8fd04,21.0.0-11-g25eff31+491f1498e8,21.0.0-11-gd78879e+d13a45ff19,21.0.0-12-g1e69a3f+69d54d99d8,21.0.0-17-g6590b197+c8c705a94e,21.0.0-2-g103fe59+29086b68f8,21.0.0-2-g1367e85+d793a9824f,21.0.0-2-g45278ab+04719a4bac,21.0.0-2-g5242d73+d793a9824f,21.0.0-2-g7f82c8f+7178d1fb8b,21.0.0-2-g8f08a60+fd0b970de5,21.0.0-2-g8faa9b5+3b24369756,21.0.0-2-ga326454+7178d1fb8b,21.0.0-2-gde069b7+ca45a81b40,21.0.0-2-gecfae73+3609a557ba,21.0.0-2-gfc62afb+d793a9824f,21.0.0-22-g2a5702db6+f385fa6f38,21.0.0-3-g357aad2+673ab9f056,21.0.0-3-g4be5c26+d793a9824f,21.0.0-3-g65f322c+45176dc65e,21.0.0-3-g7d9da8d+3b24369756,21.0.0-3-ge02ed75+d05e6d1be4,21.0.0-4-g591bb35+d05e6d1be4,21.0.0-4-g65b4814+5d30037bff,21.0.0-4-gccdca77+a631590478,21.0.0-4-ge8a399c+7f1b116a8b,21.0.0-5-gb7b9a9f+d793a9824f,21.0.0-5-gd00fb1e+de3bd29da1,21.0.0-55-g0be6b205+66ae927d20,21.0.0-6-g2d4f3f3+04719a4bac,21.0.0-7-g04766d7+510a52a951,21.0.0-7-g98eecf7+adb4d61a8d,21.0.0-9-g39e06b5+d05e6d1be4,master-gac4afde19b+d05e6d1be4,w.2021.12
LSST Data Management Base Package
Public Member Functions | Public Attributes | List of all members
lsst.afw.display.rgb.rgbContinued.LinearMapping Class Reference
Inheritance diagram for lsst.afw.display.rgb.rgbContinued.LinearMapping:
lsst.afw.display.rgb.rgbContinued.Mapping lsst.afw.display.rgb.rgbContinued.ZScaleMapping

Public Member Functions

def __init__ (self, minimum=None, maximum=None, image=None)
 
def mapIntensityToUint8 (self, intensity)
 
def makeRgbImage (self, imageR=None, imageG=None, imageB=None, xSize=None, ySize=None, rescaleFactor=None)
 
def intensity (self, imageR, imageG, imageB)
 

Public Attributes

 maximum
 
 minimum
 

Detailed Description

A linear map of red, blue, green intensities into uint8 values

Parameters
----------
minimum : `float` or sequence of `float`
    Intensity that should be mapped to black. If an array, has three
    elements for R, G, B.
maximum : `float`
    Intensity that should be mapped to white
image
    Image to estimate minimum/maximum if not explicitly set

Definition at line 213 of file rgbContinued.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.afw.display.rgb.rgbContinued.LinearMapping.__init__ (   self,
  minimum = None,
  maximum = None,
  image = None 
)

Reimplemented in lsst.afw.display.rgb.rgbContinued.ZScaleMapping.

Definition at line 227 of file rgbContinued.py.

227  def __init__(self, minimum=None, maximum=None, image=None):
228  if minimum is None or maximum is None:
229  assert image is not None, "You must provide an image if you don't set both minimum and maximum"
230 
231  stats = afwMath.makeStatistics(image, afwMath.MIN | afwMath.MAX)
232  if minimum is None:
233  minimum = stats.getValue(afwMath.MIN)
234  if maximum is None:
235  maximum = stats.getValue(afwMath.MAX)
236 
237  Mapping.__init__(self, minimum, image)
238  self.maximum = maximum
239 
240  if maximum is None:
241  self._range = None
242  else:
243  assert maximum - minimum != 0, "minimum and maximum values must not be equal"
244  self._range = float(maximum - minimum)
245 
Statistics makeStatistics(lsst::afw::image::Image< Pixel > const &img, lsst::afw::image::Mask< image::MaskPixel > const &msk, int const flags, StatisticsControl const &sctrl=StatisticsControl())
Handle a watered-down front-end to the constructor (no variance)
Definition: Statistics.h:354

Member Function Documentation

◆ intensity()

def lsst.afw.display.rgb.rgbContinued.Mapping.intensity (   self,
  imageR,
  imageG,
  imageB 
)
inherited
Return the total intensity from the red, blue, and green intensities

Notes
-----
This is a naive computation, and may be overridden by subclasses

Definition at line 160 of file rgbContinued.py.

160  def intensity(self, imageR, imageG, imageB):
161  """Return the total intensity from the red, blue, and green intensities
162 
163  Notes
164  -----
165  This is a naive computation, and may be overridden by subclasses
166  """
167  return computeIntensity(imageR, imageG, imageB)
168 
def computeIntensity(imageR, imageG=None, imageB=None)
Definition: rgbContinued.py:30

◆ makeRgbImage()

def lsst.afw.display.rgb.rgbContinued.Mapping.makeRgbImage (   self,
  imageR = None,
  imageG = None,
  imageB = None,
  xSize = None,
  ySize = None,
  rescaleFactor = None 
)
inherited
Convert 3 arrays, imageR, imageG, and imageB into a numpy RGB image

imageR : `lsst.afw.image.Image` or `numpy.ndarray`, (Nx, Ny)
    Image to map to red (if `None`, use the image passed to the ctor)
imageG : `lsst.afw.image.Image` or `numpy.ndarray`, (Nx, Ny), optional
    Image to map to green (if `None`, use imageR)
imageB : `lsst.afw.image.Image` or `numpy.ndarray`, (Nx, Ny), optional
    Image to map to blue (if `None`, use imageR)
xSize : `int`, optional
    Desired width of RGB image. If ``ySize`` is `None`, preserve aspect ratio
ySize : `int`, optional
    Desired height of RGB image
rescaleFactor : `float`, optional
    Make size of output image ``rescaleFactor*size`` of the input image

Definition at line 98 of file rgbContinued.py.

99  xSize=None, ySize=None, rescaleFactor=None):
100  """Convert 3 arrays, imageR, imageG, and imageB into a numpy RGB image
101 
102  imageR : `lsst.afw.image.Image` or `numpy.ndarray`, (Nx, Ny)
103  Image to map to red (if `None`, use the image passed to the ctor)
104  imageG : `lsst.afw.image.Image` or `numpy.ndarray`, (Nx, Ny), optional
105  Image to map to green (if `None`, use imageR)
106  imageB : `lsst.afw.image.Image` or `numpy.ndarray`, (Nx, Ny), optional
107  Image to map to blue (if `None`, use imageR)
108  xSize : `int`, optional
109  Desired width of RGB image. If ``ySize`` is `None`, preserve aspect ratio
110  ySize : `int`, optional
111  Desired height of RGB image
112  rescaleFactor : `float`, optional
113  Make size of output image ``rescaleFactor*size`` of the input image
114  """
115  if imageR is None:
116  if self._image is None:
117  raise RuntimeError(
118  "You must provide an image (or pass one to the constructor)")
119  imageR = self._image
120 
121  if imageG is None:
122  imageG = imageR
123  if imageB is None:
124  imageB = imageR
125 
126  imageRGB = [imageR, imageG, imageB]
127  for i, c in enumerate(imageRGB):
128  if hasattr(c, "getImage"):
129  c = imageRGB[i] = c.getImage()
130  if hasattr(c, "getArray"):
131  imageRGB[i] = c.getArray()
132 
133  if xSize is not None or ySize is not None:
134  assert rescaleFactor is None, "You may not specify a size and rescaleFactor"
135  h, w = imageRGB[0].shape
136  if ySize is None:
137  ySize = int(xSize*h/float(w) + 0.5)
138  elif xSize is None:
139  xSize = int(ySize*w/float(h) + 0.5)
140 
141  size = (ySize, xSize) # n.b. y, x order for scipy
142  elif rescaleFactor is not None:
143  size = float(rescaleFactor) # an int is intepreted as a percentage
144  else:
145  size = None
146 
147  if size is not None:
148  try:
149  import scipy.misc
150  except ImportError as e:
151  raise RuntimeError(
152  f"Unable to rescale as scipy.misc is unavailable: {e}")
153 
154  for i, im in enumerate(imageRGB):
155  imageRGB[i] = scipy.misc.imresize(
156  im, size, interp='bilinear', mode='F')
157 
158  return np.dstack(self._convertImagesToUint8(*imageRGB)).astype(np.uint8)
159 

◆ mapIntensityToUint8()

def lsst.afw.display.rgb.rgbContinued.LinearMapping.mapIntensityToUint8 (   self,
  intensity 
)
Return an array which, when multiplied by an image, returns that
image mapped to the range of a uint8, [0, 255] (but not converted to uint8)

The intensity is assumed to have had ``minimum`` subtracted (as that
can be done per-band)

Reimplemented from lsst.afw.display.rgb.rgbContinued.Mapping.

Definition at line 246 of file rgbContinued.py.

246  def mapIntensityToUint8(self, intensity):
247  """Return an array which, when multiplied by an image, returns that
248  image mapped to the range of a uint8, [0, 255] (but not converted to uint8)
249 
250  The intensity is assumed to have had ``minimum`` subtracted (as that
251  can be done per-band)
252  """
253  with np.errstate(invalid='ignore', divide='ignore'): # n.b. np.where can't and doesn't short-circuit
254  return np.where(intensity <= 0, 0,
255  np.where(intensity >= self._range,
256  self._uint8Max/intensity, self._uint8Max/self._range))
257 
258 

Member Data Documentation

◆ maximum

lsst.afw.display.rgb.rgbContinued.LinearMapping.maximum

Definition at line 238 of file rgbContinued.py.

◆ minimum

lsst.afw.display.rgb.rgbContinued.Mapping.minimum
inherited

Definition at line 95 of file rgbContinued.py.


The documentation for this class was generated from the following file: