emgu cv でフーリエ変換を使用して小さな実験を行っています。私の目的は、画像をフーリエ変換してから、逆フーリエ変換を再度行い、画像が表示されるかどうかを確認することです。数学的には、そうすべきです。
これは正しいと信じている私のコードです
Image<Gray, float> image = new Image<Gray, float>("c://box1.png");
IntPtr complexImage = CvInvoke.cvCreateImage(image.Size, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_32F, 2);
CvInvoke.cvSetZero(complexImage); // Initialize all elements to Zero
CvInvoke.cvSetImageCOI(complexImage, 1);
CvInvoke.cvCopy(image, complexImage, IntPtr.Zero);
CvInvoke.cvSetImageCOI(complexImage, 0);
Matrix<float> dft = new Matrix<float>(image.Rows, image.Cols, 2);
CvInvoke.cvDFT(complexImage, dft, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, 0);
Matrix<float> idft = new Matrix<float>(dft.Rows, dft.Cols, 2);
CvInvoke.cvDFT(dft, idft, Emgu.CV.CvEnum.CV_DXT.CV_DXT_INVERSE, 0);
IntPtr complexImage2 = CvInvoke.cvCreateImage(idft.Size, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 2);
CvInvoke.cvShowImage("picture", idft);
System.Threading.Thread.Sleep(99999); // to wait and see the picture
2 つの問題があります。
1- エラー : 「OpenCV: ソース イメージには 1、3、または 4 チャネルが必要です」というエラーが表示されます。これは IDFT に関連していると思いますが、解決できませんでした。
2-出力画像は表示されますが、残念ながら、入力された元の画像ではありません。表示されるものはすべて、プレーンなグレーの画像です。
ありがとう。