2011-04-10 102 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