Skip to content

Кондрашова Виктория. Технология STL. Маркировка компонентов бинарного изображения. Вариант 29.#655

Open
neishis wants to merge 4 commits intolearning-process:masterfrom
neishis:kondrashova_v_marking_components_stl
Open

Кондрашова Виктория. Технология STL. Маркировка компонентов бинарного изображения. Вариант 29.#655
neishis wants to merge 4 commits intolearning-process:masterfrom
neishis:kondrashova_v_marking_components_stl

Conversation

@neishis
Copy link
Copy Markdown
Contributor

@neishis neishis commented Apr 14, 2026

Описание

  • Задача: Маркировка компонентов бинарного изображения.

  • Вариант: 29

  • Технология: STL

  • Описание:
    Реализован параллельный алгоритм маркировки связных компонент на бинарном изображении с использованием std::thread. Изображение представлено как одномерный массив uint8_t, где 0 — объект (чёрный пиксель), 1 — фон. Используется 4-связность (соседи по горизонтали и вертикали).

  • Алгоритм:
    Изображение разбивается на равномерные горизонтальные полосы в зависимости от количества доступных аппаратных потоков. Через std::vector<std::thread> параллельно запускаются рабочие потоки, каждый из которых независимо сканирует свою полосу и производит разметку локально-уникальными метками. Дождавшись завершения потоков, выполняется последовательное объединение меток с помощью алгоритма Union-Find. Сначала объединяются метки по горизонтали, затем анализируются границы между полосами, которые обрабатывали разные потоки. На финальном этапе происходит перенумерация меток (чтобы они шли непрерывно: 1, 2, 3 и т.д.).

Сложность:
Параллельный этап (сканирование по полосам): O(W·H / P) — каждый поток обрабатывает свою независимую полосу
Последовательные этапы:
Union-Find объединение: O(W·H·α(W·H))
Перенумерация меток: O(W·H)

Входные данные:
ImageData: бинарное изображение (вектор uint8_t), ширина и высота

Выходные данные:
Result: количество компонент (count) и 2D-матрица меток (labels)

Тестирование (обновлено для 100% покрытия):

  • 6 функциональных тестов: пустое изображение (только фон), одна сплошная компонента, 4 изолированных пикселя, две раздельные области, а также два теста сложной формы (u_shape и матрица 5x5 complex).
  • 6 тестов производительности (изображения 512×512): сплошной фон, сплошной объект, шахматная доска (максимум компонент), разреженные точки, горизонтальные полосы, блоки 32×32.

Чек-лист

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