簡體   English   中英

為什么在FFT自相關的情況下AForge.net提供不同的輸出?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM