이미지의 주파수 필터링을 GPU로 구현하고 있습니다. 내 코드는 CPU에서 훌륭하게 작동합니다 (저는 this과 같은 것을 사용했습니다).하지만 하루 종일 GPU에서 동일한 작업을하려고 노력했습니다. 성공하지 못했습니다. 따라서 주파수 도메인에서 필터를 적용하여 순방향 변환의 전체 (복잡한) 결과가 필요합니다. 전체 스펙트럼 (32FC2)을 얻기 위해 dft를 전달하기 위해 두 개의 복잡한 행렬 (src 및 dst)을 전달해야한다는 것을 읽었습니다. 그러나, 나는 역변환 후에 동일한 이미지를 얻지 못한다. (리턴 된 이미지는 매우 왜곡된다.) (가장 가까운 결과)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);
여러분의 도움과 제안이 많이 감사합니다.