침식 및 확장 알고리즘을 구현하려는 이미지 처리 지정을 수행하고 있습니다. 모든 방향 (이 경우에는 위, 아래, 왼쪽 및 오른쪽)에서 각 픽셀을 찾아야하므로 구조화 요소를 더 많이 사용합니다. 여기에 내 문제가있다 : 루프를 중첩시켜 4 개를 얻었으므로이 작업이 매우 느려진다. 안전하지 않은 방법을 사용하지 않고 침식 과정을 더 빠르게 만드는 방법을 알려줄 사람이 있습니까?이미지 처리 작업 : 침식 C#
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++;
}
동일한 숙제 : http://stackoverflow.com/questions/14325778/erosion-and-dilation-operation –
[LockBits] (http://msdn.microsoft.com/en-us/library/5ey6h79d. aspx) –
이 기능에 대해 여러 단계의 벤치 마크를 시도해보십시오. 무엇이 가장 느려지는 작업인지보십시오. 어쨌든 나는 포인터 나 네이티브 메소드 또는 lockbits를 사용하지 않고보다 빠른 방법으로이를 달성 할 수 있을지 의심 스럽다 ... x ++ 대신에 ++ x를 변경하여 루프 밀리 세컨드를 변경하여 불필요한 처리를 피할 수있다. (colorValueR 대신 of 0Array + colorValueR fromArgb), try/catch 문 제거, 목록 대신 Array를 사용하여 ... –