Aforge:使用C#进行傅立叶变换

时间:2013-03-25 16:23:49

标签: c# fft aforge

我正在尝试使用Aforge进行傅立叶变换。根据文档,此代码应该工作。

Bitmap a1 = new Bitmap("c://z3.bmp");
ComplexImage complexImage1 = ComplexImage.FromBitmap(a1);
complexImage1.ForwardFourierTransform();
Bitmap fourierImage = complexImage1.ToBitmap();
fourierImage.Save("c:/z2.bmp");

出于某种原因,出现了一个奇怪的错误:“图像的宽度和高度应该是2的幂”。我不知道这意味着什么,代码应该完美地工作。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

嗯,根据错误,您将不得不使用widht和height为2的幂的图像。

通过用零填充来放大你的图像,这样在调用傅里叶变换之前,它的高度和宽度正好是(2,4,8,16,256,512,1024,...)。

标准快速傅立叶算法仅适用于这些维度。如果图像不匹配,某些实现会在内部放大图像,看起来像Aforge没有。

我认为Aforge使用标准的.net图形类,所以你可以这样做:

    using (Bitmap large = new Bitmap(widthPOWER_OF_2, heightPOWER_OF_2, PixelFormat.YOUR_FORMAT))
    using (Graphics largeGraphics = Graphics.FromImage(large))
    {
        largeGraphics.DrawImage(smallbitmap, 0 , 0); 
     }
   }