我正在尝试使用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的幂”。我不知道这意味着什么,代码应该完美地工作。有什么帮助吗?
答案 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);
}
}