diff --git a/src/algorithms/ViBe/vibe-background-sequential.cpp b/src/algorithms/ViBe/vibe-background-sequential.cpp index 4bec4e6d0b197ae2542b50fbf2e532b5e76c0950..b2bc8d47b13826b2fc218c76cfe258e052331f2b 100644 --- a/src/algorithms/ViBe/vibe-background-sequential.cpp +++ b/src/algorithms/ViBe/vibe-background-sequential.cpp @@ -548,16 +548,21 @@ namespace bgslibrary model->historyBuffer = (uint8_t *)malloc((3 * width) * height * (model->numberOfSamples - NUMBER_OF_HISTORY_IMAGES) * sizeof(uint8_t)); assert(model->historyBuffer != NULL); - for (int index = (3 * width) * height - 1; index >= 0; --index) { - uint8_t value = image_data[index]; - - for (int x = 0; x < model->numberOfSamples - NUMBER_OF_HISTORY_IMAGES; ++x) { - int value_plus_noise = value + rand() % 20 - 10; - - if (value_plus_noise < 0) { value_plus_noise = 0; } - if (value_plus_noise > 255) { value_plus_noise = 255; } - - model->historyBuffer[index * (model->numberOfSamples - NUMBER_OF_HISTORY_IMAGES) + x] = value_plus_noise; + auto plus_noise = [](uint8_t value) -> int {int value_plus_noise = value + rand() % 20 - 10; + if (value_plus_noise < 0) { value_plus_noise = 0; } + if (value_plus_noise > 255) { value_plus_noise = 255; } + return value_plus_noise;}; + for(int index = (3 * width) * height - 1; index >= 0; index -= 3) { + uint8_t value_1 = image_data[index]; + uint8_t value_2 = image_data[index - 1]; + uint8_t value_3 = image_data[index - 2]; + for(int x = 0; x < model->numberOfSamples - NUMBER_OF_HISTORY_IMAGES; ++x) { + int value_plus_noise1 = plus_noise(value_1); + int value_plus_noise2 = plus_noise(value_2); + int value_plus_noise3 = plus_noise(value_3); + model->historyBuffer[(index - 2) * (model->numberOfSamples - NUMBER_OF_HISTORY_IMAGES) + x * 3 + 2] = value_plus_noise1; + model->historyBuffer[(index - 2) * (model->numberOfSamples - NUMBER_OF_HISTORY_IMAGES) + x * 3 + 1] = value_plus_noise2; + model->historyBuffer[(index - 2) * (model->numberOfSamples - NUMBER_OF_HISTORY_IMAGES) + x * 3] = value_plus_noise3; } }