2011-03-01 192 views
0

假设我有一系列黑白图像,不是灰度图像。我试图计算所有图像的平均值。我有一些应该工作的示例代码,但我想知道是否有更好的方法?C#:平均图像系列

Bitmap[] Images = ReadAndScale(Width: 50, Height: 50); 

int Width = 50; 
int Height = 50; 

double[,] Result = new int[50,50] 

for (int i = 0 i < Images.Count; i++) 
{ 
    for (int j = 0; j < Width; j++) 
    { 
    for (int k = 0; k < Height; k++) 
    { 
     Result[j, k] += Images[i].GetPixel(j,k) == Color.White ? 0 
         : 1.0/(double)Images.Count; 
    } 
    } 
} 

在这些循环的结尾处,您有一个包含平均值的数组Result []; > .5是黑色的,否则平均值是白色的。

+1

什么是不工作?你计算平均结果然后你做什么? – 2011-03-01 02:37:43

回答

0

嗯,我认为你的一般算法很好,并不是真正使这种“更好”的方法。

我看到你的唯一方法可以让它“更好”,将是更多的表现,但你需要吗?

我看到的主要问题是使用GetPixel(),因为它是一个相对较慢的方法。下面是一个使用不安全代码的例子,它的运行速度要快得多:Unsafe Bitmap

不要让“不安全”这个词吓倒你,它只是在C#中启用真指针的关键字。

0

那么,你可以使图像成为内部循环,一旦你保证平均值小于或大于.5,就立即爆发。不知道这是否真的“更好”。