2011-04-10 103 views
2

我试图在频域实现傅里叶变换。 我相应地使用了getOptimalDFTSize,并且我复制了更大图像中适合于傅里叶变换的图像和蒙版。我使用了here的示例代码作为参考。
现在,我必须分开实部和虚部,并且将图像虚部与虚部作像素乘法运算,对于真实部分也是如此。但是当我尝试这样做时,我得到以下错误信息:频域傅里叶变换opencv

OpenCV Error: Assertion failed (type == srcB.type() && srcA.size() == srcB.size()) in mulSpectrums, file /build/buildd/opencv-2.1.0/src/cxcore/cxdxt.cpp, line 1855 /build/buildd/opencv-2.1.0/src/cxcore/cxdxt.cpp:1855: error: (-215) type == srcB.type() && srcA.size() == srcB.size() in function mulSpectrums

的代码如下:

//fourier transfromation of real and imaginary part 
Mat complex_image, real_image, complex_mask, real_mask; 

cv::dft(new_image, complex_image, DFT_COMPLEX_OUTPUT); 
cv::dft(new_image, real_image, DFT_REAL_OUTPUT); 

cv::dft(new_mask, complex_mask, DFT_COMPLEX_OUTPUT); 
cv::dft(new_mask, real_mask, DFT_REAL_OUTPUT); 



//pixelwise multiplication 
Mat multiplied_complex, multiplied_real; 
cv::mulSpectrums(complex_image, complex_mask, multiplied_complex, DFT_COMPLEX_OUTPUT); 
cv::mulSpectrums(real_image, real_mask, multiplied_real, DFT_REAL_OUTPUT); 

我在做什么错在这里?

回答

5

图像和蒙版应该有相同的大小(宽度和高度)和(最可能这是问题)类型。所以如果它是不同的类型,你需要转换它们中的一个,使它们具有相同的类型。

+0

该类型没问题,问题出在尺寸或面具上。我使用了一个公式,类似于我用来计算图像大小的公式,而不是这样做:'dft_size_mask = dft_size_image;'Thx :) – mobearette 2011-04-10 15:14:05