void build_psf_fft(int width, int height, float ffwhm_x) { PSFR = Mat::zeros(ImageR.size(), CV_32F); int hs = fwhm_x * 0.3; Mat kernelX = getGaussianKernel(hs * 10, ffwhm_x); Mat kernelY = getGaussianKernel(hs * 10, ffwhm_x); Mat kernel = kernelX * kernelY.t(); //Mat kernel; //Mat kernel; //resize(psf_file, kernel, Size(0, 0), 23.0/fwhm_x, 23.0/fwhm_x, INTER_AREA); hs = kernel.cols; int dy = height - hs; int dx = width - hs; pow(kernel, power/100.0, kernel); imshow("kernel", kernel * 235); copyMakeBorder(kernel, PSFR, dy/2, dy-(dy/2), dx/2, dx-(dx/2), BORDER_CONSTANT, Scalar::all(0.0)); //imshow("kernel", PSFR); PSFR.convertTo(PSFR, CV_32F); PSFI = Mat::zeros(PSFR.size(), CV_32F); Mat psf_planes[] = {PSFR, PSFI}; gPSFR.upload(PSFR); gPSFI.upload(PSFI); Scalar psum = cuda::sum(gPSFR); cuda::multiply(gPSFR, 1.0 / psum[0], gPSFR); psum = cuda::sum(gPSFR); Mat complexPSF; cuda::GpuMat gpPSF; merge(psf_planes, 2, complexPSF); gpPSF.upload(complexPSF); cuda::dft(gpPSF, gpPSF, gpPSF.size()); gpPSF.download(complexPSF); split(complexPSF, psf_planes); //imshow("fft", PSFR); }