Автор: Брайан Браун (Bryan Brown), Intel, 4 мая 2015 г.
Аннотация
Этот код позволяет делать селфи-снимки с помощью веб-камеры, изменяя фон в режиме реального времени с помощью комплекта Intel® RealSense™ SDK для Windows*. Включенный в SDK алгоритм сегментации выделяет в каждом кадре изображение пользователя, а затем позволяет сменить или вырезать фон. Ниже приведен пример приложения, в котором фон заменяется на статичное изображение.
Рисунок 1. Сегментация фона: исходное изображение и результат
Введение
Сначала фон изображения заменяется на равномерный зеленый цвет. В нашем случае это дань традициям: зеленый — самый популярный цвет фона в технологии совмещения двух и более изображений или кадров в одной композиции, которая называется chroma key.
В отличие от технологии chroma key и двухмерных методов извлечения фона этот алгоритм сегментации использует синхронизированные данные о глубине и цвете изображения, поступающего с 3D-камеры. Поэтому, даже если одежда пользователя совпадает по цвету с фоном, она не будет выделена как его часть, а движущиеся объекты на заднем плане не будут сливаться с пользователем.
Приложение создает 32-битное изображение BGRA: синий, зеленый, красный каналы и альфа-канал, который также называется каналом-маской. Значение альфа-канала для пикселей фона равняется нулю, а для накладываемых (то есть соответствующих изображению пользователя) пикселей — положительному значению. (Подробнее об этом читайте в руководстве по работе с SDK: RSSDK_DIR\doc\PDF\sdkmanuals.pdf.)
Флажок в интерфейсе приложения позволяет удалить выбранный фон и вернуться к оригинальному варианту (см. изображение слева на рис. 1). Чтобы выбрать изображение для фона, нажмите кнопку Open File («Открыть файл»). В появившемся окне выберите нужное изображение формата BMP, JPG, PNG или GIF (рис. 2).
Рисунок 2. Окно выбора файла
Разрешение выбранного изображения автоматически изменяется на 640 x 480. В каждом кадре сегментированное изображение накладывается на выбранный фон, после чего кадры обрабатываются в графической системе WPF.
Когда пользователь нажимает кнопку Capture («Сделать снимок»), кадр сохраняется под названием MyPic.jpg (рис. 3).
Рисунок 3. Полученный снимок
Глубина кадра
3D-камера Intel® RealSense™ (F200)сочетает в себе инфракрасную камеру с определением глубины (разрешение — 640 x 480 пикселей) и RGB-камеру с разрешением 1080p. Получение изображения с двух камер помогает избежать проблем, которые возникают при извлечении фона из двухмерного изображения. Движущиеся на заднем фоне объекты, тени и нестабильное освещение не помешают правильной сегментации.
Среда разработки
Для разработки приложения можно использовать среду Microsoft Visual Studio* Express 2013 для Windows Desktop или профессиональные версии Visual Studio 2013.
Описание кода
Образец представляет классическое приложение Windows, написанное на C#. Разметка пользовательского интерфейса выполнена на языке XAML. Фрагмент кода, необходимый для работы с указателями и ускорения процесса обработки, обозначается ключевым словом unsafe. Подробнее о методах быстрой обработки изображений читайте на сайте C# Examples.
Согласно статье Небезопасный код и указателив MSDN*: «...небезопасный код в C# не обязательно представляет опасность. Это просто код, безопасность которого не может быть проверена средой CLR. Поэтому CLR выполнит этот код, только если он находится в полностью надежной сборке». Чтобы использовать ключевое слово unsafe, перейдите в меню Проект → Свойства → Сборкаи установите флажок «Разрешить небезопасный код».
В проекте прописан абсолютный путь к библиотеке libpxcclr.cs.dll: C:\Program Files (x86)\Intel\RSSDK\bin\x64. Если путь установки SDK отличается от стандартного, его нужно будет изменить соответствующим образом. Так как мы запускаем 64-битную версию DLL, перейдите в меню Проект → Свойства → Целевая платформаи убедитесь, что там выбрано значение «x64».
Подробнее об алгоритме сегментации можно узнать в документации SDK (RSSDK_DIR\doc\PDF\sdkmanuals.pdf) и в Руководстве по фоновой сегментации.
О технологии Intel® RealSense™
Подробнее о работе с комплектом Intel RealSense SDK для Windows читайте на сайте https://software.intel.com/ru-ru/intel-realsense-sdk.
Об авторе
Брайан Браун — инженер по разработке программных приложений в подразделении Developer Relations корпорации Intel.