我想要优化这段代码:
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操作没有任何加速的方法?
也许通过不安全代码进行数组访问会加快速度,但我不确定如何去做,以及是否值得时间和精力。可能不值得。
编辑:感谢所有回答。
这是我们正在使用的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]);
}
}
[y, x]
的方式进行访问。 - Jon Skeet