如何在 2D 矢量中使用开放式 DFT

how to use open dft in 2d vector

本文关键字:开放式 DFT 2D      更新时间:2023-10-16
我想

问一下如何使用opencv中的dft函数来用2d向量进行傅里叶变换。

我的代码有错误...

谢谢大家

    //2d vector in here v1 and v2 
    //vector size is 1000*1000
    //i have to do about 600 images in this process 
    for (int k = 0; k < 600; k++){
        vector <vector <complex < double >>> v1(InputWidth, vector<complex < double >>(InputHeight));
        vector <vector <complex < double >>> v2(InputWidth, vector<complex < double >>(InputHeight));
        for (int i = 0; i < InputWidth; i++) {
            int tempIndex = i*InputHeight;
            for (int j = 0; j < InputHeight; j++)
            {
                int Correction_value = ProjectionImage[k]->data.s[tempIndex + j] * meshGrid[tempIndex + j];
                ProjectionImage[k]->data.s[tempIndex + j] = Correction_value;
                //v1 is an image
                v1[i][j] = Correction_value;
            }
        }
        //error happen in here
        dft(v1, v2, DFT_COMPLEX_OUTPUT);
        //do frequency filter
        for (int i = 0; i < InputWidth; i++) {
            for (int j = 0; j < InputHeight; j++)
            {
                v2[i][j] *= filter_2D[i][j];
            }
        }
        //inverse fourier transform
        idft(v2, v1, DFT_COMPLEX_OUTPUT);
   }

错误信息

这里发生的事情是,你创建了一个指向其他向量的指针std::vector。这些其他矢量包含像素数据。但这些数据不一定是连续的。图像的每一行(或每列(都存储在其自己的内存段中。OpenCV希望所有像素都在同一内存段中。

简而言之,只需将您的像素数据复制到OpenCV支持的形式,例如cv::Mat