[英]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;
}
}
主要的問題是
ComplexImage cKernel = ComplexImage.FromBitmap(image);
//cImage.ForwardFourierTransform(); //<--- This line should be FFT of cKernel
cKernel.ForwardFourierTransform();
這樣可以解決您在生成的圖像中提到的問題,但是如果要獲得與右下角圖像相似的圖像,則需要進行一些歸一化處理以增加像素強度。
更新:右下方的圖像實際上是傅立葉圖像,所以我認為我們應該刪除BFF。
//convOut.BackwardFourierTransform();
似乎您沒有在Aforge中使用高斯內核,無論如何,該庫提供了一種與高斯卷積的方法:
int w=4,h=11;
GaussianBlur filter = new GaussianBlur( w, h );
// apply the filter
filter.ApplyInPlace( image );
試試看,其輸出應與其他輸出相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.