Как сделать преобразование фурье для изображения по xy?

В C# существует несколько способов выполнения преобразования Фурье для изображений по осям x и y. Один из наиболее популярных и эффективных методов - это использование библиотеки AForge.NET.

Для начала, установите NuGet пакет AForge.Imaging, который предоставляет инструменты для работы с изображениями. Для этого откройте консоль диспетчера пакетов в Visual Studio и выполните следующую команду:

Install-Package AForge.Imaging

После установки, подключите нужные пространства имен:

using AForge.Imaging;
using AForge.Math;

Затем, загрузите изображение, с которым вы хотите работать. Например:

Bitmap image = new Bitmap("path/to/image.jpg");

Прежде чем применять преобразование Фурье, необходимо убедиться, что размер изображения является степенью двойки (например, 256x256 пикселей). Если это не так, можно использовать метод ResizeImage класса ImageResizer из AForge.Imaging для изменения размера изображения до подходящей степени двойки:

int newSize = (int)Math.Pow(2, Math.Ceiling(Math.Log(image.Width, 2)));
Bitmap resizedImage = ImageResizer.ResizeImage(image, newSize, newSize);

Далее, преобразуйте изображение в двумерный массив значений пикселей. Это можно сделать с помощью метода ToMatrix из класса ImageStatistics из AForge.Imaging:

ImageStatistics stats = new ImageStatistics(resizedImage);
double[,] pixels = stats.Red.Matrix;

Теперь у вас есть двумерный массив значений пикселей, который можно передать в методы преобразования Фурье библиотеки AForge.NET.

Преобразование Фурье по осям x и y можно выполнить с помощью методов FourierTransform2.Forward и FourierTransform2.Backward из класса AForge.Math.Complex:

Complex[,] frequencyDomain = new Complex[resizedImage.Width, resizedImage.Height];
FourierTransform2.Forward(pixels, FourierTransform.Direction.Forward, out frequencyDomain);

После применения преобразования Фурье, вы получите массив значений в частотной области. Если вы хотите выполнить обратное преобразование, используйте метод FourierTransform2.Backward:

double[,] restoredPixels = new double[resizedImage.Width, resizedImage.Height];
FourierTransform2.Backward(frequencyDomain, out restoredPixels);

Затем, вы можете создать новое изображение из этого двумерного массива значений пикселей и сохранить его:

Bitmap restoredImage = new Bitmap(resizedImage.Width, resizedImage.Height);
for (int x = 0; x < resizedImage.Width; x++)
{
    for (int y = 0; y < resizedImage.Height; y++)
    {
        int pixelValue = (int)Math.Round(restoredPixels[x, y]);
        restoredImage.SetPixel(x, y, Color.FromArgb(pixelValue, pixelValue, pixelValue));
    }
}

restoredImage.Save("path/to/restoredImage.jpg");

Надеюсь, эта информация поможет вам выполнить преобразование Фурье для изображений по осям x и y в C# с использованием библиотеки AForge.NET. Если у вас возникнут вопросы или потребуется дополнительная помощь, не стесняйтесь обратиться за помощью.