1

侵食と膨張アルゴリズムを実装したい画像処理の割り当てを行っています。すべての方向 (この場合は上下左右) で各ピクセルを探す必要があるため、プラスの構造化要素を使用しています。ここに私の問題があります: 4 つの for ループがネストされているため、この操作が非常に遅くなります。安全でない方法を使用せずに侵食プロセスをより速くする方法を誰か教えてもらえますか? ここに私が持っているものがあります:

        colorlistErosion = new List<Color>();
        int colorValueR, colorValueG, colorValueB;
        int tel = 0;

        for (int y = 0; y < bitmap.Height; y++)
        {
            for (int x = 0; x < bitmap.Width; x++)
            {
                Color col = bitmap.GetPixel(x, y);
                colorValueR = col.R; colorValueG = col.G; colorValueB = col.B;
                //Erosion
                for (int a = -1; a < 2; a++)
                {
                    for (int b = -1; b < 2; b++)
                    {
                        try
                        {
                            Color col2 = bitmap.GetPixel(x + a, y + b);
                            colorValueR = Math.Min(colorValueR, col2.R);
                            colorValueG = Math.Min(colorValueG, col2.G);
                            colorValueB = Math.Min(colorValueB, col2.B);
                        }
                        catch
                        {
                        }
                    }
                }
                colorlistErosion.Add(Color.FromArgb(0 + colorValueR, 0+colorValueG, 0+colorValueB));
            }
        }
        for (int een = 0; een < bitmap.Height; een++)
            for (int twee = 0; twee < bitmap.Width; twee++)
            {
                bitmap.SetPixel(twee, een, colorlistErosion[tel]);
                tel++;
            }
4

2 に答える 2

0

安全でない方法を使用せずに侵食プロセスをより速くする方法は?

内側のループをに変えることができますParallel.For()

しかし、GetPixel()、特にSetPixel()がスレッドセーフであるかどうかは100%わかりません。それは契約破りです。

于 2013-01-15T14:45:31.770 に答える
0

4 つのネストされたループがあるため、アルゴリズムは本質的に低速です。また、可能な限り遅いアプローチを使用してビットマップを処理していますbitmap.GetPixel

SharpGLを見てください。フィルタがない場合は、ソース コードをダウンロードして、独自のフィルタを作成する方法を見つけてください。

于 2013-01-15T14:54:29.760 に答える