Я бы хотел оптимизировать этот фрагмент кода:
public void PopulatePixelValueMatrices(GenericImage image,int Width, int Height)
{
for (int x = 0; x < Width; x++)
{
for (int y = 0; y < Height; y++)
{
Byte pixelValue = image.GetPixel(x, y).B;
this.sumOfPixelValues[x, y] += pixelValue;
this.sumOfPixelValuesSquared[x, y] += pixelValue * pixelValue;
}
}
}
Это будет использоваться для обработки изображений, и в настоящее время мы запускаем это для примерно 200 изображений. Мы оптимизировали значение GetPixel для использования небезопасного кода, и мы не используем image.Width или image.Height, поскольку эти свойства добавляли к нашим затратам времени выполнения.
Однако мы все еще застряли на низкой скорости. Проблема в том, что наши изображения 640x480, поэтому середина цикла называется около 640x480x200 раз. Я хотел бы спросить, есть ли способ ускорить это, или убедить меня, что это достаточно быстро, как есть. Возможно, способ заключается в быстром Матричном добавлении или Матрицевом добавлении, по сути, операции n ^ 2 без возможности ускорить его?
Возможно, использование доступа к массиву с помощью небезопасного кода ускорит его, но я не уверен, как это сделать, и стоит ли времени. Возможно нет. Спасибо.
EDIT: Спасибо за все ваши ответы.
Это метод GetPixel, который мы используем:
public Color GetPixel(int x, int y)
{
int offsetFromOrigin = (y * this.stride) + (x * 3);
unsafe
{
return Color.FromArgb(this.imagePtr[offsetFromOrigin + 2], this.imagePtr[offsetFromOrigin + 1], this.imagePtr[offsetFromOrigin]);
}
}