Тестовое задание

предлагаем решить одну из тестовых задач:

Поскольку тестируется не способность соискателя прочитать описание и вызвать готовую функцию, а его умение самостоятельно написать реализацию математического алгоритма, применение математических библиотек допускается только на уровне элементарных действий вроде вычисления синуса, косинуса, квадратного корня и так далее.

Задание 1

Необходимо написать программу на Visual C++ (VS 2008) или Qt (Qt Creator), реализующую алгоритм оптического потока (Optical Flow) на последовательности из 5-10 кадров. Последовательность на выбор либо из короткого видео, либо из отдельных файлов с кадрами. Обязателен простейший пользовательский интерфейс, показывающий результат обработки на экране. Также обязательна обработка ошибочных ситуаций.

Задание 2

Реализовать детектор локальных максимумов определителя Гессиана (Determinant of Hessian Local Maxima Detector). Гессиан (Hessian) ­ оператор, результатом применения которого является 2х2 матрица вторых частных производных, найденная для каждого пикселя. Значения вторых производных необходимо вычислить, используя операцию свертки изображения (convolution) с вторыми производными Гауссиана (Gaussian). В данном случае ядром свертки (kernel) является соответствующая производная оператора Гаусса. Локальные максимумы определителя Гессиана ищутся по области 3х3. Далее ненадежные максимумы отфильтровываются по нижнему пороговому значению. Необязательным (но считающимся большим преимуществом) является нахождение локальных максимумов с субпиксельной точностью. Субпиксельное положение максимума уточняется при помощи аппроксимации двумерной функции поверхностью второго порядка. Поверхность второго порядка находится, используя разложение функции в ряд Тейлора. Коэффициенты ряда можно определить применяя дифференциальные операторы размера 3х3. Всю обработку необходимо проводить над черно­белым (grayscale) изображением (цветное изображение предварительно конвертируется в grayscale). Детектор должен быть реализован на языках С/C++, без использования сторонних библиотек обработки изображений. Крайне желательно реализовать сам алгоритм на чистом C. Допускается использование контейнеров STL или Qt. Параметрами детектора являются размер Гауссиана (scale) и нижнее пороговое значение определителя Гессиана для локальных максимумов. Детектор возвращает массив или контейнер с координатами всех найденных максимумов выше порогового значения. По возможности он должен работать в отдельном потоке. Желательно, чтобы приложение могло работать со сжатыми изображениями (jpeg). Время на выполнение задания неограниченно.

Подробное описание задания 2 (pdf)
Приложение и библиотеки x64 для задания 2 (архив .7z)
Приложение и библиотеки x86 для задания 2 (архив .7z)