Я работаю над графическим исполнением частотной фильтрации изображения. Мой код отлично работает на CPU (я использовал что-то вроде this), но я потратил целый день, пытаясь сделать ту же работу на GPU - без успеха. Я хочу применить фильтр в частотной области, поэтому мне нужен полный (сложный) результат прямого преобразования. Я прочитал, что мне нужно передать две сложные матрицы (src и dst) для пересылки dft для получения полного спектра (32FC2). Тем не менее, я не получаю то же изображение после обратного преобразования (возвращаемое изображение очень искажено).OpenCV gpu :: dft искаженное изображение после обратного преобразования
Мой код (с ближайшим результатом):
gpu.img1 = gpu::GpuMat(vrH, imgWidth, CV_32FC2);
gpu.img2 = gpu::GpuMat(vrH, imgWidth, CV_32FC2);
gpu.img4 = gpu::GpuMat(vrH, imgWidth, CV_32FC1);
gpu.img5 = gpu::GpuMat(vrH, imgWidth, CV_8UC1);
Mat planes[] = {imageIn, Mat::zeros(imageIn.size(), CV_32FC1)};
merge(planes, 2, imageIn);
gpu::Stream stream;
gpu.img1.upload(imageIn);
gpu::dft(gpu.img1, gpu.img2, gpu.img1.size(), 0, stream);
gpu::dft(gpu.img2, gpu.img4, gpu.img1.size(), DFT_INVERSE | DFT_REAL_OUTPUT | DFT_SCALE, stream);
stream.enqueueConvert(gpu.img4, gpu.img5, CV_8U);
stream.waitForCompletion();
gpu.img5.download(imageOut);
namedWindow("processed",1); imshow("processed", imageOut); waitKey(1000);
Ваша помощь и предложения будут оценены.