Оптимизация среднего изображения Mathematica

я впервые задаю вопрос в stackoverflow. Я изо всех сил старался не нарушать правила, но дайте мне знать, если они есть — пожалуйста, поймите, поскольку это мой первый раз.

У меня есть код на Mathematica, и я думаю, что он ДЕЙСТВИТЕЛЬНО медленный.

У меня есть стопка изображений — пара сотен, и я создавал простой алгоритм в Mathematica для объединения изображений в одно изображение путем усреднения данных пикселей по всему стеку.

Например, предположим, что у меня есть пиксель размером 520 x 23, и я хочу получить все числа (данные) из каждого отдельного изображения в стеке и усреднить эту таблицу. Я хочу повторить этот процесс для каждого пикселя моего изображения. Затем я смогу преобразовать данные в изображение, используя Image[]. Для тестирования я использовал изображение 1024 на 1024, но в конечном итоге хочу использовать 8000 на 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. Есть ли польза от использования каких-либо параллельных вычислений для этой конкретной реализации?


person hbar    schedule 22.11.2012    source источник
comment
mathematica.stackexchange.com   -  person nhahtdh    schedule 22.11.2012


Ответы (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]

Графика Mathematica

Для большого набора случайных изображений он должен сходиться к однородному серому (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]

Графика Mathematica

person Dr. belisarius    schedule 22.11.2012
comment
Спасибо. Image@Mean[ImageData /@ilist] выполняет свою работу. - person hbar; 22.11.2012