1

这是我第一次在 stackoverflow 中提问。我努力不做出任何违反准则的行为,但如果有任何违反,请告诉我——请理解,因为这是我第一次。

我在 Mathematica 中有一个代码,我认为它真的很慢。

我有一堆图像——几百个,我在 Mathematica 中创建了一个简单的算法,通过对整个堆栈中的像素数据进行平均来将图像组合成一个图像。

例如,假设我有一个 520 x 23 的像素,我想从堆栈中的每个图像中获取所有数字(数据)并平均该表。我想对图像中的每个像素重复这个过程。然后,我将能够使用 Image[] 将数据重建为图像。对于测试,我使用了 1024 x 1024 图像,但最终我想使用 8000 x 8000。

这是我的代码:

idlist = Map[ImageData, ilist];
Table[Table[Map[Mean,Transpose[Table[idlist[[a,b,c]],{a,1,Length[idlist]}]]],{b,1,1024}], {c, 1, 1024}]

由于一些奇怪的原因,我发现我的嵌套表比使用单个表要快。

1.我应该如何优化这个?2.对于这个特定的实现,使用任何并行计算有什么好处吗?

4

1 回答 1

1

我不确定我是否遵循您的编码,但要获得一堆图像的平均像素值,您可以简单地执行以下操作(速度很快):

imDim = 100;
n = 80;(*number of images*)
(*generate random image list*)
ilist = Array[RandomImage[1, {imDim, imDim}, ColorSpace -> "RGB"] &, n];
(*take mean*)
Image@Mean[ImageData /@ ilist]

数学图形

对于大量随机图像,它应该收敛到均匀的灰色 (RGB[.5,.5,.5])。让我们测试一下:

imDim = 3;
n = 2000;(*number of images*)
(*generate random image list*)
ilist =  Array[RandomImage[1, {imDim, imDim}, ColorSpace -> "RGB"] &, n];
(*take mean*)
Image@Mean[ImageData /@ ilist]

数学图形

于 2012-11-22T14:13:56.117 回答