AForge - 巴特沃思低通滤波器 - 如何从 Complex[,] 数组创建 ComplexImage

本文关键字:Complex 数组 ComplexImage 创建 低通滤波器 AForge | 更新日期: 2023-09-27 18:35:06

我正在尝试使用 AForge 在 C# 中实现巴特沃思低通滤波器。我创建了以下函数:

    public static ComplexImage ButterworthLP(double freq, double power, ComplexImage inImage)
    {
        int ydim = inImage.Height;
        int xdim = inImage.Width;
        Complex[,] imgData = inImage.Data;
        for(int v = 0; v<ydim; ++v)
        {
            for(int u = 0; u<xdim; ++u)
            {
                int dv = (v < ydim / 2) ? v : v - ydim;
                int du = (u < xdim / 2) ? u : u - xdim;
                double dist = (double)(dv * dv + du * du);
                // Apply filter
                double filter = 1 / (1 + Math.Pow(dist / (freq * freq), power));
                imgData[v, u].Re *= filter;
                imgData[v, u].Im *= filter;
            }
        }
        ComplexImage cImg = new ComplexImage(xdim,ydim);
        return cImg;
    }

ComplexImage.Data 属性是只读的;因此,目前,我正在获取数据并对其进行修改。我现在想使用这个修改后的复杂数据数组创建一个 ComplexImage,但我还没有弄清楚如何做到这一点。如果有修改输入图像数据的替代方法,我也愿意接受建议。

AForge - 巴特沃思低通滤波器 - 如何从 Complex[,] 数组创建 ComplexImage

来自文档

构造函数受到保护,这使得无法实例化 直接上课。创建此类的实例 应使用 FromBitmap(Bitmap) 或 FromBitmap(BitmapData) 方法。

正如您发现的那样,数据是只读的

所以基本上我认为您必须下载源代码,并对其进行自定义以添加过滤器

此外,您可以尝试他们的论坛,这可能是更直接的帮助