Skip to content

Comments

Клименко Владислав. Технология OMP. Повышение контраста полутонового изображения посредством линейной растяжки гистограммы. Вариант 28#71

Open
limdizz wants to merge 4 commits intolearning-process:masterfrom
limdizz:klimenko_v_lsh_contrast_incr_omp

Conversation

@limdizz
Copy link
Contributor

@limdizz limdizz commented Feb 25, 2026

Общее описание

Алгоритм выполняет линейное растяжение гистограммы изображения (контрастирование) путем масштабирования значений яркости пикселей из исходного диапазона в полный диапазон [0, 255].

Подробное описание

  1. Валидация (ValidationImpl)
    Проверяет, что входные данные не пустые.

  2. Предварительная обработка (PreProcessingImpl)
    Выделяет память под выходные данные того же размера, что и входные.

  3. Основной алгоритм (RunImpl)

Шаг 1: Параллельный поиск минимального и максимального значений

int min_val = input[0];
int max_val = input[0];

#pragma omp parallel for default(none) shared(input, size) reduction(min : min_val) reduction(max : max_val)
for (size_t i = 0; i < size; ++i) {
  min_val = std::min(input[i], min_val);
  max_val = std::max(input[i], max_val);
}

Используется OpenMP редукция для параллельного поиска

Каждый поток обрабатывает свою часть данных

Результаты объединяются с помощью операций min и max

Шаг 2: Обработка частного случая

if (max_val == min_val) {
#pragma omp parallel for default(none) shared(input, output, size)
for (size_t i = 0; i < size; ++i) {
  output[i] = input[i];
}
return true;

}

Если все пиксели имеют одинаковую яркость, выходное изображение копируется из входного (параллельно)

Шаг 3: Параллельное преобразование каждого пикселя

const int range = max_val - min_val;
#pragma omp parallel for default(none) shared(input, output, size, min_val, range)
for (size_t i = 0; i < size; ++i) {
  output[i] = ((input[i] - min_val) * 255) / range;
}
return true;

Каждый пиксель обрабатывается независимо в параллельном цикле

Формула преобразования:

новое_значение = ((старое_значение - минимум) * 255) / (максимум - минимум)
  1. Пост-обработка (PostProcessingImpl)
    Проверяет, что размер выходных данных соответствует размеру входных.

Особенности реализации

Эффективная обработка больших изображений.

Независимая обработка пикселей.

Минимизация накладных расходов на синхронизацию.

  • Задача: Повышение контраста полутонового изображения посредством линейной растяжки гистограммы
  • Вариант: 28
  • Технология: OMP
  • Описание вашей реализации и отчёта.
    Реализация содержит OMP-версию алгоритма повышения контраста полутонового изображения посредством линейной растяжки гистограммы.

Чек-лист

  • Статус CI: Все CI-задачи (сборка, тесты, генерация отчёта) успешно проходят на моей ветке в моем форке
  • Директория и именование задачи: Я создал директорию с именем klimenko_v_lsh_contrast_incr_omp
  • Полное описание задачи: Я предоставил полное описание задачи в теле pull request
  • clang-format: Мои изменения успешно проходят clang-format локально в моем форке (нет ошибок форматирования)
  • clang-tidy: Мои изменения успешно проходят clang-tidy локально в моем форке (нет предупреждений/ошибок)
  • Функциональные тесты: Все функциональные тесты успешно проходят локально на моей машине
  • Тесты производительности: Все тесты производительности успешно проходят локально на моей машине
  • Ветка: Я работаю в ветке, названной точно так же, как директория моей задачи
    (klimenko_v_lsh_contrast_incr_omp), а не в master
  • Правдивое содержание: Я подтверждаю, что все сведения, указанные в этом pull request, являются точными и
    достоверными

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant