Я пытаюсь выполнить настройку цвета в мобильном приложении для фотосъемки с помощью Xrite ColorChecker, и для этого я пытаюсь найти способ найти образцы цвета на панели проверки в представлении.
Я предполагаю
Так выглядит ColorChecker. Меня интересуют именно образцы в правой половине устройства.
Приложение предназначено для iOS 11 и построено на Xamarin.iOS и C#.
Моя первая идея заключалась в том, чтобы использовать встроенные возможности дополненной реальности в iOS для идентификации прямоугольника в сцене, но я обнаружил, что это не сработает, поскольку устройство имеет нестандартную форму, и доступные методы не могут найти его. Я также узнал, что можно обучить модель машинного обучения, чтобы ответить на вопрос о том, находится ли ColorChecker на текущем экране, но я все равно не отвечу на вопрос о том, где находятся отдельные образцы цвета и как ориентировано устройство.
Я также нашел Алгоритм CCFind с помощью MATLAB, который действительно находит ColorChecker по фотографии, но недостаточно быстр даже на мощном ПК, чтобы его можно было использовать в качестве решения в реальном времени, а также MATLAB не может быть перенесен на iOS, поэтому я попытался переписать код, чтобы OpenCV + C++, что было утомительно, и я не смог его успешно завершить почти за месяц работы.
Я открыт для любых предложений или советов о том, как подойти к этой проблеме, поскольку я не очень разбираюсь в области компьютерного зрения и действительно не знаю, с чего начать.
Используя CIFilters, некоторые стандартные и некоторые написанные на заказ, я бы разбил видеопоток на более мелкие блоки (CIFilters на основе измельчения), в основном систему сканирования, сверху-слева направо. Используя настраиваемый фильтр в стиле CILineOverlay, чтобы упростить изображение для поиска прямоугольников (перекошенных или нет), проверьте гистограммы на основе CIFilter, чтобы определить, были ли найдены все / некоторые цвета диаграммы Макбета в этом прямоугольнике. Если это так, скорректируйте прямоугольник, чтобы определить, как при необходимости изменить обрезку в реальном времени, пока цветовая гистограмма CIFilter не будет содержать «совпадений» для всех (большинства) цветов диаграммы в прямоугольнике.
Поскольку диаграмма Макбета (Xrite или нет) содержит их цвета чипов в заранее определенном шаблоне, в этот момент действительно легко получить каждый цвет независимо от ориентации и произвести синтетические макбет, и, таким образом, создается CIImage, содержащий iOS цвет, отображаемый камерой, по сравнению с синтетическим (это было сохранено для использования в будущем для постпродакшна). Теперь к потоку была применена цветовая матрица CIFilter, и для анализа освещения был произведен параллельный предварительный просмотр. Таким образом, директор по свету / гаффер / бестбой мог настраивать сцену / декорации в режиме реального времени.
Фаза анализа была удивительно быстрой на iPhone последнего поколения, и поскольку фильтры CIIFilters можно связывать, а их ядро графического процессора предварительно скомпилировано в реальном времени, поиск цветовой диаграммы в реальном времени занял всего секунду или около того, прежде чем отобразился предварительный просмотр с коррекцией цвета. Конечно, создание специальных GLSL-фильтров CIFilters было основой этого типа рабочего процесса с изображениями. Подход ML был бы действительно крутым, но в этом случае я не уверен, что затраты / время на обучение того стоят, просто чтобы найти цветовую диаграмму, но рекомендовать изменения освещения после того, как была рассчитана матрица калибровки цвета, было бы действительно хорошим материалом. ;-) ?
Большое спасибо за ваше предложение @SushiHangover :-). Я проверю CIFilters, звучит многообещающе :-)!





Я сделал «похожий» проект, не используя Xrite, но он был в категории калибровки цвета «Диаграмма Макбета». Таким образом, две основные цели заключались в том, чтобы найти цвета диаграммы Макбета и применить цветокоррекцию в реальном времени для предварительного просмотра (а также сохранить исходные необработанные данные камеры без применения какого-либо цветового пространства, но это уже другая история).