Деформация цветовых пространств методом Moving Least Squares

— Меньше оваций, больше ассигнаций!
(из фильма «O Brother, Where Art Thou?»)

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

Сегодня предлагаю отдохнуть от чисто программистского трюкачества и заняться настоящими хардкорным факин-балавством, но уже не в терминах простых и понятных объектов, а будем искривлять и портить то, что так любим: пространства.  Цветовые. Например, так:

Читать далее

Реклама

Как из SCNSphere сделать что угодно с помощью Metal. Например, 3D RGB-Cube

Джулс: Знаешь почему так? 
Брэд: Метрическая система?
Джулс: Гляди как наш Бред мозговит!
Смышленый сукин сын, это точно — всё просек.
(из фильма «Криминальное чтиво»)

Дорогие слушатели нашей радиостанции, если вы переодически следите за нашими выпусками, то в целом в курсе наших новейших исследований цвета в нашей высоко-профессиональной любительской лаборатории. И уже имеете представление о том как цвет влияет на общее восприятие изображения. Очень важной фишкой в таких исследованиях являются цветовые пространства, в которых, обычно, можно производить манипуляции с пикселами картинки, системно её «ухудшая». Так удачно сложилось, что почти все такие пространства 3-х компонентные. А это означает, что мы можем попытаться визуализировать то как наши дурные наклонности могут его деформировать относительно исходного состояния в 3D сцену.

В многообразии фреймворков Apple есть очень мощный SDK SceneKit.  Сегодня мы распотрошим сразу двух кроликов: изучим как нам нарисовать произвольную 3D-фигуру с помощью инструментов SceneKit. А так же научимся добавлять очень большое количество дополнительных объектов в 3D-сцену, быстро её  деформировать, модифицировать и манипулировать свойствами всех добавленных объектов с помощью Metal.

Читать далее

Вычисление доминантного цвета изображения. Нормализация цветового баланса против баланса белого

Меня как-то спросили, страдаю ли я от похмелий.
Для того, чтобы были похмелья, нужно перестать пить.
Так что данная проблема просто не возникает.
(Приписывают Л. Килмистеру)

Попробуйте задать гуглу вопрос вроде: How to calculate the dominant color of an image? Или что-то вроде того же спросите у stackoverflow, для большей релевантности. В случае с гуглом вы получите результат примерно из более чем 30 миллионов поисковых ответов. 30 миллионов! 30, Клара!

Снимок экрана 2015-12-12 в 11.28.52

В общем я подумал недолго и понял: маловато. Надо бы добавить еще одну строчку. Тем более что вопрос не праздный, а вполне себе имеет практический смысл, в отличие, скажем, от поиска доминантных цветов из предыдущего поста. Решение этой задачи дает возможность проделать несколько простых манипуляций над фотографическим изображением. Например, исказить исходное соотношение цветов, т.е. «ухудшить» его технические характеристики и значит несколько улучшить перцептуальные свойства. А как вы уже заметили, наша теплая компания совершенно помешана на деструктивных способах обработки фотографических изображений, и значит нам условно полезно иметь этот инструмент в собственном исполнении. И целью сегодняшнего упражнения будет видоизменить общий баланс цветов исходной никчемной цифровой картинки до состояния нейтралей, чтобы получить возможность разбавить, в итоге, исходные цвета до приемлемо гармоничных. А для этого нам в первую очередь понадобится вычислить этот самый доминантный цвет.

Читать далее

Самый лучший селективный HSV-adjustment фильтр ever.

Мы не заблудились, мы просто не знаем где мы находимся.
(South Park)

Наверное не будет преувеличением утверждение: каждый фотограф или человек занимающийся фотографией хоть раз в жизни использовал инструмент называющийся «Hue/Saturation» или вроде того. С этим весьма популярным инструментом есть одна интересная история: в природе не существует более-менее адекватной реализации доступной в исходных кодах. Каждый разработчик либо конструирует все самостоятельно, либо использует готовый код из свободного Gimp либо городит безумные конструкции вокруг расширений ImageMagic. Те же, кто знают тайну, попросту жмутся, не делятся исходниками или же выкладывают в сеть что-то вроде пресловутого Gimp. Пробовали с ним работать? Вот то-то и оно.

А давайте уже нарушим эту монополию, сорвем покровы с реализации этого инструмента в виде Metal-апического кода, но не под iOS, а, например, под OSX. Так удобнее крутить параметры слайдерами и видеть изменения в реальном времени. А еще будет удобно рисовать гистограмму и наблюдать как меняется представление картинки в «частотном домене».

Читать далее

Как написать свой Metalagram. Color Lookup Tables или CLUT-ы в Metal

Смоки, тут не Вьетнам. Это — боулинг. Здесь есть правила.
Уолтер Собчак/Большой Лебовски

В самом первом посте этого блога я обещал, что мы напишем свою версию приложения фото-камеры с фильтрами, что-то вроде Instagram-а или встроенной Камеры iOS. В 100500й раз. Приложение будет конечно же круче в тоже самое количество раз. Все дело в количестве припоя кода которого мы нальем в программу, что-бы сделать её работающей. Его практически не будет. Сомневаюсь, что у отцов-основателей Instagram были наши сегодняшние возможности. А еще у нас будут большие файлы формата Cube LUT Specification Version 1.0. В общем пишем свой Instagram!

Приложение будет выглядеть как-то так:

Metalling App

Вот сегодня это и сделаем: возьмем в руки отвертку и паяльник XCode и напаямем накодируем кода: быстренько обернем Metal в свой фреймворк и сосредоточимся, в итоге, исключительно на разработке фильтров не отвлекаясь на детали. А еще проще использовать готовый через cocoapods: DPCore3. Эта штука находится еще на стадии активных доработок, но вполне сгодится для использования в качестве слоя абстракции уменьшающего количества кода на единицу  времени программиста. Но обо всем по порядку.

Читать далее