图像处理任务:侵蚀c#
本文关键字:侵蚀 任务 图像处理 | 更新日期: 2023-09-27 17:53:30
我正在做一个图像处理任务,我想实现侵蚀和膨胀算法。它需要在所有方向上寻找每个像素(在这个例子中是上、下、左和右),所以我使用了+结构元素。这里是我的问题:我嵌套了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++;
}
如何在不使用不安全方法的情况下使侵蚀过程更快?
可以将内环变为Parallel.For()
。
但我不是100%确定如果GetPixel(),特别是SetPixel()是线程安全的。
由于4个嵌套循环,您的算法本身很慢。您还使用可能最慢的方法bitmap.GetPixel
处理位图。
看一下SharpGL。如果他们没有你的过滤器,你可以下载源代码,看看如何做你自己的。