【发布时间】:2015-05-27 09:36:19
【问题描述】:
我已经看过这个问题了 fftshift/ifftshift C/C++ source code
我正在尝试从 matlab 实现 fftshift
这是一维数组的代码来自 matlab 函数
numDims = ndims(x);
idx = cell(1, numDims);
for k = 1:numDims
m = size(x, k);
p = ceil(m/2);
idx{k} = [p+1:m 1:p];
end
y = x(idx{:});
我的 c++/openCV 代码是,fftshift 基本上做的是交换某个枢轴位置的值。
因为我似乎无法理解如何在 opencv 中为复数构建矩阵。
这里说
http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#dft
CCS(复共轭对称
我认为将复数拆分为实数和虚数并交换它们会更容易。然后合并回一个矩阵。
cv::vector<float> distanceF (f.size());
//ff = fftshift(ff);
cv::Mat ff;
cv::dft(distanceF, ff, cv::DFT_COMPLEX_OUTPUT);
//Make place for both the complex and the real values
cv::Mat planes[] = {cv::Mat::zeros(distanceF.size(),1, CV_32F), cv::Mat::zeros(distanceF.size(),1, CV_32F)};
cv::split(ff, planes); // planes[0] = Re(DFT(I), planes[1] = Im(DFT(I))
int numDims = ff.dims;
for (int i = 0; i < numDims; i++)
{
int m = ff.rows;
int p = ceil(m/2);
}
我的问题是,由于我对 DFT 的输入是 vector<float>,我似乎无法创建平面垫来拆分复数?
你能想出一种更好的方法来交换 cv::mat 数据结构中的值吗?
【问题讨论】:
标签: c++ matlab opencv image-processing