Loading [MathJax]/extensions/tex2jax.js
LSSTApplications  17.0+124,17.0+14,17.0+73,18.0.0+37,18.0.0+80,18.0.0-4-g68ffd23+4,18.1.0-1-g0001055+12,18.1.0-1-g03d53ef+5,18.1.0-1-g1349e88+55,18.1.0-1-g2505f39+44,18.1.0-1-g5315e5e+4,18.1.0-1-g5e4b7ea+14,18.1.0-1-g7e8fceb+4,18.1.0-1-g85f8cd4+48,18.1.0-1-g8ff0b9f+4,18.1.0-1-ga2c679d+1,18.1.0-1-gd55f500+35,18.1.0-10-gb58edde+2,18.1.0-11-g0997b02+4,18.1.0-13-gfe4edf0b+12,18.1.0-14-g259bd21+21,18.1.0-19-gdb69f3f+2,18.1.0-2-g5f9922c+24,18.1.0-2-gd3b74e5+11,18.1.0-2-gfbf3545+32,18.1.0-26-g728bddb4+5,18.1.0-27-g6ff7ca9+2,18.1.0-3-g52aa583+25,18.1.0-3-g8ea57af+9,18.1.0-3-gb69f684+42,18.1.0-3-gfcaddf3+6,18.1.0-32-gd8786685a,18.1.0-4-gf3f9b77+6,18.1.0-5-g1dd662b+2,18.1.0-5-g6dbcb01+41,18.1.0-6-gae77429+3,18.1.0-7-g9d75d83+9,18.1.0-7-gae09a6d+30,18.1.0-9-gc381ef5+4,w.2019.45
LSSTDataManagementBasePackage
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
estimateBackground.py
1 #!/usr/bin/env python
2 
3 #
4 # This file is part of afw.
5 #
6 # Developed for the LSST Data Management System.
7 # This product includes software developed by the LSST Project
8 # (https://www.lsst.org).
9 # See the COPYRIGHT file at the top-level directory of this distribution
10 # for details of code ownership.
11 #
12 # This program is free software: you can redistribute it and/or modify
13 # it under the terms of the GNU General Public License as published by
14 # the Free Software Foundation, either version 3 of the License, or
15 # (at your option) any later version.
16 #
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
21 #
22 # You should have received a copy of the GNU General Public License
23 # along with this program. If not, see <https://www.gnu.org/licenses/>.
24 #
25 
26 import os
27 import lsst.utils
28 import lsst.afw.image as afwImage
29 import lsst.afw.math as afwMath
30 import lsst.afw.display as afwDisplay
31 
32 try:
33  display
34 except NameError:
35  display = not False
36 
37 afwDisplay.setDefaultMaskTransparency(75)
38 
39 
40 
41 
42 def getImage():
43  imagePath = os.path.join(lsst.utils.getPackageDir("afwdata"),
44  "DC3a-Sim", "sci", "v5-e0", "v5-e0-c011-a00.sci.fits")
45  return afwImage.MaskedImageF(imagePath)
46 
47 
48 def simpleBackground(image):
49  binsize = 128
50  nx = int(image.getWidth()/binsize) + 1
51  ny = int(image.getHeight()/binsize) + 1
52  bctrl = afwMath.BackgroundControl(nx, ny)
53 
54  bkgd = afwMath.makeBackground(image, bctrl)
55 
56  image -= bkgd.getImageF(afwMath.Interpolate.NATURAL_SPLINE)
57 
58  return bkgd
59 
60 
61 def complexBackground(image):
62  MaskPixel = afwImage.MaskPixel
63  binsize = 128
64  nx = int(image.getWidth()/binsize) + 1
65  ny = int(image.getHeight()/binsize) + 1
66 
68  sctrl.setNumSigmaClip(3)
69  sctrl.setNumIter(4)
70  sctrl.setAndMask(afwImage.Mask[MaskPixel].getPlaneBitMask(["INTRP",
71  "EDGE"]))
72  sctrl.setNoGoodPixelsMask(afwImage.Mask[MaskPixel].getPlaneBitMask("BAD"))
73  sctrl.setNanSafe(True)
74  if False:
75  sctrl.setWeighted(True)
76  sctrl.setCalcErrorFromInputVariance(True)
77 
78  bctrl = afwMath.BackgroundControl(nx, ny, sctrl, afwMath.MEANCLIP)
79 
80  bkgd = afwMath.makeBackground(image, bctrl)
81 
82  statsImage = bkgd.getStatsImage()
83  afwDisplay.Display(frame=3).mtv(statsImage.getVariance(), title="statsImage Variance")
84 
85  return bkgd
86 
87 
88 def main():
89  image = getImage()
90 
91  if display:
92  afwDisplay.Display(frame=0).mtv(image, title="Image")
93 
94  bkgd = simpleBackground(image)
95  image = getImage()
96  bkgd = complexBackground(image)
97 
98  if display:
99  afwDisplay.Display(frame=1).mtv(image, title="image")
100  afwDisplay.Display(frame=2).mtv(bkgd.getStatsImage(), title="background")
101 
102  order = 2
104  afwMath.ApproximateControl.CHEBYSHEV, order, order)
105  approx = bkgd.getApproximate(actrl)
106 
107  approx.getImage()
108  approx.getMaskedImage()
109  approx.getImage(order - 1)
110 
111 
112 
113 if __name__ == '__main__':
114  main()