为什么 AForge.net 在 FFT 自相关的情况下给出不同的输出?
Why is AForge.net giving a different output in case of FFT Auto-correlation?
看到这个。
我想使用 AForge.net 框架获得相同的结果。输出应匹配以下内容:
输出似乎没有按预期出现:
为什么 AForge.net 中的输出不同?
。
源代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Bitmap image = (Bitmap)Bitmap.FromFile(@"StandardImage\lena.png");
Bitmap conv = new Bitmap(image.Width, image.Height, image.PixelFormat);
ComplexImage cImage = ComplexImage.FromBitmap(image);
cImage.ForwardFourierTransform();
ComplexImage cKernel = ComplexImage.FromBitmap(image);
cImage.ForwardFourierTransform();
ComplexImage convOut = ComplexImage.FromBitmap(conv);
convOut.ForwardFourierTransform();
for (int y = 0; y < cImage.Height; y++)
{
for (int x = 0; x < cImage.Width; x++)
{
convOut.Data[x, y] = cImage.Data[x, y] * cKernel.Data[x, y];
}
}
convOut.BackwardFourierTransform();
Bitmap bbbb = convOut.ToBitmap();
pictureBox1.Image = bbbb;
}
}
你似乎没有在 Aforge 中使用高斯内核,
不管怎样,图书馆有一个与高斯卷积的方法:
int w=4,h=11;
GaussianBlur filter = new GaussianBlur( w, h );
// apply the filter
filter.ApplyInPlace( image );
试试吧,输出应该和其他的一样。
主要问题是
ComplexImage cKernel = ComplexImage.FromBitmap(image);
//cImage.ForwardFourierTransform(); //<--- This line should be FFT of cKernel
cKernel.ForwardFourierTransform();
这将解决您在结果图像中提到的问题,但如果您想要获得与右下角图像相似的图像,您需要进行一些归一化以增加像素强度。
更新:
右下角的图像实际上是傅里叶图像,所以我认为我们应该删除 BFF。
//convOut.BackwardFourierTransform();
看到这个
我想使用 AForge.net 框架获得相同的结果。输出应匹配以下内容:
输出似乎没有按预期出现:
为什么 AForge.net 中的输出不同?
。
源代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Bitmap image = (Bitmap)Bitmap.FromFile(@"StandardImage\lena.png");
Bitmap conv = new Bitmap(image.Width, image.Height, image.PixelFormat);
ComplexImage cImage = ComplexImage.FromBitmap(image);
cImage.ForwardFourierTransform();
ComplexImage cKernel = ComplexImage.FromBitmap(image);
cImage.ForwardFourierTransform();
ComplexImage convOut = ComplexImage.FromBitmap(conv);
convOut.ForwardFourierTransform();
for (int y = 0; y < cImage.Height; y++)
{
for (int x = 0; x < cImage.Width; x++)
{
convOut.Data[x, y] = cImage.Data[x, y] * cKernel.Data[x, y];
}
}
convOut.BackwardFourierTransform();
Bitmap bbbb = convOut.ToBitmap();
pictureBox1.Image = bbbb;
}
}
你似乎没有在 Aforge 中使用高斯内核, 不管怎样,图书馆有一个与高斯卷积的方法:
int w=4,h=11;
GaussianBlur filter = new GaussianBlur( w, h );
// apply the filter
filter.ApplyInPlace( image );
试试吧,输出应该和其他的一样。
主要问题是
ComplexImage cKernel = ComplexImage.FromBitmap(image);
//cImage.ForwardFourierTransform(); //<--- This line should be FFT of cKernel
cKernel.ForwardFourierTransform();
这将解决您在结果图像中提到的问题,但如果您想要获得与右下角图像相似的图像,您需要进行一些归一化以增加像素强度。
更新:
右下角的图像实际上是傅里叶图像,所以我认为我们应该删除 BFF。
//convOut.BackwardFourierTransform();