Пакетная обработка большого количества файлов - сначала сохранить в памяти или записать на диск? - PullRequest
2 голосов
/ 09 июня 2011

Я пишу программное обеспечение, которое может помочь мне откалибровать и сложить изображения - этот метод часто используется в астрономии / астрофотографии для уменьшения шума и устранения оптических проблем, таких как виньетирование.Я начну с объяснения чуть более подробно:

Калибровка состоит из 3 файлов - смещения, темного и ровного поля.Смещение и темнота вычитаются из основного изображения, а затем основное изображение делится на ровное поле.Все эти операции попиксельные, как вы можете себе представить.Все это не проблема, я запрограммировал это, и он работает просто отлично.Я открываю одно изображение за раз, калибрую его и затем закрываю.Освобождение памяти на ходу.

Однако мне также нужно иметь возможность складывать изображения, т.е. усреднять их, или брать медиану.

Мой вопрос заключается в том, должен ли я сначала калибровать каждое изображение, сохранять его во временном каталоге, а затем читать каждое изображение построчно и усреднять результат?Запись каждой усредненной строки по мере того, как я продолжаю.

или

Должен ли я сохранить каждое изображение в памяти (которое может стать очень большим), откалибровать необработанные пиксели и затем сохранить сложенное изображение?

Каков наилучший способ действий в этом сценарии?

Массивы пикселей сохраняются как (double*)rawPixels, когда я ими манипулирую.

1 Ответ

2 голосов
/ 09 июня 2011

Вы также можете заранее выделить место для среднего / медианного изображения (результат) и рассчитать его при выполнении итерации по изображениям. В псевдокоде:

Image average;
foreach( Image i in Images){
    Calibrate(i);
    UpdateAverage( average, i );
}

Ну, не все так просто, но вы поняли

...