def makeSpatialKernel(self, order): basicGaussian1 = afwMath.GaussianFunction2D(2., 2., 0.) basicKernel1 = afwMath.AnalyticKernel(self.ksize, self.ksize, basicGaussian1) basicGaussian2 = afwMath.GaussianFunction2D(5., 3., 0.5 * num.pi) basicKernel2 = afwMath.AnalyticKernel(self.ksize, self.ksize, basicGaussian2) basisList = [] basisList.append(basicKernel1) basisList.append(basicKernel2) basisList = ipDiffim.renormalizeKernelList(basisList) spatialKernelFunction = afwMath.PolynomialFunction2D(order) spatialKernel = afwMath.LinearCombinationKernel( basisList, spatialKernelFunction) kCoeffs = [ [ 0.0 for x in range(1, spatialKernelFunction.getNParameters() + 1) ], [ 0.01 * x for x in range(1, spatialKernelFunction.getNParameters() + 1) ] ] kCoeffs[0][ 0] = 1.0 # it does not vary spatially; constant across image spatialKernel.setSpatialParameters(kCoeffs) return spatialKernel
def makeSpatialKernel(self, order): basicGaussian1 = afwMath.GaussianFunction2D(2., 2., 0.) basicKernel1 = afwMath.AnalyticKernel(self.ksize, self.ksize, basicGaussian1) basicGaussian2 = afwMath.GaussianFunction2D(5., 3., 0.5 * num.pi) basicKernel2 = afwMath.AnalyticKernel(self.ksize, self.ksize, basicGaussian2) basisList = afwMath.KernelList() basisList.append(basicKernel1) basisList.append(basicKernel2) basisList = afwMath.KernelList(ipDiffim.renormalizeKernelList(basisList)) spatialKernelFunction = afwMath.PolynomialFunction2D(order) spatialKernel = afwMath.LinearCombinationKernel(basisList, spatialKernelFunction) kCoeffs = [[0.0 for x in range(1,spatialKernelFunction.getNParameters()+1)], [0.01 * x for x in range(1,spatialKernelFunction.getNParameters()+1)]] kCoeffs[0][0] = 1.0 # it does not vary spatially; constant across image spatialKernel.setSpatialParameters(kCoeffs) return spatialKernel
def testRenormalize(self): # inputs gauss1 = afwMath.GaussianFunction2D(2, 2) gauss2 = afwMath.GaussianFunction2D(3, 4) gauss3 = afwMath.GaussianFunction2D(0.2, 0.25) gaussKernel1 = afwMath.AnalyticKernel(self.kSize, self.kSize, gauss1) gaussKernel2 = afwMath.AnalyticKernel(self.kSize, self.kSize, gauss2) gaussKernel3 = afwMath.AnalyticKernel(self.kSize, self.kSize, gauss3) kimage1 = afwImage.ImageD(gaussKernel1.getDimensions()) ksum1 = gaussKernel1.computeImage(kimage1, False) kimage2 = afwImage.ImageD(gaussKernel2.getDimensions()) ksum2 = gaussKernel2.computeImage(kimage2, False) kimage3 = afwImage.ImageD(gaussKernel3.getDimensions()) ksum3 = gaussKernel3.computeImage(kimage3, False) self.assertNotEqual(ksum1, 1.) self.assertNotEqual(ksum2, 1.) self.assertNotEqual(ksum3, 1.) # no constraints on first kernels norm self.assertNotEqual(num.sum(num.ravel(kimage2.getArray())**2), 1.) self.assertNotEqual(num.sum(num.ravel(kimage3.getArray())**2), 1.) basisListIn = [] basisListIn.append(gaussKernel1) basisListIn.append(gaussKernel2) basisListIn.append(gaussKernel3) # outputs basisListOut = ipDiffim.renormalizeKernelList(basisListIn) gaussKernel1 = basisListOut[0] gaussKernel2 = basisListOut[1] gaussKernel3 = basisListOut[2] ksum1 = gaussKernel1.computeImage(kimage1, False) ksum2 = gaussKernel2.computeImage(kimage2, False) ksum3 = gaussKernel3.computeImage(kimage3, False) self.assertAlmostEqual(ksum1, 1.) self.assertAlmostEqual(ksum2, 0.) self.assertAlmostEqual(ksum3, 0.) # no constraints on first kernels norm self.assertAlmostEqual(num.sum(num.ravel(kimage2.getArray())**2), 1.) self.assertAlmostEqual(num.sum(num.ravel(kimage3.getArray())**2), 1.)