def testGrow(self): """Test growing a footprint""" x0, y0 = 20, 20 width, height = 20, 30 foot1 = afwDetect.Footprint(afwGeom.Box2I(afwGeom.Point2I(x0, y0), afwGeom.Extent2I(width, height)), afwGeom.Box2I(afwGeom.Point2I(0, 0), afwGeom.Extent2I(100, 100))) # Add some peaks and check that they get copied into the new grown footprint foot1.addPeak(20, 20, 1) foot1.addPeak(30, 35, 2) foot1.addPeak(25, 45, 3) self.assertEqual(len(foot1.getPeaks()), 3) bbox1 = foot1.getBBox() self.assertEqual(bbox1.getMinX(), x0) self.assertEqual(bbox1.getMaxX(), x0 + width - 1) self.assertEqual(bbox1.getWidth(), width) self.assertEqual(bbox1.getMinY(), y0) self.assertEqual(bbox1.getMaxY(), y0 + height - 1) self.assertEqual(bbox1.getHeight(), height) ngrow = 5 for isotropic in (True, False): foot2 = afwDetect.growFootprint(foot1, ngrow, isotropic) # Check that peaks got copied into grown footprint self.assertEqual(len(foot2.getPeaks()), 3) for peak in foot2.getPeaks(): self.assertTrue((peak.getIx(), peak.getIy()) in [(20, 20), (30, 35), (25, 45)]) bbox2 = foot2.getBBox() if False and display: idImage = afwImage.ImageU(width, height) idImage.set(0) i = 1 for foot in [foot1, foot2]: foot.insertIntoImage(idImage, i) i += 1 metricImage = afwImage.ImageF("foo.fits") ds9.mtv(metricImage, frame=1) ds9.mtv(idImage) # check bbox2 self.assertEqual(bbox2.getMinX(), x0 - ngrow) self.assertEqual(bbox2.getWidth(), width + 2*ngrow) self.assertEqual(bbox2.getMinY(), y0 - ngrow) self.assertEqual(bbox2.getHeight(), height + 2*ngrow) # Check that region was preserved self.assertEqual(foot1.getRegion(), foot2.getRegion())
def testGrow(self): """Test growing a footprint""" x0, y0 = 20, 20 width, height = 20, 30 foot1 = afwDetect.Footprint( afwGeom.Box2I(afwGeom.Point2I(x0, y0), afwGeom.Extent2I(width, height)), afwGeom.Box2I(afwGeom.Point2I(0, 0), afwGeom.Extent2I(100, 100))) bbox1 = foot1.getBBox() self.assertEqual(bbox1.getMinX(), x0) self.assertEqual(bbox1.getMaxX(), x0 + width - 1) self.assertEqual(bbox1.getWidth(), width) self.assertEqual(bbox1.getMinY(), y0) self.assertEqual(bbox1.getMaxY(), y0 + height - 1) self.assertEqual(bbox1.getHeight(), height) ngrow = 5 for isotropic in (True, False): foot2 = afwDetect.growFootprint(foot1, ngrow, isotropic) # Check that the grown footprint is normalized self.assertTrue(foot2.isNormalized()) # Check that the grown footprint is bigger than the original self.assertGreater(foot2.getArea(), foot1.getArea()) bbox2 = foot2.getBBox() if False and display: idImage = afwImage.ImageU(width, height) idImage.set(0) i = 1 for foot in [foot1, foot2]: foot.insertIntoImage(idImage, i) i += 1 metricImage = afwImage.ImageF("foo.fits") ds9.mtv(metricImage, frame=1) ds9.mtv(idImage) # check bbox2 self.assertEqual(bbox2.getMinX(), x0 - ngrow) self.assertEqual(bbox2.getWidth(), width + 2 * ngrow) self.assertEqual(bbox2.getMinY(), y0 - ngrow) self.assertEqual(bbox2.getHeight(), height + 2 * ngrow) # Check that region was preserved self.assertEqual(foot1.getRegion(), foot2.getRegion())
def testGrow(self): """Test growing a footprint""" x0, y0 = 20, 20 width, height = 20, 30 foot1 = afwDetect.Footprint(afwGeom.Box2I(afwGeom.Point2I(x0, y0), afwGeom.Extent2I(width, height)), afwGeom.Box2I(afwGeom.Point2I(0, 0), afwGeom.Extent2I(100, 100))) bbox1 = foot1.getBBox() self.assertEqual(bbox1.getMinX(), x0) self.assertEqual(bbox1.getMaxX(), x0 + width - 1) self.assertEqual(bbox1.getWidth(), width) self.assertEqual(bbox1.getMinY(), y0) self.assertEqual(bbox1.getMaxY(), y0 + height - 1) self.assertEqual(bbox1.getHeight(), height) ngrow = 5 for isotropic in (True, False): foot2 = afwDetect.growFootprint(foot1, ngrow, isotropic) # Check that the grown footprint is normalized self.assertTrue(foot2.isNormalized()) # Check that the grown footprint is bigger than the original self.assertGreater(foot2.getArea(), foot1.getArea()) bbox2 = foot2.getBBox() if False and display: idImage = afwImage.ImageU(width, height) idImage.set(0) i = 1 for foot in [foot1, foot2]: foot.insertIntoImage(idImage, i) i += 1 metricImage = afwImage.ImageF("foo.fits") ds9.mtv(metricImage, frame=1) ds9.mtv(idImage) # check bbox2 self.assertEqual(bbox2.getMinX(), x0 - ngrow) self.assertEqual(bbox2.getWidth(), width + 2*ngrow) self.assertEqual(bbox2.getMinY(), y0 - ngrow) self.assertEqual(bbox2.getHeight(), height + 2*ngrow) # Check that region was preserved self.assertEqual(foot1.getRegion(), foot2.getRegion())
def testGrow2(self): """Grow some more interesting shaped Footprints. Informative with display, but no numerical tests""" ds = afwDetect.FootprintSet(self.ms, afwDetect.Threshold(10), "OBJECT") idImage = afwImage.ImageU(self.ms.getDimensions()) idImage.set(0) i = 1 for foot in ds.getFootprints()[0:1]: gfoot = afwDetect.growFootprint(foot, 3, False) gfoot.insertIntoImage(idImage, i) i += 1 if display: ds9.mtv(self.ms, frame=0) ds9.mtv(idImage, frame=1)
def testGrow2(self): """Grow some more interesting shaped Footprints. Informative with display, but no numerical tests""" #Can't set mask plane as the image is not a masked image. ds = afwDetect.makeFootprintSet(self.im, afwDetect.Threshold(10)) idImage = afwImage.ImageU(self.im.getDimensions()) idImage.set(0) i = 1 for foot in ds.getFootprints()[0:1]: gfoot = afwDetect.growFootprint(foot, 3, False) gfoot.insertIntoImage(idImage, i) i += 1 if display: ds9.mtv(self.im, frame=0) ds9.mtv(idImage, frame=1)
def defectListFromFootprintList(fpList, growFootprints=1): """Compute a defect list from a footprint list, optionally growing the footprints @param[in] fpList footprint list @param[in] growFootprints amount by which to grow footprints of detected regions @return meas.algorithms.DefectListT """ defectList = measAlg.DefectListT() for fp in fpList: if growFootprints > 0: # if "True", growing requires a convolution # if "False", its faster fpGrow = afwDetection.growFootprint(fp, growFootprints, False) else: fpGrow = fp for bbox in afwDetection.footprintToBBoxList(fpGrow): defect = measAlg.Defect(bbox) defectList.push_back(defect) return defectList
def testGrowEmpty(self): """Check that growing an empty Footprint doesn't fail an assertion; #1186""" fp = afwDetect.Footprint() fp.setRegion(afwGeom.Box2I(afwGeom.Point2I(0, 0), afwGeom.Extent2I(10, 10))) afwDetect.growFootprint(fp, 5)