AForge - Butterworth低通滤波器 - 如何从Complex [,]数组创建ComplexImage?

时间:2014-12-24 00:25:02

标签: c# filter aforge

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

    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,但我还没弄清楚如何这样做。如果有另一种修改输入图像数据的方法,我也愿意接受建议。

1 个答案:

答案 0 :(得分:0)

来自文档

  

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

并且您发现数据是只读的

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

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