Skip to content

Шакирова Есения. Технология OMP. Выделение ребер на изображении с использованием оператора Собеля. Вариант 27#373

Open
Eseniya1134 wants to merge 3 commits intolearning-process:masterfrom
Eseniya1134:shakirova_e_sobel_edge_detection_omp

Conversation

@Eseniya1134
Copy link
Contributor

@Eseniya1134 Eseniya1134 commented Mar 17, 2026

Описание

  • Задача: Выделение ребер на изображении с использованием оператора Собеля
  • Вариант: 27
  • Технология: OMP
  • Описание:
    • Постановка задачи: Дано полутоновое изображение размером width * height. Требуется применить оператор Собеля для выделения ребер на изображении.
    • Входные данные: Изображение в виде контейнера using InType = ImgContainer, где ImgContainer содержит ширину, высоту и вектор пикселей в диапазоне [0, 255]. Входное изображение может быть как полутоновым (grayscale), так и цветным — цветные изображения форматов .png автоматически преобразуются в полутоновые по формуле 0.299*R + 0.587*G + 0.114*B. Также поддерживается задание изображения в виде текстовой матрицы .txt, где первая строка содержит размеры, а далее следуют значения пикселей.
    • Выходные данные: Границы: using OutType = std::vector<int>, где каждый элемент — магнитуда градиента в диапазоне [0, 255].
    • Реализация: Реализована параллельная версия OpenMP оператора Собеля для обнаружения ребер на изображении. Для каждого внутреннего пикселя изображения вычисляется свёртка с двумя ядрами Собеля размером 3×3: горизонтальным Gx и вертикальным Gy. На основе полученных значений вычисляется магнитуда градиента по формуле sqrt(Gx^2 + Gy^2), которая ограничивается диапазоном [0, 255] и записывается в выходной вектор. Внешний цикл по строкам изображения распараллелен с помощью директивы #pragma omp parallel for с явным указанием областей видимости переменных: default(none) shared(out, k_gx, k_gy) firstprivate(h, w). Это гарантирует корректное распределение работы между потоками без гонок данных, так как каждый поток записывает результат в независимые ячейки выходного вектора. Граничные пиксели изображения остаются нулевыми, так как для них невозможно применить полное ядро 3×3. Поддерживается загрузка изображений форматов .png, .jpg, .bmp через библиотеку stb_image, а также текстового формата .txt.

Чек-лист

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

@codecov-commenter
Copy link

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 79.17%. Comparing base (97dd371) to head (ac9a027).

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #373   +/-   ##
=======================================
  Coverage   79.16%   79.17%           
=======================================
  Files         267      268    +1     
  Lines        9325     9343   +18     
  Branches     3963     3965    +2     
=======================================
+ Hits         7382     7397   +15     
- Misses       1374     1375    +1     
- Partials      569      571    +2     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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.

2 participants