0

我正在尝试使用 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 的幂。” 我不知道这意味着什么,代码应该可以完美运行。请问有什么帮助吗?

4

1 回答 1

2

好吧,根据错误,您将不得不使用宽度和高度是 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); 
     }
   }
于 2013-03-25T16:27:09.703 回答