Обновить
8K+
13
Дмитрий Поздняков@Dmitry_Po

компьютерное зрение, глубокое обучение

5
Рейтинг
Отправить сообщение

Оптимизированное ядро ARC-фильтра обрабатывает FHD 1920*1080 (2 Mpx) на CPU в среднем за 0.65 сек. Конкретно в Мтлаб-е, если еще использовать возможности gpuArray, то где-то до 0.5 сек. можно опустится. А дальше - пропорционально: 960*540 обработается в 4 раза быстрее, 3840*2160 обработается в 4 раза медленнее. Эталонный NLM с настройками по умолчанию (размеры окон больше, чем те, что использовались в статье) приблизительно в 6 раз медленнее.

Однако, никто ещё не отменял "правильную" продуктизацию на C++ с полноценным использованием возможностей CUDA. Ожидаемый прирост производительности - в разы! Опыт подсказывает, что уровень в 30 fps для FHD выглядит достижимым. Но конкретно такая задача (продуктизация: C++ + CUDA) при исследовании не ставилась...

Строгих регламентов в стиле написания статей на Хабре, как бы, - нет...
А по обсужденной теме совсем не было желания тратить время на академические формальности. Посчитал целесообразным русскоязычную версию описания "подкапотной кухни" закрепить на Хабре для возможности делится ссылкой с коллегами, занимающимися близкой проблематикой. Быстро и удобно, чтобы не писать статью в рецензируемый журнал, к которому еще и свободного доступа зачастую не бывает.
А в природе и не существует метода, который бы позволил "бесплатно" извлекать информацию из шума. Ее потеря неизбежна, особенно когда мы опускаемся по SNR ~ 1.
То, что смартфоны, например, так гонятся за количеством мегапикселей легко объяснимо. Как раз, благодаря такого рода нелинейным фильтрам (особенно современным нейросетевым) можно получать конечный результат при избыточности количества пикселей для сбора фотонов по отношению к количеству пикселей в сохраняемом изображении, который существенно превышает качество, достижимое при банальной линейной интеграции сигналов по пикселям. То есть, чем больше пикселей при том же физическом размере матрицы, тем больше возможности "достать" полезный сигнал из шума за счет всякого рода нелинейных преобразований.
Как в обычных смартфонах, так и в медицине реальный SNR стараются держать гораздо выше 1, как раз в "удобной" для детекторов области. Но алгоритмы фильтрации намеренно "выводятся" в неудобные для их функционирования области уровня шума для проверки их чувствительности, селективности и устойчивости. Опять же вспомним популярный тест камер смартфонов в условиях недостаточной освещенности (ночью). Тогда то все самое интересное и начинается, а в условиях достаточной освещенности у всех результат плюс/минус - одинаковый. Тесты алгоритмов для унификации принято проводить на известных картинках (это как эталонные метр, килограмм и пр. с которыми сверяются все остальные меры). Точно также и метрики - стандартизированы! В медицине правда несколько иные используются для оценки качества диагностических изображений, например, CNR и пр. И делаются они, как раз, на структурах (называемых фантомами), обеспечивающих получение изображений, сходных с рис.1. А опухолей размером в 1 пиксель, поверьте, - не бывает! Всякого рода, микрокальцинаты например, да бывают. И даже субпиксельных размеров. Но сама технология получения изображений из-за "физики" не позволяет локализовать тень или луч на матрице в точку, это всегда - пятно, охватывающее несколько пикселей (рассеяние фотонов, дифракция, интерференция и пр.)!
Видео обрабатывается и покадрово и динамически, и именно благодаря динамике можно еще "лучше" вытаскивать полезные сигналы из шума, чем банальная покадровая статика. И здесь тот же принцип, чем выше частота кадров при одном и том же потоке излучения на матрицу, тем лучше будет результат нелинейных динамических преобразований.
А глобально, что касается метрик, то они общеприняты с целью возможности хоть какой-то объективной унитарной количественной оценки качества тех или иных преобразований над изображениями. Хотя способ "на глаз" еще никто не отменил...

Код нахождения наиболее дискриминативных компонент вектора признаков лица увы, но находится под лицензией Компании. Что же касается самого алгоритма, то он полноценно представлен в статье, чтобы с помощью описанной не очень-то сложной математики воплотить свою реализацию...

Кодом, к сожалению, не могу поделиться: он под лицензией (принадлежит Заказчику проектной работы). Статья же содержит необходимое и достаточное количество формул, чтобы быстро воспроизвести результат. Пробегаете пиксели выходной матрицы изображения [xp(i), yp(j)], заполняя её соответствующими значениями яркости по исходным пикселям [xs(i'), ys(j')], положения которых определяете через формулы (3) - (8). Единственное, советую использовать, как минимум, билинейную аппроксимацию для вычисления яркости выходного пикселя по ближайшим 4 входным пикселям, поскольку узлы 2-х сеток совсем не совпадают. Более полную версию статьи см. здесь (там немного в иной форме некоторые выражения): https://arxiv.org/abs/2010.10295

Авторы указанной работы использовали аппроксимации иного уровня формализации. Лучше-хуже? Сложный вопрос. На него можно ответить только по результатам тестирования различных подходов по точности и производительности. Мы не ставили себе такой задачи.
А задача была такой: под конкретный объектив, используемый Заказчиком в практических целях, добиться практически идеальной быстрой компенсации дисторсии без потери поля зрения и разрешающей способности с увеличением размера выходного изображения не более, чем в 4 раза. И когда мы не нашли готового решения, удовлетворяющего критериям, пришлось "изобретать велосипед"... А исходный сыр-бор начался из необходимости не только детектировать лица людей с fisheye-камер, но и распознавать их даже когда они на периферии видеокадра...

Смотрите эквидистантную схему тут: Рыбий глаз (объектив) — Википедия (wikipedia.org)

Если для неё всё аккуратно расписать, то можно совершенно строго получить равенство (2), в котором вместо фокусного расстояния f' введена постоянная R0 для большего удобства реальной калибровки камеры на практике (съемка эталонного плоского изображения с известным расстоянием от него до точки схождения лучей объектива).

Можно представленный подход обобщить (этим мы тоже упражнялись, но в прод это не ушло, и в статье не отражено) на любую схему. Тогда равенство (2) будет иметь другой строгий вид (только нужно иметь ввиду, что эта строгость условная в том плане, что с помощью системы линз принципиально невозможно добиться дисторсии, тождественной одной из идеализированных схем). Далее на основе некой другой функциональной зависимости сходной с (2) можно построить соответствующую аппроксимирующую её функцию так, чтобы получать в итоге аналогичный конечный результат коррекции...

Советую, ради спорта, вживую реализовать любой из современных алгоритмов для объектива fisheye, охватывающего половину телесного угла (или более) с aspect ratio 1:1, и затем удержать 100% поля зрения при том же выходном размере изображения, что и входное, с уменьшением разрешающей способности по изображению не более, чем в 2 раза!

Получится, - пишите! Обязательно внесу изменения в статью!..

Математическая "кухня" - не в счет! В основе то лежит рассмотрение (описание) самой дисторсии через полином, пусть даже и весьма высокой степени...

При сохранении всего исправленного поля зрения "в лоб", у Вас будет либо почти бесконечно большая картинка по количеству пикселей, либо будет потеряна разрешающая способность по всей области чуть дальше внешней границы к центру, если удерживать их количество.

Теория - теорией (проекции и все такое...), а на практике не все так "гладко" и просто, как хотелось бы...

В оригинальной статье есть ссылки и на более современные подходы...

В настоящее время, даже нейросети умудряются обучать для решения проблемы.

Что касаемо "https://docs.opencv.org/4.5.2/db/d58/group__calib3d__fisheye.html", так здесь в основе всё та же геометрия и, соответственно, всё те же Brown и Conrady.

На сегодняшний день при исправлении дисторсии все существующие модели, во-первых, "не умеют" сохранять поле зрения с такой полнотой, и, во-вторых, имеют не единственный (R0), а множество настроечных (подгоночных) параметров модели...

У оптики свои достоинства!
Но имеются и недостатки: либо у нас малый угол обзора и неискаженное изображение, либо искаженное изображение с большим углом обзора. И это противоречие для изображений и видео с камер "рыбий глаз" можно решить хоть как-то лишь с помощью цифровой обработки...

С формулами теперь - порядок (удалось таки удачно преобразовать Latex скрипты в растр)!

Информация

В рейтинге
1 248-й
Откуда
Минск, Минская обл., Беларусь
Дата рождения
Зарегистрирован
Активность

Специализация

Ученый по данным, Инженер по компьютерному зрению
Ведущий