Найти тему
Николай Сталин

D. Межгалактический исследователь «Джаваскриптович». Yandex Cup 2020: Фронтенд — Финал

В недалеком будущем исследование новых планет стало обыденным хобби благодаря «Джаваскриптовичу» — самостоятельному беспилотному космическому зонду, который:

проводит фотосъёмку в достаточно высоком разрешении: размер итоговой фотографии зачастую превышает 50 МБ,
для анализа и обработки изображения запускает пользовательский код на языке Javascript.

Благодаря своей простоте «Джаваскриптович» активно применяется в исследовании космоса. Однако у него есть особенность — пользовательский код запускается в том же потоке, что и код, управляющий спутником. Поэтому нельзя блокировать поток дольше, чем на 50 мс, иначе зонд потеряет управление.

Ваша задача — написать CommonJS-модуль поиска контуров предметов на сделанных снимках. Модуль должен экспортировать функцию, которая принимает два аргумента: первый — UInt8ClampedArray с битмапом кадра (каждые 4 байта — один пиксель в формате rgba), второй аргумент — объект, содержащий свойства width (ширина кадра) и height (высота кадра).

Требуется реализовать следующий алгоритм поиска контуров:

  • Перевести кадр в оттенки серого по формуле 0.21 R + 0.72 G + 0.07 B.
  • К результату п. 1 применить фильтр Dilation с окном 3х3 px.
  • К результату п. 1 применить фильтр Erosion с окном 3х3 px.
  • Вычесть попиксельно результат п. 3 из результата п. 2.
  • Однопиксельную границу кадра закрасить чёрным.
  • Применить к результату пороговую функцию со значением порога 90.
  • Функция должна возвращать promise с Uint8ClampedArray, в котором каждое значение равно 0 либо 255 и соответствует пикселю исходной картинки.

Алгоритм не должен блокировать главный поток дольше, чем на 50 мс. Использовать shared worker’ы запрещено. Суммарное время обработки одного кадра не должно быть слишком большим.

Описание фильтров Dilation и Erosion.

Примечания

Если решение слишком медленное, то результатом теста будет TL (Time Limit) или 0 баллов за тест. Если решение занимает главный поток дольше, чем на 50 мс, то балл будет снижен.

В архиве по ссылке «скачать условие задачи» вы найдёте страницу, которую можно использовать для отладки.

Скачать условие задачи

Наука
7 млн интересуются